本文中主要针对的是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("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编写(进阶篇)

更多推荐

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