CTF [SUCTF 2019]EasySQL writeup 堆叠注入 | || *的使用

专挑注入的题先做。。。

0x01 干干干

在这里插入图片描述
flag
在这里插入图片描述
然后又试了'"-1等查找注入点的参数,发现存在整形注入,出现Nonono.都是被检测出来有过滤,于是去fuzz了下。
在这里插入图片描述
这些都是被过滤的,于是发现有个|||没有被过滤,可以搞盲注,但是or被过滤了,information也连带着用不了,这玩意用不了常规的注入好像也没用,报错信息也关了,报错注入也用不了。于是又看前端的输出感觉像堆叠注入,var_dump()的感觉
在这里插入图片描述
确实;也没有过滤,但是又发现这次预处理语句好像没法用,因为from被过滤了。。。
最后只能查出一个datadabes()
在这里插入图片描述
这里卡了一会,然后突然发现,我为啥不直接select * from xxx呢,走一波。。。
在这里插入图片描述
结果是空白的。。。很奇怪,这个*也没有被过滤阿。难道sql不是这样的吗?

sql = "select $_POST['query'] from xxx";

然后想着之前fuzz结果中的|也没有被过滤,难道要联起来一起用?

想不明白到底是做了什么过滤,才会让*不能使用,于是用自己环境测试了下,结果让人出乎意料。。。

mysql> select * from test;
+------+-------+
| id   | name  |
+------+-------+
|    1 | baynk |
|    2 | cisco |
+------+-------+
2 rows in set (0.00 sec)

mysql> select 1 from test;
+---+
| 1 |
+---+
| 1 |
| 1 |
+---+
2 rows in set (0.00 sec)

mysql> select a from test;
ERROR 1054 (42S22): Unknown column 'a' in 'field list'

以上测试的结果都和题目当中一样。那么我又一次相信我的判断可能是没有错。。。但是为啥就是出不来,真的是奇了怪,于是又进行了第二轮的测试。

mysql> select 1|id from test;
+------+
| 1|id |
+------+
|    1 |
|    3 |
+------+
2 rows in set (0.00 sec)

mysql> select a|id from test;
ERROR 1054 (42S22): Unknown column 'a' in 'field list'
mysql> select *|id from test;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '|id from test' at line 1

我去,*原来不能和|一起用。。。

那有可能题目的sql

sql = "select $_POST['query'] | col_xxx from table_xxx";

我擦,union也不能用,表名也不清楚,*没法玩,于是看了一下writeup。。。想死-。-

hhh,我居然把,给忘了。。。

mysql> select *,1|id from test;
+------+-------+------+
| id   | name  | 1|id |
+------+-------+------+
|    1 | baynk |    1 |
|    2 | cisco |    3 |
+------+-------+------+
2 rows in set (0.00 sec)

mysql>

这样就可以了,*就单独出来了,用1去和id做运算,所以这里不需要使用堆叠注入。。。
在这里插入图片描述


0x02 错误的尝试

拿到flag以后,才知道自己为什么show tablesshow databases为没有回显,只能select database()了。。。

是因为后面的语句from table_xxx没有处理掉,再来一次。
在这里插入图片描述
再来一次,知道表名就直接拿flag
在这里插入图片描述
我擦,这是真的狠,我忘了表名也是Flag也要被过滤的。。。。而且from我也绕不过阿,,服了服了。
卧槽,突然想到dnslog外带信息好像可以绕过这个,不过鬼知道有没有权限,算了还是不搞了。。。


0x02 预期解

看一个writeup上说,上面的解法是非预期解,预期解应该是1;set sql_mode=PIPES_AS_CONCAT;select 1
听都没听过,去查了下set sql_mode=PIPES_AS_CONCAT,用来处理|的符号的,将操作改成连接操作。

太需要博学了。。。先看下开启了哪些功能
在这里插入图片描述
再用payload上。
在这里插入图片描述
然后我想查一下mode设置完了以后会变成什么样子,结果,坑爹。。。
在这里插入图片描述
而且上面的payload多个空格都不行,果然是预期解,牛逼。

发布了265 篇原创文章 · 获赞 266 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u014029795/article/details/105241226