[SUCTF 2019]EasySQL
先输入一个1 有回显,普通爆库爆表那套是行不通的。
最多把表搞出来 Flag。
1:
第一种方法比较强的话能从报错中猜出sql的查询语句:select $_GET[‘query’] || flag from flag
毕竟没有漏源码。
这里的"||"是表示或,如果前一个操作数为真,则不看后面的语句
Payload:*,1
解释一下:
sql=select.post[‘query’]."||flag from Flag";
如果$post[‘query’]的数据为*,1,sql语句就变成了select *,1||flag from Flag,
就是select *,1 from Flag,这样就直接查询出了Flag表中的所有内容。
引用网上大佬做的实验
这里会增加一个临时列,它的列名是1,然后那一列的值都为1
2:
第二种方法
思想是把"||"变成字符串连接符,而不是或
涉及到mysql中sql_mode参数设置,设置 sql_mode=pipes_as_concat字符就可以设置。
在oracle 缺省支持 通过 ‘ || ’ 来实现字符串拼接。
但在mysql 缺省不支持。需要调整mysql 的sql_mode
模式:pipes_as_concat 来实现oracle 的一些功能
Payload:1;set sql_mode=PIPES_AS_CONCAT;select 1