采用工作流的方式,让自己减少失误。避免出现在简单题耗费大量的时间。
- 疏忽大意
- 收集信息不齐
1 信息搜集
1.1 这个网站使用了技术
这个问题是非常有必要的,在 Python 中的模版注入会多于 PHP 中。
可以使用网页的拓展来测试属于什么语言,例如类似下面的拓展:
- index.php
- index.html
- index.cgi
- …
如果不起作用,可能采用了类似 Django 的 URL 分离的技术。
我们还可以根据网站的 404 页面来确认自己的猜想,404 页面还可以获取到 web server 的信息。即访问一个不存在的地址 /THIS_PAGE_DOESNT_EXIST,判断网站使用了 Apache 还是 Nginx?
另外,Web server 还可以通过网站的响应头获得。
最后,还可以考虑使用 Chrome 插件 Wappalyzer 来识别网站所使用的技术。
1.2 理解网站是怎么工作的
在这一阶段,我们需要了解 Web 应用程序是怎么工作的。有哪些功能可以使用?如何使用这些功能?
浏览整个网站过后,想象网站的代码大致是怎样的?网站提供的功能容易出现哪些漏洞?
1.3 测试常见的目录和文件
在国外,CTFs 通常不允许使用自动化的扫描工具,网站的目录通常是显而易见的。
但在国内,最好多收集一点字典和拓展后缀,指不定来个 .index.php.swo
或 .listing
。
最好的路径爆破工具:burpsuite,不接受反驳。
1.4 检查源文件和请求头
1.4.1 源文件
分析每一个文件(HTML, JavaScript, CSS),获得有趣的注释、隐藏的特性、奇怪的脚本。我通常使用 burpsuite 来分析源码和请求头。
Note:CSS 文件也需要进行审计,可能通过 background 语句包含其他链接。
1.4.2 HTTP包审计
当经过每个文件的时候,检查请求和响应头是否有不正常的内容。
Note:你CTF题做得越多,你就越能确定什么是重要的,什么不是。
1.5 笔记模版
简单而清晰的模版,能让人快速找到信息之间的联系。
Backend :
- Server : Apache 2.4.6 (CentOS)
- Language : PHP
Webapp description :
- The app is a messaging system, you can send messages to specific users and read messages.
Site map :
- /register.php (GET/POST)
- /login.php (GET/POST)
- /read_message.php (GET)
- /read_message.php?messages=2 (GET)
- /send_message.php (GET/POST)
- /users.php (GET)
- /admin (Unauthorized)
- /js/ (Directory listing enabled)
- /css/ (Directory listing enabled)
- /images/ (Directory listing enabled)
Interesting Headers :
- Access-Control-Allow-Origin: http://127.0.0.1:9876
附录
参考文章:
- https://github.com/Corb3nik/Web-Exploitation-Workflow#ctf-tactics