[SUCTF 2019]EasySQL

[SUCTF 2019]EasySQL

这道题的话先尝试一下常用的payload:

image-20220714165958578

发现是nonono,应该是过滤了一些东西,所以我们尝试着去用fuzz字典跑一下

抓包发送到intruder

image-20220714170201784

然后到那个intruder界面选择变量,选择字典

image-20220714170233211

image-20220714170309004

通过这个load去加载字典文件,这个界面在payloads那个界面,然后开始攻击(start attack),如果请求过多,可以改一下这个

image-20220714170425370

跑完结果:507的这些都被过滤了,发现这个数据库以及其他的一些报错注入函数都被过滤了

image-20220714170651688

image-20220714170831407

搜索之后发现这道题是要用到堆叠注入

查数据库名

image-20220714171127211

再查表名

image-20220714171202550

尝试一下是否能够直接访问这个Flag表,发现并不行

image-20220714171413233

网上搜索发现有两种解法:

解法1:

猜测这里的源码为select $_POST[‘query’] || flag from Flag

|| 这个符号在linux里是管道符,前面命令为假,才执行后面语句

这里的||的作用是or的作用,所以我们这里可以用*,1,原语句就变成了select *,1 || flag from Flag

也就是select *,1 from Flag,这样就直接查询了这整个表的内容

解释一下就是因为*,1为真,所以||后面的flag就不会被执行了

查询结果:

image-20220714172903460

解法2:直接让这个||变成连接符号,我们可以通过这样的语句实现set sql_mode=PIPES_AS_CONCAT;

最终的payload就是:1;set sql_mode=pipes_as_concat;select 1

这一整句语句就相当于是select 1 from Flag和select flag from Flag

最终提交这个payload

image-20220714173505612

本地测试一下这个set sql_mode=pipes_as_concat语句

image-20220714173914260

可以看到刚开始a列中的数据是1,1,2,3,2,1,null

未设置该语句前的查询结果

image-20220714174105262

设置语句后的查询结果

image-20220714174134439

可以发现,在设置这个set sql_mode=pipes_as_concat语句之前,只查询到1,设置后既查询了1又查询了a列的数据

posted @ 2022-07-14 17:44  Jinx8823  阅读(274)  评论(0编辑  收藏  举报