Web应用程序攻防实战

原创
安全 应用安全
想亲自击败黑客吗?OK,没问题,首先你要了解黑客是如何查找安全漏洞的,其次就是要了解黑客是如何利用Web应用程序漏洞的,最后就是了解他们是如何组织进攻的。本文将以一个漏洞百出的程序Jarlsberg为例,为大家讲解Web应用程序的攻防手段,全面解剖黑客的行径和应对办法。

【51CTO.com独家翻译】想亲自击败黑客吗?OK,没问题,首先你要了解黑客是如何查找安全漏洞的,其次就是要了解黑客是如何利用Web应用程序漏洞的,最后就是了解他们是如何组织进攻的。本文将以一个漏洞百出的程序Jarlsberg为例,为大家讲解Web应用程序的攻防手段,全面解剖黑客的行径和应对办法。Jarlsberg是用Python编写的,因此略懂Python会帮助理解本文,但即使不懂也无所谓,因为漏洞和修复漏洞的方法基本上是与语言无关的。另外我们会涉及到黑盒黑客和白盒黑客,所谓黑盒黑客就是通过操纵输入字段或URL参数,观察Web应用程序的响应和变化,尝试找出让它出错的一种攻击手段,这里我们通常会查看HTTP/HTTPS请求和响应,推荐两款很棒的辅助工具Burp和WebScarab;所谓白盒黑客就是分析Web应用程序源代码,尝试找出bug并进行攻击的手段。

你完全可以根据本文介绍的内容搭建一个渗透测试环境,自己做做练习,以提升自己的技能,当然最重要的是通过学习达到举一反三,以后自己也能发现和修复漏洞,Jarlsberg的下载地址是http://jarlsberg.appspot.com/jarlsberg-code.zip,你也可以直接访问http://jarlsberg.appspot.com/start,AppEngine会自动为你创建一个新的Jarlsberg实例,每个实例都运行在独立的沙盒中,用唯一的ID进行标识,你可以随意展开攻击,你也可以将你唯一的URL分享给其它人进行攻击研究。

如果想在本地运行Jarlsberg,需要先安装Python 2.5,其它版本可能不行,执行Jarlsberg安装的命令如下:

$ cd

$ ./jarlsberg.py
 

用localhost:8008替换所有文件中的jarlsberg.appspot.com,并用分配给你的唯一ID替换默认ID 123。

如果是直接在AppEngine上创建的Jarlsberg实例,它有诸多限制,如不能访问和干扰其它Jarlsberg实例,资源使用也是有限制的,如果你捣鼓得Jarlsberg实例无法运行时,可以通过下面的URL进行重置,不过要注意的是所有历史数据都将被清除掉。

http://jarlsberg.appspot.com/resetbutton/123

注意用你自己的ID替换这里的123。

Jarlsberg各个源文件介绍:

◆jarlsberg.py是Jarlsberg Web服务器

◆jdata.py在数据库中存储默认数据,有一个管理员账号和两个默认用户

◆jtl.py是Jarlsberg模板语言

◆jsanitize.py是Jarlsberg保护自身HTML免受攻击的模块

◆resources/...目录下存放了所有模板,图片和CSS等文件

跨站脚本(XSS)

跨站脚本(XSS)指的是黑客通过网站漏洞在不受自己控制的网站内容(通常是HTML或JavaScript)中植入代码,当受害者浏览这样的网页时,植入的代码就会在受害者浏览器中执行,这样就可以顺理成章地窃取受害者与网站请求相关的个人信息。

在一个反射式XSS攻击中,攻击通常是嵌入在请求URL中,受害者浏览黑客构造的恶意URL时就被攻击了。在存储式XSS攻击中,攻击者将攻击代码保存在应用程序内,受害者浏览到这样的网页时就触发攻击代码的执行。

假设http://www.google.com/search?q=flowers这个URL返回的页面包含以下HTML片段:

Your search for 'flowers'

returned the following results:

查询参数q的值被嵌入到Google返回的页面中,如果www.google.com不做任何验证或忽略q,攻击者就可以构造一个类似下面这样的链接进行攻击尝试:


http://www.google.com/search?q=flowers+%3Cscript%3Eevil_script()%3C/script%3E

接下来就是欺骗受害者点击这个链接,当受害者点击这个链接后,他的浏览器就会解析下面的代码:

Your search for 'flowers'

returned the following results:

浏览器就会执行evil_script(),于是受害者的浏览器状态和所有该域名对应的cookies都全部暴露出来了。

有时即使受害者不直接地点击恶意链接也会遭受攻击,例如,假设攻击者拥有www.evil.example.com域名,在页面中用