最近在刷CTF题目,无意中找到了securityoverride这个网站,觉得还不错,题目比较循序渐进。也不是往常的以获取flag为目的的形式,而是单纯的通过实例来模拟真实场景。于是在这里把每一题的答案以及解题思路记录下来,方便自己整理。
如果有人也想刷题,建议还是避免直接看答案,而是通过题目本身去进行搜索,这个过程也可以了解到很多新的概念,学习知识。另外,securityoverride本身支持了论坛,里面的帖子中基本都包含了每一题的hint,可以多加利用。
1. Reconnaissance
1.1. IP addressidentification
找IP,ping一下就好了,或者whois也行
1.2. NS serveridentification
找Name Server, whois 完事
1.3. PHP versionindentificaiton
看HTTP头
1.4. Full path Disclosureidentification via Array
利用服务器对崩溃日志管理不当来获取服务器的完整路径方法。在这里将GET参数page=1改为page[]=1,则page就会以数组的形式被服务器接收,而服务器没有错类型检测,直接当字符使用,从而产生崩溃。从崩溃日志就会暴露出完整文件路径
1.5. Full path Disclosureidentification
原理一样,利用服务器对变量处理不当引起的崩溃找到路径。这里主要利用cookie来进行传送,修改cookie中的PHPSESSID为空,服务器就将无法处理这条数据,从而产生崩溃日志。
2. Basic
2.1. Low level passworddiscovery
直接看源码,注释写着<!-- The password is1431366500 -->
不要笑,将复杂的密码直接写comment很方便调试,说不定哪天就有人忘删了
2.2. Medium level passworddiscovery
看源码,发现有隐藏项,提示pass.html的存在。进入查看即可获得密码。原理和上题一样,说不定就有人无意中把密码暴露出来了。
2.3. User agent
下个插件修改http头,把user-agent替换为Googlebot的就行。
2.4. Low level Tamper Data
改源码或者改http头,把uname改成Admin即可。最基本的绕过方式。
2.5. Low level Tamper Data +additional security
同样的方式,不知道区别在哪里。
2.6. Medium level TamperData
找到源码中Admin的邮箱admin@securityoverride.com,改为你自己的,然后点击reset。密码就会发送到你邮箱了。
2.7. HTTP protocol
随便输入一个密码,然后再返回的HTTP头中就可以发现Password:81gl32lb8w0e字段。
2.8. Low level SQLinjection
最基本的SQL注入,输入密码为”’OR a=a --”即可。这里可能它只认—为注释符号,#无效,大概它只是模拟了一个数据库,并不是完全真实的。
2.9. Cookies
查看Cookie,有一个Access字段的值为no,改为yes然后刷新就行了
2.10. Poisonous Cookies
这里它将输入的password进行了转码,因此无法直接进行SQL注入。但是它利用Cookies存储了password,从而有机可乘。输入任意password提交后,修改cookie然后刷新即可。、
2.11. Low level script injection
进入网页,发现发送了status=1字段。尝试修改为3后,返回了错误信息:Open(file, 3) failed:No such file or directory。可以推测,大概是执行了cat1之类打开并显示文件的操作。因此直接在后面利用pipeline追加命令。这里需要完整的参数是status=1|ls|cat,并不清楚为什么单独ls无法工作,可能还是跟虚拟场景有关。修改参数后,就会把当前目录下的文件暴露出来,从而可以查看文件,获得密码。
2.12. High level SQL injection
一个比较系统的sql注入流程。首先通过id=1+union+select+1,2,3,4--来确定返回的列数(实际过程中,就是尝试1,12,123,…直到返回结果正确)。接着可以利用information_schema表来获取基本信息了。同样的,由于是模拟的数据库,所以只能在第2列进行查询,在第3列进行查询会异常。通过确定列举table名,找到user表,在列举列名,找到密码对应的列名password,然后再直接查询就好了。
2.13. Unsanitized exec(The Magic 8-ball level)
没太搞懂这题的意思。大概就是给了你一个可以执行任意语句的入口。然后ls一下,得到文件列表。然后cat.htpasswd可以找到用户名,cat5h6Xsxab.txt可以找到密码,然后就完事了。可能主要目的是让你了解一下htaccess保护机制。
2.14. Medium Level XSS
尝试在Comment内容中注入,发现引号被过滤,直接放弃。既然提供了bbcodes,一定有漏洞可以挖掘。尝试[b],[i],[color=red],发现通过设置color,可以控制文本的style属性。不过同理,引号还是被过滤了。这里查到了一个比较古老的CSS注入[color=expression(alert(123))]blabla[/color]可以通过。实验了一下,这个方法只有在IE和一些浏览器的兼容模式下才有效,应当是属于已经废弃的方法。
2.15. Unique/Obscure XSS
比较经典的PHP_Self注入,少数可以修改服务器变量的方法之一。尝试在index.php后追加path,发现form中的action随之改变,不过引号、尖括号等特殊字符已被过滤。查看论坛,管理员告知这里虽然做了过滤,但不需要考虑过滤,只要输入正确的注入语句就能成功(估计是为了保护自身系统不受侵害)。于是无视过滤进行尝试,首先”/><javascript>alert(‘xss’)</javascript>,不过并没有成功。纠结一番之后,管理员似乎隐约提到了单引号和双引号不同,于是尝试’/><javascript>alert(‘xss’)</javascript>,就成功了。和之前一样,应该还是模拟环境的坑,实际中要多尝试才行。
目前只刷完basic的题,后面的题目会在完成后持续进行更新。