python渗透开发 高阶段位之 waf绕过sql注入 sqlmap –temper模块开发以及框架逻辑修改 以及解释Temper是什么?
目录
temper 解释:
这种操作常见于以下场景:
常见用法:
tamper脚本位置
SQLMAP之temper二次开发说明
如何开发 temper 中的 Python 文件
基本的 temper Python 脚本结构
代码结构:
解释:
二次开发Temper中 base64encode.py 脚本
源码
编码前解释
二次框架编码
最后:
temper
解释:
--temper
是 SQLmap 的一个选项,用于设置一个“临时的” HTTP 请求标头。具体来说,它用来向请求中添加额外的 HTTP 头部字段 而这些字段通常在进行 SQL 注入测试时可能是必需的。
--temper
选项允许你指定一个 Python 脚本文件,这个脚本会在 SQLmap 进行每次请求时执行,作为一个钩子来修改或操作 HTTP 请求。你可以将一个 .py
文件作为--temper
选项的值传递给 SQLmap,这个 Python 脚本的作用是:修改请求头:可以在请求中插入自定义的 HTTP 头部。 处理或分析响应:你可以根据需要对请求的响应进行处理。 增加自定义逻辑:比如控制注入的行为,或在执行过程中加入特定的操作。
这种操作常见于以下场景:
常见用法:
sqlmap --url="http://example.com/vulnerable_page" --temper="modify_request.py"
User-Agent
头部。tamper脚本位置
SQLMAP之temper二次开发说明
二次开发 SQLmap
--temper
选项中的 Python 脚本可以让你根据具体需求更灵活地控制 HTTP 请求和响应的行为。通过二次开发,你可以在 SQLmap 执行注入测试时自定义请求内容、分析响应,甚至引入额外的处理逻辑。
如何开发 temper
中的 Python 文件
pre_process_request(request)
:在 SQLmap 发起 HTTP 请求之前调用。post_process_response(response)
:在接收到 HTTP 响应之后调用。
基本的 temper
Python 脚本结构
temper
脚本框架:代码结构:
def pre_process_request(request):
"""
处理 HTTP 请求,在 SQLmap 发送请求之前执行。
"""
# 例如,在请求头中添加自定义的 User-Agent
request['User-Agent'] = 'CustomUserAgent/2.0'
# 可以在请求的 URL 中修改参数值
if 'search' in request['url']:
request['url'] = request['url'].replace('search=1', 'search=2')
# 可以修改请求体
if 'POST' in request['method']:
request['data'] = request['data'] + '&additional_param=value'
# 返回修改后的请求
return request
def post_process_response(response):
"""
处理 HTTP 响应,在 SQLmap 收到响应后执行。
"""
# 例如,检查响应内容并根据特定情况执行不同的逻辑
if 'error' in response.text:
print("Error found in the response.")
else:
print("Response looks normal.")
# 可以根据响应的状态码或内容决定是否继续进行测试
if response.status_code == 404:
print("Target not found. Stopping further tests.")
return None # 你可以选择返回 `None` 来停止后续操作
# 返回修改后的响应
return response
解释:
pre_process_request(request)
:
在发送请求之前,你可以修改请求头(如 User-Agent
),修改 URL 或请求数据(如 POST 参数)。你可以在这里对请求内容进行细粒度的控制,例如绕过 WAF、修改请求格式等。
post_process_response(response):
在接收到响应后,你可以对响应内容进行分析,例如查找错误信息、检查特定的标志,或根据响应内容决定是否继续执行 SQL 注入测试。 你也可以根据响应状态码(如 404)决定是否停止某些操作。
二次开发Temper中 base64encode.py 脚本
源码
编码前解释
temper
项目中,base64encode.py
通常会用于进行Base64编码和解码操作。
二次框架编码
#!/usr/bin/env python
"""
Copyright (c) 2006-2024 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""
from lib.core.convert import encodeBase64
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.LOW
def dependencies():
pass
def tamper(payload, **kwargs):
"""
Base64-encodes all characters in a given payload
>>> tamper("1' AND SLEEP(5)#")
'MScgQU5EIFNMRUVQKDUpIw=='
"""
return encodeBase64(payload, binary=False) if payload else payload
# 编码字符串
def encode_string(data):
return base64.b64encode(data.encode()).decode()
# 解码字符串
def decode_string(encoded_data):
return base64.b64decode(encoded_data).decode()
# 编码文件
def encode_file(file_path):
with open(file_path, 'rb') as file:
file_content = file.read()
return base64.b64encode(file_content).decode()
# 解码文件
def decode_file(encoded_data, output_file_path):
file_content = base64.b64decode(encoded_data)
with open(output_file_path, 'wb') as file:
file.write(file_content)
最后:
这些修改和扩展的方向,取决于你的需求和 temper
项目的具体情况。你可以根据项目的需求和现有代码架构,选择合适的二次开发方式。
喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。
作者:浩策