简学SQL注入
0x06 SQL注入的主要类型(从漏洞类型的角度)
- SQL注入主要分为以下几种类型:
- 1、Boolean-based blind SQL injection(布尔型注入)
http://test.com/view?id=1 and substring(version,1,1)=5
- 如果服务端 Mysql 版本是5.X的话,那么页面返回的内容就会和正常的请求一样。
- 2、UNION query SQL injection(可联合查询注入)
http://test.com/view?id=1 UNION ALL SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
- 最快捷的方法,通过 UNION 查询获取所有想要的数据,但容易被网页本身的内容显示方式所限制(如只显示查询到的第一条数据等)。
- 3、Time-based blind SQL injection(基于时间延迟注入)
select * from table where id = ‘1’ and sleep(3)
- 当页面不会返回错误信息,不会输出通过 UNION 所查询到的泄露的信息。类似搜索这类请求,boolean注入也无能为力,因为搜索返回空值也属于正常。这时就得借助 time-based 注入,但这类型注入获取信息速度慢,请求次数较多,纯手工方式非常复杂。
- 由于利用了 and 连接,因此可以通过页面是否延迟相应来判断注入语句是否执行。
- 4、Error-based SQL injection(报错类型的注入)
- 如果页面能够输出 SQL 报错信息,则可以从报错信息中获取想要的信息。如:利用 group by 的 duplicate entry 错误。
- 5、Stacked queries (可多语句查询注入)
http://test.com/view?id=1;update table set name = ‘a’ where id = 1
- 能够执行多条查询语句,意味着能够对数据库直接进行更新操作。
- 1、Boolean-based blind SQL injection(布尔型注入)
0x07 时间盲注(基于时间延迟注入)
-
通过注入特定语句,根据对页面请求的物理反馈,来判断是否注入成功,如:在 SQL 语句中使用
sleep()
函数看加载网页的时间来判断注入点。 - 适用场景:
- 无法从显示页面上获取结果,且连注入语句是否被执行都不知道。