大家都知道,这年头进行一次成功的网络攻击是越来越难了,特别是我们在对客户作安全服务的时候要做渗透测试。舍得花钱让我们做安全服务的客户,手里都有大把的银子,什么
firewall,IDS,IPS,
管它有用没用,全给加上,我们曾经见过一个
WEB server
前加俩防火墙的例子。在这种情况下,很多的攻击手段都无法使用,特别是
buffer overflow
的手段几乎没有用武之地,现在管理员的安全水准也有较大的提高,靠几个扫描器扫扫就能骗钱的时代已经一去不复返了。
(3) Directory Indexing,多发于 UNIX主机,是由于对目录没有去掉可读权限所致,这个问题本来说可大可小,无非就是让用户看到一点目录下的所有文件罢了,但往往这些目录下有很多文件是不能让人看的,比如说源代码备份文件,打包文件等等。
(4) 信息泄漏,主要指 debug信息的泄漏,就是系统处理出现问题的时候的报错信息,攻击者可以利用这些信息得到一些版本信息与 application server所用的模块。
(6) CSS攻击。在远程 WEB页面的 html代码中插入的具有恶意目的的数据,用户认为该页面是可信赖的,但是当浏览器下载该页面,嵌入其中的脚本将被解释执行 ,可以用来偷取 cookie.详细内容可以参考 [6]。
(8) 非法命令的执行。当系统调用某些外部程序来执行某些功能的时候,我们的机会就来了,如果你发现你的目标网站是 shell script与 perl的话,发生这种问题概率比较大,还有如果你发现你的目标网站使用 ldap作某些功能的话,试试在合适的地方输入一些通配符,如 ”*”,说不定有意外的惊喜。
入门读物
(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等等,不过我使用的结果好像还是商用软件比较好用。
好了,先说到这里。
参考: