0. 前言
因疫情在忙其他事情也很久没上,无意看到一个较为完善的poc框架及原理这里分享大家共同学习讨论。
1. 框架代码如下
#!/usr/bin/env python
#coding:utf-8
import requests
class misiinfo(object):
def __init__(self,request=None,response=None):
self.info={}
self.info["author"]="Mr_Python" #作者
self.info["name"]="" #漏洞名称
self.info["time"]="2019-1-18" #POC编写时间
self.info["ontent"]="" #存在漏洞地址
def jiance(payload):
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36',}
response = requests.session() #相当于保存cookie,方便下一个访问
response_ = response.get(payload,timeout=3,verify=False,headers=headers)
return response_
"""漏洞验证函数"""
def audit(arg):
payload=arg+'path'
try:
response=jiance(payload)
print(response.content)
if response.status_code==200 and "filename:" in response.content:
if warning_info:
print(warning_info)
except Exception as error:
print (error)
if __name__ == "__main__":
audit("http://xxx.cn")
2. 思路
Requests库简介:
Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。
大概思路:
首先导入我们需要的库request,然后模拟出浏览器的请求方式,定义payload以及方法,做一个异常处理然后返回结果。
3. 代码基础框架
1.导入 requests库
import requests
- 定义类
class nameinfo(object):
self.info["Author"]={"Mr_Python"}
self.info["Time"]={"2020.01.24"}
self.info["Name"]={"注入批量检测"}
self.info["Number"]={"CNVD"}
self.info["Rce"]={"小型cms注入批量检测工具"}
def __init__(self,request=None, response=None): #这个则为类的初始化,它在类的实例话操作后,会自动调用
- def 定义一个方法
使用 def 开始函数定义,紧接着是函数名,括号内部为函数的参数,内部为函数的 具体功能实现代码,如果想要函数有返回值, 在 expressions 中的逻辑代码中用 return 返回。
首先我们定义一个jiance里面包含了headers,response.
def jiance(payload):
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36',}
response = requests.session() #相当于保存cookie,方便下一个访问
response_ = response.get(payload,timeout=3,verify=False,headers=headers)
return response_
注: response_ = response.get(payload,timeout=3,verify=False,headers=headers这个也就是 get response中的payload,以及移除ssl证书取消警告,取上文中我们设置的headers,达到请求的作用。
4. 漏洞验证函数
def audit(arg):
payload = arg + 'path'
try:
response = jiance(payload)
print(response.content)
payload= arg+‘path’
设置payload=arg(arg为下面我们传上来的url)+ 后面的payload的
完成的请求则为 http://xxx.com/path
Try:为异常处理都是于except来用,达到异常处理。
response=jiance(payload) 读取出http所返回的状态
print(response.content)打印出我们 所读取出来的http的状态
if response.status_code==200 and "filename:" in response.content:
if warning_info:
print(warning_info)
except Exception as error:
print (error)
if __name__ == "__main__":
audit("")
注: 如果执行主函数我们便会执行下面的audit
Audit又传到了上面的arg里面,测完成整个payload的测试
5. 结尾
其实这个poc还可以根据自己需求进行更改这个框架只是为了有一个大概思路。