武汉大学珞珈山水BBS论坛

武汉大学bbs,武汉大学论坛,武汉大学网站,武汉大学bbs论坛,武大bbs,珞珈山水,珞珈山水bbs,武大论坛,洛加山水,加洛山水

[回到开始] [上一篇][下一篇]


发信人: colormango (芒果), 信区: C.S
标  题: 在腾讯做应用安全(五)
发信站: BBS 珞珈山水站 (Sun Dec 30 01:57:03 2007)

    嗯,趁着兴头再写一篇吧,反正明天是放假,一年里有两三个晚上睡得晚一点也不算
太过份~~

    上一篇讲到在客户端安全方面,我们可以做些什么事情,又是怎么做的。这一篇就讲
一下另一块,在web安全这方面,我们在做的,又是什么样的事情,使用的是什么样的技术

    让我先把时间回退到大学时代:那时候听到很多故事,什么中美黑客大战啦,大陆与
台湾的黑客大战啦,白宫的官方网站被黑啦,谁家的小孩因为入侵什么重要的系统被抓啦
,诸如此类的非常多,那时觉得很神奇,也对信息安全这个专业充满幻想,以为学到最后
,我们也能如传说中的黑客那样,在网络上自由自在地游弋。不过幻想始终是幻想,直到
毕业了我也不知道在实际中我怎样才能“黑”掉一台服务器。虽然幻想没有实现,不过我
也知道不要把传说太当真。不过在大三的时候,发生了一件让我难以接受的事情:同班同
学告诉我,我们学院网站的数据库被别的学校的一个学生用什么方法下载了!这个消息让
我非常沮丧:一是我们计算机学院的网站(很多人都会有一种看法,即某个机构的网站在
一定程度上代表这个机构的计算水平)竟然这样不堪一击;二是我们一直引以为傲的信息
安全,所教导的学生,却无法做到一件一个不太入流的大学里的一个普通学生所能做到的
事情,这很让我对自己所受的教育产生怀疑。
    直到参加工作一段时间之后,当初的怀疑与沮丧才消除:从根本上来说,怎样攻占站
点其实只是一种实际的技术而已,这种技术和学习某一门编程语言一样,是可以通过自学
与实践很快就掌握的,会与不会只是一个谁先学谁后学的问题。但更重要的,却是解决问
题的思维方式与方法论,而这则会决定一个人以后能在多大的天地做出贡献。

    有点罗嗦了,呵呵。把主题集中回web安全这里:web安全往具体里说也包括很多,渗
透测试是其中很重要的一个方面。我在腾讯一年半的时间里,做的都是这个事情。从本质
上来说,web渗透测试就是一种黑盒测试,但比起客户端软件来说,做起来就容易很多。这
是由web应用的特点所决定的:传统上,每一个web程序都是一个功能单一、体积小巧的独
立程序,输入有限,输出有限,能访问的资源也有限。这样无论是普通的功能与性能测试
,还是安全渗透测试,都比较容易进行。
    总的来说,web渗透测试就是给目标程序提交各种“变态”的参数,看这个程序能不能
访问到正常情况下不允许访问的数据、文件,是否输出了一些不太安全的内容到返回页面
上。所需的全部家当呢,就是一个浏览器了,可能还得加上一个可以查看HTTP请求的工具

    比如说,我们查看山水的一篇帖子,是在浏览器地址栏里面输入这样形式的地址来进
行的:
    http://bbs.whu.edu.cn/bbsrecon.php?id=2525
    在这里,bbsrecon.php就是一个web程序,id就是这个程序的输入参数,2525就是一个
具体的输入数据实例。我们可以猜测,这个web程序以这个id为索引,去后台数据库里查找
一条匹配的记录,然后把内容复制到一个网页框架里,再返回来给我们的浏览器;也有可
能,论坛的帖子是以文件形式存放的,这个web程序用这个id形成一个具体的文件名,然后
再读取出来。那么,接下来,我要测试的话该怎么来呢?
    首先,这个程序是一个黑盒子,我是不知道它里面的具体实现的。但是我可以通过一
些固定的模式来测试去得到足够的信息来猜测它是怎么做的。这样的模式是通用而且非常
简单的:我在看到“?id=2525”这样形式的链接地址时,就会习惯地在参数后面多加一个
引号(或者是双引号),再按下回车让浏览器发送这样的一个请求:
   http://bbs.whu.edu.cn/bbsrecon.php?id=2525'
    为什么是单双引号呢?因为这个符号可以构成一个很奇妙的测试用例:(1)原本是一
