2025.1.17——三、SQLi regexp正则表达式|
题目来源:buuctf [NCTF2019]SQLi1
目录
一、打开靶机,整理信息
二、解题思路
step 1:正常注入
step 2:弄清关键字黑名单
1.目录扫描
2.bp爆破
step 3:根据过滤名单构造payload
step 4:regexp正则注入
三、小结
一、打开靶机,整理信息
很典型的sql注入类型题目,并且是字符型注入
二、解题思路
step 1:正常注入
尝试注入发现都显示hacker!!!说明被过滤了
step 2:弄清关键字黑名单
1.目录扫描
(dirmap安装失败,还在研究)看其他wp得到robots.txt中藏着hint.txt,即过滤字符的表
得到两个信息:①用户名是admin,只要密码对了,就能拿到flag了;②关键字基本上都被过滤掉了,所以万能密码、时间盲注、联合注入、order by等语句都没用,并且大小写也无法绕过
2.bp爆破
得知基本上都被过滤了,只有regexp和 \ 幸存。所以/**/可替换空格,末尾多出来的 '可以用%00截断。
step 3:根据过滤名单构造payload
由题可得sql语句:select * from users where username='①' and passwd='②'
我们传参位置为①和②,利用转义字符 \ 将①后面的单引号闭合掉,然后再传passwd参数,即select * from users where username='\' and passwd='②'
step 4:regexp正则注入
regexp正则注入
REGEXP注入与LIKE注入学习笔记-CSDN博客
所以核心语句在②上,用regexp查询passwd^匹配字符串开头,%00截断后面内容,但不能在输入框提交,会被url编码然后拦截的,在bp中提交尝试用payload1:||/**/passwd/**/regexp/**/"^a";%00,发现响应里有welcome.php
感觉接近了
可以从第一个字符猜测password值,知道welcom.php出现在响应报文中,可以使用脚本:每周一题(四) | Wei's blog 脚本见链接(我自己还写不出来脚本)
得到password:you_will_never_know7788990
在输入框输入任意用户名和password即可得到flag
三、小结
好痛苦的一道题,也有可能是在痛苦时间段做的。
1.目录扫描是web题目中常用手段,常用工具有dirsearch、dirmap
2.过滤的关键字可以用字典爆破,也可以寻找hint.txt,被过滤的关键字代表一些注入姿势的禁止,可以绕过,也可以换其他方式注入
3.regexp正则注入是新知识点
4.python脚本很重要,不得不会
5.题目一般不会给没用的信息,比如本题提示则为字符型注入