Abstract
使用工具Burp Suite抓包,尝试解决BUU-Basic SQL的基础题:SQLi-Labs 1~4,学习几种注入方法。
(欢迎各位提出宝贵意见~很高兴能帮助到您)
Tips
') 字符注入点后端代码:
$id = $_GET['id'];
$sql = "SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
数字注入点后端代码:
$id = $_GET['id'];
$sql = "SELECT * FROM users WHERE id=$id LIMIT 0,1";
Page One 基础注入
1 GET注入 报错型 字符注入
1 用Burp抓包,如图:

2 提示输入id作为参数,便构造url表单参数,以此确认 id= 为注入点,如图:

3 判断注入类型,尝试加入 ',观察到响应包有报错,报文提示 ' 包裹,由此确认是 ' 的字符型注入,观察插入后的后端sql语句,如图:

select … from … where id='1'' limit 0,1
观察到,该SQL语句尾部有LIMIT限制结果,将其注释处理,观察插入后的后端sql语句,#后的被注释掉,如图:

select … from … where id='1'#' limit 0,1
4 判断查询列数,1或2或3响应包均有内容,其他均无内容,由此推断3列,如图:

5 使用union联合查询,查找外显点,观察到2和3列可以外显数据,如图:

6 查找当前使用的数据库,如图:

7 查找网站使用的所有数据库,如图:

8 观察到数据库ctftraining,和flag关联性大,优先选择来查表查列,找到flag,如图:



2 GET注入 报错型 数字注入
1 提示 id= 为注入点,尝试加入 ',观察到响应包有报错,报文提示 ' 多余,由此报文确认 ' 是多余的符号,故不是字符注入,是数字注入,观察插入后的后端sql语句,如图:


select … from … where id=1'
观察到,该SQL语句尾部有LIMIT限制结果,将其注释处理,观察插入后的后端sql语句,#后的被注释掉,如图:
select … from … where id=1 # limit 0,1
并且,按照下列形式插入,同样可证明是数字注入,如图:


2 本题和一的区别在于注入类型不同,其他思路相同,如图:

3 GET注入 报错型 字符注入
1 提示 id=为注入点,尝试加入 ' ,观察到响应包有报错,由报文确认是 ') 字符注入,如图:

2 此题和一的区别在于是 ') 字符注入,其他思路相同,如图:

4 GET注入 报错型 字符注入
1 提示 id= 为注入点,尝试输入 ' 或 ) 均无反应," 响应包有报错,由报文确认是 ") 字符注入,如图:

2 本题和一的区别在于是 ") 符号注入,其他思路相同,如图:


