入门读物(2) – WEB应用程序的安全 (www.team509.com)

大家都知道,这年头进行一次成功的网络攻击是越来越难了,特别是我们在对客户作安全服务的时候要做渗透测试。舍得花钱让我们做安全服务的客户,手里都有大把的银子,什么 firewall,IDS,IPS, 管它有用没用,全给加上,我们曾经见过一个 WEB server 前加俩防火墙的例子。在这种情况下,很多的攻击手段都无法使用,特别是 buffer overflow 的手段几乎没有用武之地,现在管理员的安全水准也有较大的提高,靠几个扫描器扫扫就能骗钱的时代已经一去不复返了。

 

                         入门读物 (2) – WEB应用程序的安全

 

                                                 wooshi@gmail.com

 

       大家都知道,这年头进行一次成功的网络攻击是越来越难了,特别是我们在对客户作安全服务的时候要做渗透测试。舍得花钱让我们做安全服务的客户,手里都有大把的银子,什么 firewall,IDS,IPS,管它有用没用,全给加上,我们曾经见过一个 WEB server前加俩防火墙的例子。在这种情况下,很多的攻击手段都无法使用,特别是 buffer overflow的手段几乎没有用武之地,现在管理员的安全水准也有较大的提高,靠几个扫描器扫扫就能骗钱的时代已经一去不复返了。那么,现在而今眼目下,什么东西的安全是最有用与最可能出问题的,答案是 WEB应用程序的安全性。这部分程序大多是客户自己开发的,客户自己 程序员的素质与开发 web server,web application server等大厂商的程序员的素质还是有很大差别的,而且客户在开发过程中对安全问题的测试往往很忽视,这会造成极大的安全问题。我们曾经对一些电子商务的网站做过安全评估,理论上这些涉及到网上交易的客户应该安全性做的很好吧,很遗憾,没有,这些网站无一例外的存在严重的 web应用安全问题,这些问题严重到足足可以让这些网站倒掉。

那么, web 应用安全主要集中在哪些方面呢?一般而言,主要有以下问题:

(1)                      SQL injection,这个是目前的 web 应用安全的最重点。 SQL injection分为 blind injection 与 根据错误的返回值的 injection. 这两方面的内容在 [1], [2], [3]中有很详细的论述,这里我就不罗嗦了。需要强调的是根据错误的返回值的 injection往往比 blind injection要有效得多,所以尽可能使用根据错误的返回值的 injection。但 blind injection有个优势,它有自动化的攻击工具, Absinthe,目前支持三种数据库, MsSQL,ORACLE与 PostGreSQL,可以很方面的查出 table name, column name与下载 record。但还有些常用的数据库是不支持的, MS access与 Mysql是由于功能实在太简单了,没办法作很多事情,但 db2与 informix没有加进去我就有点想不通了,我估计大概的原因是这两种 database应用不广。 MS access与 Mysql的 SQL injection的利用方法可以分别参看 [4]和 [5]。最后强调一点,数字类型的 SQL Injection的应用要比字符类型的要广泛得多,就其原因,是因为字符类型的 SQL Injection需要加入特殊字符 ’,这个目前很多网站是通过种种方法 (IIS加上 lockdown,apache加上 mod_security)过滤掉了。

(2)                      Trust Client.过分的相信客户端会造成灾难性的后果。目前国内的很多电子商务网站是有很多这样的毛病,他们利用 javascript写了很多的脚本放到客户的本地去执行,其实有恶意的攻击者可以很方面的跳过他这样设置的陷阱,只需要一个 proxy,webproxy是一个干这活不错的工具。经常容易出问题的地方是前后应该相同的数值它从客户端读数次,我们这时候可以通过 proxy改掉数据,使我们花少量的钱买好东西,呵呵。

(3)                      Directory Indexing,多发于 UNIX主机,是由于对目录没有去掉可读权限所致,这个问题本来说可大可小,无非就是让用户看到一点目录下的所有文件罢了,但往往这些目录下有很多文件是不能让人看的,比如说源代码备份文件,打包文件等等。
(4)                      信息泄漏,主要指 debug信息的泄漏,就是系统处理出现问题的时候的报错信息,攻击者可以利用这些信息得到一些版本信息与 application server所用的模块。
(5)                      非 WEB文件的获取。主要指打包文件 (rar,tar.gz,tgz,etc),备份文件 (.bak,~,etc),头文件 (.inc,.asa,etc),这些文件中往往包含重要内容,有非常高的价值。我曾经不止一次的看见过把用户名与密码写在这些文件中。最重要的是往往可以通过这些文件看到源代码,为进一步的攻击做好准备。

(6)                      CSS攻击。在远程 WEB页面的 html代码中插入的具有恶意目的的数据,用户认为该页面是可信赖的,但是当浏览器下载该页面,嵌入其中的脚本将被解释执行 ,可以用来偷取 cookie.详细内容可以参考 [6]。
(7)                      反向的 proxy。 Web proxy servers往往是双向的,即允许内部访问外部,又允许外部访问内部,双向的 proxy可能产生严重的后果,导致内部的重要文档流失,利用方法把它设为你的浏览器的 proxy,再去尝试访问你知道的内部地址。当然也可以利用某些 app scanner去自动完成这个工作。

(8)                      非法命令的执行。当系统调用某些外部程序来执行某些功能的时候,我们的机会就来了,如果你发现你的目标网站是 shell script与 perl的话,发生这种问题概率比较大,还有如果你发现你的目标网站使用 ldap作某些功能的话,试试在合适的地方输入一些通配符,如 ”*”,说不定有意外的惊喜。
(9)                      用户的身份认证与密码找回的问题,很多网站为了防止暴力破解,往往会加上一个认证的小图片,但是 doublelee证明了这种方法并不可靠,详见 [7]。密码找回的问题往往非常弱智,无数次我看到答案是与问题一样的,还有一些非常容易暴力破解的问题,如生日,颜色,等等。

(10)                   与网站开发语言特征相关的问题。比如 perl的 %00的问题, c/c++的 buffer overflow,asp,jsp等等相应的问题。

说了这么多,我们作为初学者现在需要的是一个很好的工具,能够把这上面说到的问题都能自动的测试那就非常好了,目前市场上比较好的两种针对 web app 的商业扫描器,一为 appscan,一为 webinspect,appscan的好处是扫描速度非常快,而且它可以手动与自动相结合,就是说你可以先手动的登录网站,再切换到自动模式,就可以自动的分析登录后的这些页面与内容。 Webinspect优势在于比较权威,内容很多,不过速度倒是很慢。还有第三种, appdetective , 速度也很快。我们上面所讨论的这些问题,这三种商业软件基本上都能做到自动化测试。当然还有大量的免费软件,如 nikto,wikto等等,不过我使用的结果好像还是商用软件比较好用。

       好了,先说到这里。

参考:

 







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值