[suctf 2019]EasySQL
一个输入框,我会的方式都试过了
这题输入数字会给一个数组就如上
别的进行注入类型判断的时候就是没有回显,白的
但是输入一些关键的sql查询语句的时候就会nonono的
把union,order by ,sleep
等一些列我试的都不行
正常方式已经不行了
直到最后用到的堆叠注入
应为他的输入1会有回显那么对于堆叠注入
因该就会有用
payload:
1;show databases;
这样终于出了
进行下一步
payload:
1;show tables;
哈哈感觉就要行了
下一步
payload
1;show columns from 'Flag';
又错了,麻了
又经过一番都不行
看了一下别人的wp
原来是要猜测别人写的后端代码
下面就是解这一题的方式了
第一步最简单的
payload
*,1
因为猜测代码如下
select $_POST['query'] || flag from flag
我们输入的代码就是在这了query
那么
输入1的原因
输入*,1,这里会增加一个临时列,他的列名为1,然后那一列的值都为1
1 || flag 这个会构成短路语法 会留下前面那个1
就会变成这样
select *,1 from flag
这样就出来了
还有一种就是堆叠注入了
用的是
1;set sql_mode=PIPES_AS_CONCAT;select 1
讲的是把||设置成了concat函数了就是进行连接
sql_mode : 它定义了 MySQL 应支持的 SQL 语法,以及应该在数据上执行何种确认检查,其中的 PIPES_AS_CONCAT 将 || 视为字符串的连接操作符而非 “或” 运算符
也就是PIPES_AS_CONCAT把||改成字符串了
因为:
pipes_as_concat:一个特定的 SQL 模式选项,它意味着在 SQL 查询中用 | 符号(即管道符号)作为字符串连接符,从而允许使用管道符号进行字符串连接。
SET 是一个用来修改系统变量的命令
[SWPUCTF 2021 新生赛]error
这个直接用sqlmap就出了
接下来试试手注
经过尝试之后可以发现这是字符型注入并且是‘’
有3列
是可以的,下面就继续
然后改一下字符起始位置就好了
updatexml
extractvalue
这俩都可以
[强网杯 2019]随便注
经过测试发现单引号被过滤了,而且下面的也都不行
试了一下堆叠注入还是可以的
与1有区别的就是2了
1;show databases;
跟1的效果也是一样的
不过用kali试了一下发现有bool 跟时间盲注这两个
果然sqlmap是没有灵魂的,没有成功
用order by 试出了有2个
这个是字符型输入 要闭合单引号
1’;show databases;
查找到如下
接下来就差读取flag了
还有一种就是动态执行预处理
进行16进制编码也是可以绕过select 等字符串的
通过上述也是找到了flag的所在地
如下set @a=0xxxxx; # 要执行语句的16进制
prepare test from @a;
execute test;:
要执行的是select * from `1919810931114514`
进行16进制编码
payload:
1' ; Set @a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare test from @a;execute test;
就出来了