串数字的2525,现在因为末尾的引号而变成了一个不合法的数字,程序怎样处理一个原本
期望是数字串但实际却含有非数字字符的输入呢?(2)对于使用数据来做存储的应用来说
,它极有可能利用输入参数来构造一个SQL语句传给后台数据库,才能最终完成的请求,我
们可以猜想这个语句具有这样的形式: select * from article where aid=2525 。而我
们额外添加的引号有可能原封不动地添加到这个SQL语句的末尾----而这如果传到DB中去的
话,势必会引起一个语法错误,这时的web程序,又是怎么应对呢?(3)如果使用文件来
做存储,它可能会把id=2525映射成一个实际的路径:/data/bbs/article_2525.html,类
似这样的形式,那么多余的一个引号如果也原样传进来,最后构成的一个路径十有八九是
不存在的文件路径,读取文件失败,程序又会怎样响应呢?
    在考虑不周的程序中,非正常的输入会导致程序运行失败(通常返回一个“内部服务
器错误”的页面),有些程序员会把错误信息打印出来,比如说类型不对啊,SQL语句非法
啊,读取什么文件失败啊----在这一步,程序已经开口告诉我们很多信息了。在网上有非
常多的站点都存在这样的问题的,不信你可以试试(只需简单地在地址栏的参数后面加一
个引号)。
    也有可能程序对错误进行了处理,在操作失败的时候输出一个提示信息(比如说,对
不起,系统繁忙之类的),从而掩盖了底层的出错信息。但是如果程序没有对输入进行过
滤的话,我们还是有办法知道的:因为一个失败的操作所得到的结果和一个成功的操作所
得到的结果是不一样的,这种不一样必然又会反映到最终返回的页面上。我们要做的,就
是用其它的的例子继续测试,直到我们能够确认它有问题或者没有问题为止,而这些用例
的数量是很有限的,可以在数分钟内就能测试完毕。
   比如说,对于文件类型的存储,要确认是否有问题的话,就在参数后面有序地添加../
序列(我们知道这会返回到上一层的目录),并指向一个可能的文件(比如windows的c:/
boot.ini,linux的/etc/passwd),一直到5~6层(再高也不太可能了),如果有漏洞的话
,它就会在某一层成功,打开你所指定的文件,并把这个文件的内容读取出来返回到你的
浏览器上。这就是文件型漏洞的测试方法。而对于SQL型呢,你就在脑海中想着一个正常的
SQL语句,后面跟着你输入的参数,你怎样在这个SQL语句中“插入”其它的语句来控制它
呢?用“ and 1=1 ”和“ and 1=2 ”来对比一下如何?熟悉SQL的同学会明白,and 1=1
是一个为真的条件,附加在原SQL语句后对查询结果无影响,但and 1=2是一个为假的条件
,附在原SQL语句后却会使得整个查询返回一个空集。DB有没有数据给web程序,是可以在
浏览器上一目了然地看到的,所以我们就能知道我们能否通过URL参数来控制后台DB。这种
漏洞就是SQL注入漏洞,网上很多入侵的案例,都是通过这种漏洞来进行的。大家想验证一
下的,也可以在google中找些来试下(比如说:在google中查找 inurl:id inurl:php就可
以找到不少xxx.php?id=yyy形式的链接)。这种漏洞还是非常普遍的。
   至于另外一种比较典型的漏洞跨站脚本漏洞,就是在参数后面加入一段HTML的代码,比
如说这样的形式id=2525<script>alert('xss')</script>,看最后返回来的页面中有没有
包含你输入的这段HTML代码,如果有的话,就是有跨站漏洞了。对于论坛、发帖等形式的
也一样,在输入中包含HTML代码,保存,如果最后这段代码能够原封不动地显示出来,那
就是有这个问题了(也就意味着,你也可以制造一只类似于百度蠕虫一样的跨站蠕虫了)


    嗯,基本上,web测试的原理就这样,不过要做到纯熟,还是需要很多的练习,并且要
多看一些有深度的文档,这样才有进步。
--
^mango^(http://blog.sina.com.cn/xunbao)
会当凌绝顶,一览众山小


※ 来源:·珞珈山水BBS站 http://bbs.whu.edu.cn·[FROM: 61.144.175.*]


[回到开始] [上一篇][下一篇]

本站是基于热心建立,如有侵权敬请致信告知

粤ICP备17011212号 szuonline.cn @8.4
深大在线 荔园在线 荔园晨风 荔园晨风BBS 荔园晨风bbs站 深大bbs 深圳大学bbs 深圳大学论坛 深圳大学内部网 szu bbs 荔园晨风地址 荔园晨风校外地址 荔园晨风登陆地址 荔园晨风登录地址 荔园晨风怎么登录 荔园晨风怎么登陆 深圳大学荔园晨风 荔园晨风登录不了吗 深大荔园晨风关了吗 荔园晨风官网 荔园晨风无法校外登陆 荔园晨风bbs登录不了 梨园晨风
我喜欢早上起来时一切都是未知的,不知会遇见什么人,会有什么样的结局。