最新时间注入攻击和代码分析技术

2024-03-16 1,041 0

时间注入攻击

时间注入攻击的测试地址在本书第2章。

访问该网址时,页面返回yes;在网址的后面加上一个单引号,即可再次访问,最后页面返回no。这个结果与Boolean注入非常相似,本节将介绍遇到这种情况时的另外一种注入方法——时间注入。它与Boolean注入的不同之处在于,时间注入是利用sleep()或benchmark()等函数让MySQL的执行时间变长。时间注入多与if(expr1,expr2,expr3)结合使用,此if语句的含义是,如果expr1是TRUE,则if()的返回值为expr2;反之,返回值为expr3。所以判断数据库库名长度的语句应如下:

if (length(database())>1,sleep(5),1)

上面这行语句的意思是,如果数据库库名的长度大于1,则MySQL查询休眠5秒,否则查询1。

而查询1需要的时间,大约只有几十毫秒。可以根据Burp Suite中页面的响应时间,判断条件是否正确,结果如图4-40所示。

图4-40  

可以看出,页面的响应时间是5005毫秒,也就是5.005秒,表明页面成功执行了sleep(5),所以长度是大于1的。尝试将判断数据库库名长度语句中的长度改为10,结果如图4-41所示。

图4-41  

可以看出,执行的时间是0.002秒,表明页面没有执行sleep(5),而是执行了select 1,所以数据库的库名长度大于10是错误的。通过多次测试,就可以得到数据库库名的长度。得出数据库库名的长度后,查询数据库库名的第一位字母。查询语句跟Boolean注入的类似,使用substr函数,修改后的语句如下:

if(substr(database(),1,1)='t',sleep(5),1)

结果如图4-42所示。

图4-42  

可以看出,程序延迟了5秒才返回,说明数据库库名的第一位字母是t。依此类推,即可得出完整的数据库的库名、表名、字段名和具体数据。

时间注入代码分析

在时间注入页面,程序获取GET参数ID,通过preg_match判断参数ID中是否存在Union危险字符,然后将参数ID拼接到SQL语句中。从数据库中查询SQL语句,如果有结果,则返回yes,否则返回no。当访问该页面时,代码根据数据库查询结果返回yes或no,而不返回数据库中的任何数据,所以页面上只会显示yes或no。和Boolean注入不同的是,此处没有过滤sleep等字符,代码如下:

<?php$con=mysqli_connect("localhost","root","123456","test");if (mysqli_connect_errno()){echo "连接失败: " . mysqli_connect_error();}$id = $_GET['id'];if (preg_match("/union/i", $id)) {exit("<htm><body>no</body></html>");}$result = mysqli_query($con,"select * from users where `id`='".$id."'");$row = mysqli_fetch_array($result);if ($row) {exit("<htm><body>yes</body></html>");}else{exit("<htm><body>no</body></html>");}?>

此处仍然可以用Boolean注入或其他注入方法,下面用时间注入演示。当访问id=1' and if(ord(substring(user(),1,1))=114,sleep(3),1)%23时,执行的SQL语句如下:

select * from users where `id`='1' and if(ord(substring(user(),1,1))=114,sleep (3),1)%23

由于user()为root,root第一个字符'r'的ASCII值是114,所以SQL语句中if条件成立,执行sleep(3),页面会延迟3秒,通过这种延迟即可判断SQL语句的执行结果。


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

webpack打包站点,js文件名批量获取思路
加密对抗靶场enctypt——labs通关
【论文速读】| 注意力是实现基于大语言模型的代码漏洞定位的关键
蓝队技术——Sysmon识别检测宏病毒
内网渗透学习|powershell上线cs
LLM attack中的API调用安全问题及靶场实践

发布评论