BUU sql注入-[SUCTF 2019]EasySQL

Posted 1vyyyyyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BUU sql注入-[SUCTF 2019]EasySQL相关的知识,希望对你有一定的参考价值。

一、题目

 

 点开页面,是一个提交表单

二、解题

1.  先试试一些常规的姿势

 

 输入数字有回显

 

输入其他字符(或数字后加单引号构造闭合)都没有回显,应该是关闭了错误提示

那么我们可以确定这里是字符型注入

2.  优先考虑用联合查询

 

无论输啥数字都显示nonono,初步推断有关键字被后台过滤掉了

一个一个试(也可以在BP里面buzz测试)

 

 

 

 

 

常用的关键字只有showselect没被过滤掉(or被过滤了肯定order也用不了)

联合查询可以放弃了

3.  我们知道在语句里穿插分号,可以同时执行多条命令,这就是堆叠注入的原理

于是用show尝试

 

 

 爆库爆表之后发现flag文件 Flag

好家伙,flag都被过滤掉了

再试试handler

 

......(流汗黄豆脸) 

4.  报错注入,时间盲注就别考虑了

测试之后 extractvalue(),sleep这些关键字都被过滤掉

冥思苦想(看了别人的wp)

这里我们回到最开始测试得到的结论

除非零数字外,输入其他字符都不会得到回显

 于是猜测后台语句中存在 "||",如下

select $_GET['query'] || flag from Flag

 在mysql中,"||" 起到的是“或”的作用,这就是输入0和其他字符没有回显的原因

 而在Oracle中,"||" 起到的是连接字符串的作用

于是有两种解法

方法一:使用通配符 * 

通配符 * 的在查询语句中的作用是匹配所有结果集

构造payload:

*,1

整个查询语句就变为

select *,1 || flag from Flag

1 || flag 等价于 1

从而会输出Flag里面所有内容

方法二:修改配置

可以让MySQL里的 "||" 变成Oracle里的 "||"

构造payload:

1;set sql_mode=PIPES_AS_CONCAT;select 1

整个查询语句变成

select 1;set sql_mode=PIPES_AS_CONCAT;select 1 || flag from Flag

concat()作用一样

得到flag

 三、总结

1. 这里猜测管道符 || 的存在确实是比较刁钻,不过有一点点提示都好,至少没把show这些关键字过滤掉,要不然真的是没啥办法

2. 遇到 "||" 等符号存在的时候有两种绕过方式,一是用 *,1 来输出文件的全部内容,二是修改这类字符的定义

以上是关于BUU sql注入-[SUCTF 2019]EasySQL的主要内容,如果未能解决你的问题,请参考以下文章

BUU sql注入-[极客大挑战 2019]LoveSQL

BUU sql注入-[强网杯 2019]随便注

BUU-MISC-[SUCTF2018]followme

BUUCTF[SUCTF 2019]EasySQL

[SUCTF 2019]EasySQL

BUU-WEB-[SWPU2019]Web1