简单的poc以及exp编写(入门篇)
本文中主要针对的是Web应用渗透中的漏洞,而与Web应用之间的交互大多是基于HTTP协议的。所以用到python中与HTTP协议相关的一些模块
文章目录
- 一、何为POC和EXP
- 二、基础环境Python3
- HTTP
- requests模块中的http方法
- 参数
- 对象方法
- 三、使用
- 相关操作
- ①如何定制头部
- ②超时
- ③GET 传参
- ④POST 传参
- ⑤文件上传
- ⑥cookies
一、何为POC和EXP
POC
Proof of Concept中文意思是“观点证明”,是用来检测是否存在漏洞的脚本
EXP
Exploit的中文意思是“漏洞利用”,是用来利用该漏洞的脚本
二、基础环境Python3
HTTP
方法 | 内容 |
---|---|
GET | 获取资源 |
POST | 传输实体主体 |
PUT | 传输文件 |
HEAD | 获得响应报文首部 |
DELETE | 删除文件 |
OPTIONS | 查询支持的方法 |
TRACE | 追踪路径 |
CONNECT | 要求用隧道协议进行连接 |
LINK | 建立和资源之间的连接 |
requests模块中的http方法
在python中的使用 |
---|
res = requests.get() |
res = requests.post() |
res = requests.put() |
res = requests.delete() |
res = requests.head() |
res = requests.options() |
参数
GET参数 | params |
---|---|
HTTP头部 | headers |
POST参数 | data |
文件 | files |
Cookies | cookies |
重定向处理 | allow_redirects=False/True |
超时 | timeout |
证书验证 | verify=False/True |
工作流(延迟下载) | stream=False/True |
事件挂钩 | hooks=dict(response) |
身份验证 | auth= |
代理 | proxies= |
对象方法
URL | .url |
---|---|
text | .text |
编码 | .encoding/.enconding= |
响应内容 | .content |
Json解码器 | .json |
原始套接字响应 | .raw/.raw.read() |
历史响应代码 | .history |
抛出异常 | .raise_for_status |
查看服务器响应头 | .headers |
查看客户端请求头 | .request.headers |
查看cookies | .cookies |
身份验证 | .auth= |
更新 | .update |
解析连接字头 | .links[] |
三、使用
了解了这些之后就可以试着去使用python的request模块
先在本地开启phpstudy模拟服务器端
在服务器创建这样的页面用来接收返回数据
接着编写python脚本
import requests
res=requests.get("http://127.0.0.1/pocexp/get.php")
print(res.text) #获取内容
print(res.status_code) #获取响应状态码
print(res.encoding) #获取响应编码
print(res.content) #以二进制方式获取响应正文
print(res.headers) #获取响应头部
print(res.url) #获取提交的URL
运行后可以看到这些结果
相关操作
①如何定制头部
import requests
url = "http://127.0.0.1/pocexp/get.php"
header = {"User-Agent":"L1NG"}
res = requests.get(url=url,headers=header)
print(res.request.headers)
运行后可以看到这样的结果
②超时
在服务器创建这样的页面用来接收返回数据
访问该页面时5s后才会显示
此时编写python超时脚本
import requests
url = "http://127.0.0.1/pocexp/timeout.php"
try:
res = requests.get(url = url,timeout = 3) #超过3s没获取到页面 输出Timeout
print(res.text)
except Exception as e:
print("Timeout")
如果3s没有获取到页面则会显示Timeout
③GET 传参
import requests
url = "http://127.0.0.1/pocexp/get.php"
getPara = {"name":"L1NG","pwd":"666"}
res = requests.get(url = url,params = getPara)
print(res.text)
print(res.url)
④POST 传参
在服务器创建这样的页面用来接收返回数据
import requests
url = "http://127.0.0.1/pocexp/post.php"
postData = {"name":"L1NG","pwd":"123456"}
res = requests.post(url = url,data = postData)
print(res.text)
⑤文件上传
在服务器创建这样的页面用来接收返回数据
<html>
<meta charset="utf-8">
<h1>
文件上传测试
</h1>
<form
action=""
method="post"
enctype="multipart/form-data"
>
<input type="file" name="userUpFile">
<input type="submit" name="userSubmit" value=
"上传">
</form>
</html>
<hr />
<?php
echo"<pre>";
if(isset($_POST['userSubmit'])){
var_dump($_FILES);
$tmp_path=$_FILES['userUpFile']['tmp_name'];
$path=__DIR__."\\".$_FILES['userUpFile']['name'];
//echo $path;
if(move_uploaded_file($tmp_path,$path)){
echo "upfile success!";
echo "<br />".$_FILES['userUpFile']['name'];
echo $path;
}else{
echo "upfile failed";
}
}
?>
编写上传文件的python脚本
import requests
url = "http://127.0.0.1/pocexp/upfile.php"
upFile = {"userUpFile":open("poc.py","rb")}
postData = {"userSubmit":"submit"}
res = requests.post(url = url,files = upFile,data = postData)
print(res.text)
会发现文件已经成功上传到php页面的文件夹下
⑥cookies
在服务器创建这样的页面用来接收返回数据
import requests
url="http://127.0.0.1/pocexp/cookie.php"
coo = {"name":"L1NG"}
res = requests.get(url = url,cookies = coo)
print(res.text)
下一节讲述利用sql-lab-8和sql-lab-9编写获取数据库的exp
简单的poc以及exp编写(进阶篇)
m0_74090176: 大佬,怎么不更新啦?
LIU0527i: 等着你的下一篇呢大佬
小小橘颂子: 等着你的下一篇呢大佬
苍树青哉: 等着你的下一篇呢大佬
帅超超i: 等着你的下一篇呢大佬