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,14 判断查询列数,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 本题和一的区别在于是 ") 符号注入,其他思路相同,如图: