Sql注入之延时注入工具暴破实践
什么是延时注入
延时注入爆破是一种SQL注入攻击技术,它利用数据库查询的执行时间差异来推断数据库中的信息。这种技术通常用于那些不允许直接输出数据库错误信息或数据的场景,使得攻击者无法通过传统的错误信息来获取数据。
在延时注入中,攻击者构造特殊的SQL查询,这些查询的执行时间会根据数据库中的数据而变化。例如,攻击者可能会构造一个查询,其中包含一个条件,这个条件只有在满足特定数据时才会使查询变慢。通过测量查询的执行时间,攻击者可以逐个字符地猜测数据库中的敏感信息,如用户名、密码等。
sleep():
sleep() 在 PHP 中是一个内置函数,它用于延迟脚本的执行指定的秒数。这个函数通常用于在执行某些需要等待的操作之前暂停脚本的执行。
例如,如果你正在编写一个脚本,需要在两次数据库查询之间等待一段时间,你可以使用 sleep() 函数来实现。
使用 sleep() 函数的语法如下:
sleep(seconds);
如:sleep(5); // 脚本将暂停5秒
暴库前须知
实操时尽量选择靶场进行练习操作,严禁在没授权、许可的情况下对任何网站进行SQL注入。
猜闭合符
不管是”' ”还是” " ”都会显示You are in...........,这个时候平常的方法已经无法使用了,因为不管你输入的哪个符号都看不出来到底是不是闭合符,所有如果要找注入点就要用其他方法,比如这个sleep(),通过这个函数让页面进行加载,如果闭合符是对的那它就会加载,如果不加载说明就是错误的。
接下来开始猜闭合符,通过sleep(3)发现单引号使用sleep(3)后,点击EXECUTE后开始加载,另外一个双引号点击后没加载。
那么注入点就已经找到了。
/sqli-labs-php7-master/Less-9/?id=1" and sleep(3) -- +,在id=1" and xxxx sleep(3) -- + 进行注入。
burpSuite工具对当前数据库的长度进行暴破
通过这条命令开始进行注入,看页面是否加载3秒来判断是否执行成功
/sqli-labs-php7-master/Less-9/?id=1'
and if(length((select database()))>10,sleep(3),1) --
命令代码详解:
?id=1':一个URL参数,其中id是一个查询参数。
and:在SQL语句中,and用于连接多个条件,使之必须同时满足。
if(length((select database())>10),sleep(3),1):这是一个SQL函数if的使用示例,它根据条件执行不同的操作:
length((select database())):计算当前数据库名称的长度。
>10:条件判断,如果数据库名称的长度大于10,则执行sleep(3),否则执行1。
sleep(3):使SQL语句执行延迟3秒,这是一种时间盲注技术,通过测量响应时间来推断数据库信息。
1:如果条件不满足,则执行一个无害的操作,返回1。
-- +:在SQL语句中,--通常用于注释掉后面的内容。
当前数据库长度暴破
以下所说的“加载”就是通过sleep()这个内置函数实现的,具体解释在第2部分内容有解释
/sqli-labs-php7-master/Less-9/?id=1'andif(length((select database()))>10,sleep(3),1) --
命令执行后,未发现页面进行加载,说明当前数据库长度不大于10(包括10)。
继续二分法,看数据库长度是否大于7,运行后,依旧加载3秒,说明数据库长度在7-10
剩下的值自己就可以试着猜了,经过猜解,得出数据库长度为8
burpSuite工具进行当前数据库库名暴库
得出长度后就开始暴破数据库名称,使用burpSuite工具进行暴库。
以下是过程
/sqli-labs-php7-master/Less-9/?id=1'and
if((substr((select database()),1,1) = "i" ),sleep(3),1) --
以上这串命令就是能够查询数据库名的命令
命令的详细解释
这串注入命令的详细解释如下:
?id=1':尝试结束正常的查询参数,并开始注入SQL代码。
and:连接原始查询和注入的SQL条件。
if(...):SQL的IF函数,根据括号内的条件来执行不同的操作。
substr((select database()),1,1):从当前数据库名称中提取第一个字符。
= "i":检查提取的字符是否等于"i"。
sleep(3):如果条件为真(即数据库名称的第一个字符是"i"),则执行sleep(3),造成3秒的延迟。
1:如果条件为假,则返回1,这通常不会影响查询结果。
-- :这是尝试结束注入的SQL命令并注释掉。
简单来说就是select database()),1,1)=”i”,第一个1就是从第几个字符开始,第二个1是一次几个字符,这里的意思是从第一个字符开始,一次一个字符,也可以理解成步长值为1,一次走一步。
实现原理通过工具进行猜解,当第一字符与=”i”匹配时,页面就会加载,加载后字符长度肯定与没加载的不相同,这样就能猜到8的长度对应的8个字符,依次排序即可。
开始进行当前数据库库名暴破
暴破前准备
开启浏览器代理与burpSuite的代理,端口要一致。
浏览器的代理:
BurpSuite工具代理:
开启后就可以接下来的操作了。
勾选上浏览器的代理,然后开启工具的截距。顺便点击图二的工具按钮,就可以上Burpsuite上抓取数据包了
进入intruder后选择这两个需要暴破的数据,选择工具中的集束炸弹选项
第一个爆破数据设置为下图
从1到8,步长为1(这里的8就是第4块对数据库长度进行的猜解,上面有写过程)
第二组暴破数据默认即可,下面红框可以选择工具自带的字符,选择即可,然后开始暴破。
以下就是暴破成功的数据包,按照编号从1排到8就行了。排序得到当前数据库为”security”。
结语
SQL注入攻击是一种常见的网络安全风险,通过有效的防范措施可以降低风险并保护应用程序和数据库的安全。在开发和维护应用程序时,始终要注意输入验证、过滤和参数化查询,以及使用安全的API和框架。同时,尽量遵循最小权限原则,并定期更新和维护系统。在日常工作中尊重并遵守组织的漏洞披露政策,确保负责任地报告和修复安全问题,运维者和渗透测试者都应保持警惕,不断更新自己的技能和知识库,以应对日益复杂的网络安全环境。同时,两者之间的紧密合作对于维护一个组织的网络安全至关重要。
标签:数据库,暴库,sleep,延时,SQL,加载,暴破,注入 From: https://www.cnblogs.com/BPTesting/p/18674334