自己动手搭建缺陷Web App

Posted by c4pr1c3 on January 21, 2011

搞Web安全的研究,没有一个本地实验环境是不行的,不能在互联网上乱试。给别人添点麻烦还算是小事,要是一不小心真让你拿下了一个站,结果发现是个蜜罐,你就等着警察叔叔上门吧。所以,安全第一,即使你是在研究安全。

Google Vulnerable Web Applications大约返回了467,000条搜索结果,看来这个需求挺常见,也挺容易满足。

Google的第一条搜索结果总会给我们带来惊喜,这次搜索也不例外,本文也就是对这篇文章作了一些简单的加工和整理。

S.No. Vulnerable Application Platform Remark
1 SPI Dynamics (live) ASP 漏扫厂商的缺陷demo站点,想学习还是可以玩的。有新花样最好本地玩吧,除非你是活雷锋。
2 Cenzic (live) PHP 同1
3 Watchfire (live) ASPX 同1
4 Acunetix 1 (live) PHP 同1
5 Acunetix 2 (live) ASP 同1
6 Acunetix 3 (live) ASP.Net 同1
7 PCTechtips Challenge (live) online hack challenge, just for fun
8 Damn Vulnerable Web Application PHP/MySQL 有提供Live CD版,适合懒人
9 Mutillidae PHP 针对OWASP的Top 10名单设置针对性的缺陷供你耍,必须推荐
10 The Butterfly Security Project PHP
11 Hacme Casino Ruby on Rails Hacme系列is copyright by McAfee, but toooooooooooold! take it as you will and at your own risk.
12 Hacme Bank 2.0 ASP.NET (2.0) 同上,不解释。
13 Updated HackmeBank ASP.NET (2.0) 链接失效?我没用过。
14 Hacme Books J2EE 还是Hacme。。。
15 Hacme Travel C++ (application client-server) 又是Hacme。。。不过这个是C++的,比较少见。也许有价值,我没用过
16 Hacme Shipping ColdFusion MX 7, MySQL ColdFusion平台的,有针对性的可以搭建一下试试,我没用过
17 OWASP WebGoat JAVA 适合教学
18 OWASP Vicnum PHP, Perl
19 OWASP InsecureWebApp JAVA
20 OWASP SiteGenerator ASP.NET
21 Moth
22 Stanford SecuriBench JAVA
23 SecuriBench Micro JAVA
24 BadStore Perl(CGI)
25 WebMaven/Buggy Bank (very old)
26 EnigmaGroup (live)
27 XSS Encoding Skills x5s (Casaba Watcher) Fiddler的扩展,辅助XSS漏洞挖掘(多种字符编码转换支持)
28 Google Gruyere (live) (previously Jarlsberg) 可以在线玩,GAE supported. So, if you are in CH1N4, you may need a VPN or proxy to access it.
29 Exploit- DB Multi-platform 最真实的Web App漏洞资料库,totally damn real!看上哪个,直接官网下载对应缺陷版本,本地想怎么玩就怎么玩。
30 exploit-kb-vulnerable-web-app PHP/MySQL 文档清晰,易部署,有Vmware Image版,适合懒人

LAMP环境的用户需要注意以下重要的配置项对你的测试结果的影响,这些配置参数同时也是服务器安全配置的关键得分和失分点。

按照PHP官方给出的解释magic-quotes-gpc从PHP 6开始,将不再得到支持。默认安装的PHP 5最新版,该值是On。在新安装的PHP所带的php.ini的注释中明确指出,无论在开发环境还是生产环境,该值都建议设置为Off。之所以这样做的原因是所谓PHP的字符串转义预处理功能在很多时候和实际的业务需求是不相符合的,而且也并不总是改进PHP的安全性,有时也会帮倒忙。类似功能的另一个参数是

magic-quotes-runtime,该值的设定建议同magic_quotes_gpc。

magic_quotes_gpc = Off
magic_quotes_runtime = Off


如果你需要在Web页面上查看PHP程序的出错信息,而即使你设置了

error_reporting = E_ALL

发现页面在PHP执行出错时还是没有错误信息,那么你就应该检查一下display_errors这个参数的值了。

display_errors = Off

改为On就会显示报错信息了。

除了在页面显示之外,如果你还想把错误信息顺便记录日志了,可以设置log_errors这个参数值为On,同时设置error_log参数值来指定错误日志的输出位置,当然如果是apache服务器的话还可以通过.htaccess文件来设置,例如:

php_flag log_errors on
php_value error_log /var/logs/php/err.log


对于*nix用户来说,文件和目录的读、写、执行权限也是需要注意的,开发和调试环境为了图省事可以777,生产环境一定要对设置的每1 bit的权限位认真考虑。

apache从2.2开始,代码重构的力度较之前版本有了非常大的变化,对于配置apache来说,其引入的最重要的一个变化就是配置方式的完全模块化组织。apache的模块、服务器配置文件、虚拟主机都已经完全的层次化、模块化了。4个a2打头的命令需要知道:

a2ensite # 启用指定的虚拟主机
a2disite # 停用指定的虚拟主机
a2enmod  # 启用指定的模块
a2dismod # 停用指定的模块

当然了,在*nix系统上,上述命令分别对应在/etc/apache2/mods-enabled/和/etc/apache2/sites-enabled目录下创建指向/etc/apache2/mods-available/和/etc/apache2/sites-available/的配置文件软链接。对于root权限的你来说,用不用这4个命令都没有关系,自己手工创建软链接,只要正确也没问题。但对于生产环境来说,由于sudo机制的限制,可能你只能通过这些命令来创建和移除相应的配置文件软链接。

对于apache的配置来说,默认配置已经可以满足绝大多数的安全环境研究了,基本上出了问题排查下来都会发现与apache配置无关,大部分情况下和PHP配置有关。但如果想更真实的模拟真实生产环境,有时我们也需要配置mod_rewrite和mod_security,这两个就麻烦多了。单独拿出来任何一个,都能做一次技术报告,有兴趣的可以自己hacking一下。

推荐几个手工的辅助工具

Tool Category Remark Similar
paros HTTP代理/HTTP协议调试/spider 最新开源版3.2.13更新于2006年,后续版本已经完全商业化。但工具的易用性、功能在今天来看都是值得推荐的。支持HTTP协议双向数据查看/修改/过滤是其亮点。 burp proxy , Fiddler, live http headers (Firefox addon), Firebug (Many browsers’ addon)
HackBar 手工SQL注入辅助 方便转码、编码、填充垃圾字符,绕过滤必备
TamperData HTTP请求参数控制 拦截HTTP/HTTPS请求,允许手工修改HTTP请求参数(GET参数、POST字段、cookie等)后再提交
Groundspeed 客户端安全措施半自动化解除 自动检测隐藏表单字段、去除表单验证等,免去自己通过Firebug修改html代码的麻烦
BuiltWith (Chrome扩展) 网站架构自动分析 自动检测和识别当前浏览网站所采用的技术架构,脚本小子的最爱

Web渗透测试的最佳客户端平台首推Firefox,原因?了解一下FireCAT吧。

最后的最后,我建议初学者从WebGoat开始,想要实战就从Exploit- DB找case回来,研究怎么bypass各种filter,最后才是如何完美和谐的利用漏洞。