|
前言:写这篇文章不是为了告诉大家如何去做入侵,而是希望提醒大家:“入侵是偶然的,但安全并不 是必然的”,不要疏忽运作上的一些小细节。
笔者一直都有经常性地到一些安全方面的网站瞎逛的习惯的,最近因为一次机缘巧合之下通过链 接来到广州某个颇有名气的网络安全公司的网站。说实在的,这个网站好象挺多元化的,提供软件下 载之余,还有自己的论坛(嘿嘿,界面做得还真不赖嘛,不知道安全性如何呢?)。出于对其安全操守 的好奇,小神决定义务为其做个的初步的“安全渗透测试”。开始时只是拿一些综合性的网络漏洞扫 描工具(X-scan3.0、Nmap、Retina等等)进行信息扫描,然后做个结果筛选,结果只查到对方开了TCP 80端口(也就是说他们的服务器只提供了正常的HTTP服务),且无任何典型的漏洞....没戏了,对方毕 竟还是一间有些知名度的企业嘛(因为这篇文章的重点并不在此,所以用网络漏洞扫描器作信息扫描 这个步骤我就不在这里多作说明了)。就这样放弃了吗?没那么容易...恰好小神最近在整理SQL Inje ction(SQL注入攻击)方面的资料,既然现在有机会就再“勉为其难”地帮它测试一下吧:P ------------------------------------------------------------------------------------------ 提示: 问:什么是SQL注入? 答:这种攻击的要诀在于将SQL的查询/行为命令通过‘嵌入’的方式放入合法的HTTP提交请求中从而 达到攻击者的某种意图。现在很多的动态网页都会从该网页使用者的请求中得到某些参数,然后动态 的构成SQL请求发给数据库的。举个例子,当有某个用户需要通过网页上的用户登陆(用户身份验证) 时,动态网页会将该用户提交上来的用户名与密码加进SQL询问请求发给数据库,用于确认该用户提 交的身份验证信息是否有效。在SQL注入攻击的角度看来,这样可以使我们在发送SQL请求时通过修改 用户名与/或密码值的‘领域’区来达到攻击的目的。
SQL注入技术的更多相关信息请看: http://demonalex.nease.net/sql_injection/walkthrough.txt ------------------------------------------------------------------------------------------ 首先是下载系统,随便抽一个工具的下载地址: http://该安全公司的网址/某目录/download/open.asp?id=3444 ------------------------------------------------------------------------------------------ 附录:这里笔者用中文代替了某些敏感信息,还请各位见谅哦。 ------------------------------------------------------------------------------------------ http://该安全公司的网址/某目录/download/open.asp?id=3444' 先测试一下对方有没有过滤'(单引号)...

------------------------------------------------------------------------------------------ 提示: 问:如何确认一个网站有SQL注入缺陷呢? 答:首先先加入某些特殊的字符标记,输入如: hi' or 1=1-- 寻找一些登陆页面,在其登陆ID与密码输入处,或URL中输入: - Login: hi' or 1=1-- - Pass: hi' or 1=1-- - http://duck/index.asp?id=hi' or 1=1-- 如果想以‘隐藏’的方式进行此类测试,你可以把该HTML网页从网站上下载至本地硬盘,修改其隐藏 部分的值,如: 〈FORM action=http://duck/Search/search.asp method=post〉 〈input type=hidden name=A value="hi' or 1=1--"〉 〈/FORM〉 如果阁下是幸运的话估计现在已经可以不需要帐号与密码而‘成功登陆’了。 ------------------------------------------------------------------------------------------ 再试试下面的url,看看能否返回正常的页面... http://该安全公司的网址/某目录/download/open.asp?id=3444" http://该安全公司的网址/某目录/download/open.asp?id=3444' or 1=1-- http://该安全公司的网址/某目录/download/open.asp?id=3444" or 1=1-- http://该安全公司的网址/某目录/download/open.asp?id=3444' or 'a'='a http://该安全公司的网址/某目录/download/open.asp?id=3444" or "a"="a ------------------------------------------------------------------------------------------ 提示: 问:为什么要特意使用' or 1=1--来做测试呢? 答:让我们来看看其他例子中使用'or 1=1--的重要性吧。有别于正常的登陆方式,使用这样的登陆方 式可能可以得到正常登陆中不能得到的某些特殊信息。用一个链接中得到的ASP页来打比方: http://duck/index.asp?category=food 在上面这条URL中,'category'是一个变量名,而'food'是赋予该变量的值。为了做到这些(链接成功 ),这个ASP必须包含以下相关的代码(下面也是我们为了演示这个实验所写的代码): v_cat = request("category") sqlstr="SELECT * FROM product WHERE PCategory='" & v_cat & "'" set rs=conn.execute(sqlstr) 正如我们所看到的,变量值将会预先处理然后赋值于'v_cat',也就是说该SQL语句将会变为: SELECT * FROM product WHERE PCategory='food' 这个请求将会返回通过WHERE条件比较后得到的结果,在这个例子中也就是'food'了。现在设想一下 如果我们把该URL改成这样的话: http://duck/index.asp?category=food' or 1=1-- 现在我们的变量v_cat的值就等同于"food' or 1=1--"了,现在如果我们要重新代入那条SQL请求的话 ,那条SQL请求将会是: SELECT * FROM product WHERE PCategory='food' or 1=1--' 现在这个请求将会从product表中选取每一条信息而并不会去理会PCategory是否等于'food'。至于结 尾部分的那两条'--'(破折号)则用于‘告诉’MS SQL SERVER忽略结尾最后的那个'(单引号)。有的时 候也可以使用'#'(井号)来代替'--'(双破折号)在这里的用法。 无论如何,如果对方不是一台SQL服务器(这里指的是MS SQL SERVER),或者你不能使用简单的方法去 忽略最后的那个单引号的话,你可以尝试: ' or 'a'='a 这样的话整个SQL请求将会变为: SELECT * FROM product WHERE PCategory='food' or 'a'='a' 它也会返回相同的结果。 根据实际情况,SQL注入请求是可以有多种动态变化的可能性的: ' or 1=1-- " or 1=1-- or 1=1-- ' or 'a'='a " or "a"="a ') or ('a'='a ------------------------------------------------------------------------------------------ 都是返回“HTTP 500 - 内部服务器错误”,看来是又失败了,不怕,我们还有希望...此时的希望只 能全部寄托在论坛上了...(下图)

[1] [2] [3] [4] [5] 下一页
|