admin管理员组

文章数量:1794759

简单的poc以及exp编写(入门篇)

简单的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
Cookiescookies
重定向处理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("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 = "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 = "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 = "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 = "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 = "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="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编写(进阶篇)

本文标签: 简单入门篇pocexp