python实现定制EXP
一、POC和EXP
四个常见概念:
POC:(Proof of Concept)概念验证,常指一段漏洞证明的代码。 作用:用来证明漏洞存在的(无害的)
EXP:(Exploit)利用,指利用系统漏洞进行攻击的动作。 作用:用来利用漏洞的(有害的)
Payload:(攻击载荷,指成功exploit之后,真正在目标系统执行的代码或指令。
Shellcode:利用漏洞时所执行的代码。Payload的一种,由于其建立正向/反向shell而得名。
一个形象的比喻:
想象自己是特工,你目标是监控一个重要的人,有一天你怀疑目标家里的窗子可能没有关,于是你上前推了推,结果推开了,这是一个POC。第二天你通过同样的漏洞渗透进了它家,仔细查看了所有的重要文件,离开时还安装了一个隐蔽的窃听器,这一天你所做的就是一个EXP,你在他家所做的就是不同的Payload,就把窃听器就当作Shellcode。
二、python实现编写EXP
1.环境:
python3.x、模块requests。
2.requests库简介:
requests是使用Apache2 licensed 许可证的HTTP库,用python编写,比urll ib2模块更简洁。
3.requests支持HTTP的方法
1.GET 获取资源
2.POST 传输实体主体
3.PUT 传输文件
4.HEAD 获得响应报文首部
5.DELETE 删除文件
6.OPTIONS 查询支持的方法
7.TRACE 追踪路径
8.CONNECT 要求用隧道协议连接代理
9.LINK 建立和资源之间的连接
10.UNLINK 断开连接关系
4.requests模块中的HTTP方法
1.res = requests.get()
2.res = requests.post()
3.res = requests.put()
4.res = requests.delete()
5.res = requests.head()
6.res = requests.options()
5.requests模块参数
1.GET参数 params
2.HTTP头部 headers
3.POST参数 data
4.文件 files
5.Cookies cookies
6.重定向处理 allow_redirects = False/True
7.超时 timeout
8.证书验证 verify = False/True
9.工作流(延迟下载) stream=False/ True
10.事件挂钩 hooks=dict (response=)
11.身份验证 auth=
12.代理 proxies=
*前7个参数常用
6.requests模块中对象对应的方法
对象 方法
URL .url
text .text
编码 .encoding | .encoding=
响应内容 .content
Json解码器 .json
原始套接字响应 .raw | .raw.read() (需要升启stream=True)
历史响应代码 .history
抛出异常 .raise_for_status()
查看服务器响应头 .headers
查看客户端请求头 .request.headers
查看Cookie .cookies
身份验证 .auth=
更新 .update
解析连接字头 .links []
三、编写EXP
1.导入requests模块:
python -m pip install requests
2.测试
打开phpstudy,将以下代码写在网站根目录下:
<?php
var_dump($_GET);
?>
进行测试(此处以pycharm工具为例):
# 导入requests模块
import requests
# 发送get请求将响应所得的所有内容放入res中
res = requests.get("http://127.0.0.1/pythontest/1.php")
# 获取url
print(res.url)
'http://127.0.0.1/pythontest/1.php'
# 获取正文
print(res.text)
'array(0) {\n}\n'
# 获取响应码
print(res.status_code)
200
# 获取响应编码
print(res.encoding)
'ISO-8859-1'
# 以二进制方式获取响应正文
print(res.content)
b'array(0) {\n}\n'
# 获取响应头部
print(res.headers)
{'Date': 'Sun, 31 Jan 2021 08:38:03 GMT', 'Server': 'Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45', 'X-Powered-By': 'PHP/5.4.45', 'Content-Length': '13', 'Keep-Alive': 'timeout=5, max=100', 'Connection': 'Keep-Alive', 'Content-Type': 'text/html'}
3.相关方法(这里使用pycharm运行)
定制头部(重新定义User-Agent)
import requests
url = "http://127.0.0.1/pythontest/1.php"
header = {"User-Agent":"HELLO"}
res = requests.get(url,headers = header)
print(res.request.headers)
运行结果:
超时
<?php
echo "Hello,world!";
sleep(5);
?>
#设置超时时间为5秒
import requests
url = "http://127.0.0.1/pythontest/1.php"
try:
res = requests.get(url,timeout = 3)
print(res.text)
except Exception as e:
print("Time Out")
#发送get请求,如果3秒内没有得到响应就打印出:Time Out错误,上面设置5秒,超过3秒,所以打印Time Out
运行结果:
GET传参
import requests
url = "http://127.0.0.1/pythontest/1.php"
getPara = {"name":"hello","password":"123456"}
res = requests.get(url,params = getPara)
print(res.text)
print(res.url)
运行结果:
POST传参
import requests
url = "http://127.0.0.1/pythontest/1.php"
postData = {"name":"hello","password":"123456"}
res = requests.post(url,data=postData)
print(res.text)
运行结果:
cookie
import requests
url = "http://127.0.0.1/pythontest/1.php"
userCookie = {"name":"hello"}
res = requests.get(url,cookies = userCookie)
print(res.text)
运行结果:
上传文件
上传页面:
import requests
url = "http://127.0.0.1/pythontest/1.php"
# {"文件上传input标签的name":open("本地文件路径","二进制方式")}
upFile = {"upFile":open("test.txt","rb")}
# {"提交input标签的name":"标签的value"}
postData = {"userSubmit":"submit"}
res = requests.post(url,files = upFile,data = postData)
print(res.text)
运行结果:
版权声明:本文为weixin_51693574原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。