首页 > 其他分享 >最新时间注入攻击和代码分析技术

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

时间:2024-03-01 09:58:44浏览次数:8  
标签:语句 攻击 代码 sleep 库名 页面 数据库 注入

时间注入攻击

时间注入攻击的测试地址在本书第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语句的执行结果。

 

 

 

 

Ms08067安全实验室专注于网络安全知识的普及和培训,是专业的“图书出版+培训”的网络安全在线教育平台,专注于网络安全领域中高端人才培养。

 

平台已开设Web安全零基础就业,Web高级安全攻防进阶,红队实战攻防特训,Java代码安全审计,恶意代码分析与免杀实战,CTF基础实战特训营,网络安全应急响应,安全工具开发,AI与网络安全等系统培训课程。实验室出版安全图书《Web安全攻防:渗透测试实战指南》、《内网安全攻防:渗透测试实战指南》、《Python安全攻防:渗透测试实战指南》、《Java代码审计:入门篇》等。

 

扫描客服微信 获取更多课件+学习资料

 

 

标签:语句,攻击,代码,sleep,库名,页面,数据库,注入
From: https://www.cnblogs.com/ms08067/p/18046281

相关文章

  • golang wire依赖注入
    安装gogetgithub.com/google/wire/cmd/wire@latest一.假设需要定义多个有依赖的启动项,新建main.gopackagemainimport("fmt")typeMessagestringfuncNewMessage()Message{returnMessage("Hithere!")}typeEventstruct{GreeterGreeter}......
  • 代码随想录算法训练营day09 | leetcode 28. 找出字符串中第一个匹配项的下标、459. 重
    目录题目链接:28.找出字符串中第一个匹配项的下标-简单题目链接:459.重复的子字符串-简单题目链接:28.找出字符串中第一个匹配项的下标-简单题目描述:给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。如果ne......
  • lua协程 - 把回调模式的代码流程改成顺序执行流程
    像ugui的点击按钮,然后触发相关逻辑,都是回调模式的写法,比如下面代码的ShowAlert调用publicclassTest7:MonoBehaviour{publicGameObjectm_Alert;publicTextm_TxtMsg;publicButtonm_BtnYes;publicButtonm_BtnNo;privateLuaEnvm_LuaEnv;......
  • Java 继承与多态:代码重用与灵活性的巧妙结合
    Java继承(子类和超类)在Java中,可以从一个类继承属性和方法到另一个类。我们将“继承概念”分为两类:子类(child):从另一个类继承的类超类(parent):被继承的类要从一个类继承,使用extends关键字。示例:classVehicle{protectedStringbrand="Ford";//Vehicle属性......
  • 代码随想录 第八天 | 344.反转字符串 ● 541. 反转字符串II ● 卡码网:54.替换数字 ●
    LeetCode:344.反转字符串-力扣(LeetCode)思路:双指针的想法用while循环遍历两侧指针,效率高classSolution{publicvoidreverseString(char[]s){inti=0,j=s.length-1;while(i<j){chartemp;temp=s[j];......
  • 读书笔记《梦断代码》
    《梦断代码》主要围绕OSAF主持的Chandler项目进行展开,深入剖析了软件开发过程中的种种问题和挑战。通过作者的详细叙述,我仿佛置身于项目的开发现场,亲身经历了那些充满波折和挫折的时刻。在Chandler项目的开发过程中,作者展示了各种技术难题、团队沟通问题以及项目管理挑战。这些问......
  • ICMP类型字段(Type)以及代码字段(Code)含义汇总
    ICMP报文可分为两大类:一、有关信息采集和配置的ICMP报文(称为查询(query)或者信息类报文(informationmessage)),二、有关IP数据报传递的ICMP报文(称为差错报文(errormessage)).typecodeDescriptionqueryerror00EchoReply——回显应答(Ping应答)x30NetworkUnreac......
  • 供应链投毒预警 | 恶意NPM包利用Windows反向shell后门攻击开发者
    概述​本周(2024年02月19号),悬镜供应链安全情报中心在NPM官方仓库(https://npmjs.com)中发现多起NPM组件包投毒事件。攻击者利用包名错误拼写方式(typo-squatting)在NPM仓库中连续发布9个不同版本的恶意包,试图通过仿冒合法组件(ts-patch-mongoose)来攻击潜在的NodeJS开发者。开发者......
  • 记录一次修复蓝牙故障经过(硬件管理器:“目前,这个硬件设备没有连接到计算机。(代码 45)
    记录一次修复蓝牙故障经过(硬件管理器:“目前,这个硬件设备没有连接到计算机。(代码45)”)来源https://zhuanlan.zhihu.com/p/491185819 2022年3月中旬重装win10系统,下旬欲使用蓝牙时发现没有安装驱动,便从Acer官网下载驱动进行安装,失败,遂尝试驱动人生、驱动精灵、booster9安......
  • 代码随想录算法训练营第三十一天 | 53. 最大子序和, 376. 摆动序列,455.分发饼干
    455.分发饼干 已解答简单 相关标签相关企业 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] ......