前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mitmproxy抓包 | Python双篡改假请求实战(六)

mitmproxy抓包 | Python双篡改假请求实战(六)

作者头像
王大力测试进阶之路
发布2021-12-18 10:37:23
1.2K0
发布2021-12-18 10:37:23
举报
文章被收录于专栏:橙子探索测试

实际工作中,业务模块之间大多存在依赖关系的,例:B模块依赖A模块的触发,如果A模块处于阻断性、很难触发、已触发无法再次触发或不想被触发时,B模块是无法单独进行调试或测试的,这时可以借助mitmproxy工具实现前后端双向篡改,重定向A模块的url,mock A模块成功的响应数据,即A模块被假定成功触发,实际并未触发到服务器,这时我们就可进行B模块的调试或测试工作。

测试需求:

拉钩app-我的页面-活动banner

1、活动banner接口500了,活动banner不展示,无法测试活动详情页

2、活动banner已进入1次,活动banner不展示,无法测试活动详情页

3、至尊VIP充值5w,才能看到活动banner,真实充值不太可能,活动banner不展示,无法测试活动详情页

抓取banner(BAT大佬都在看的搞笑学习法)接口信息,或者参照接口文档接口信息

代码语言:javascript
复制

GET https://gate.lagou.com/v1/neirong/edu/ads/ad?type=1 HTTP/2.0

{
    "content": {
        "adAppHref": "https://edu.lagou.com/growth/sem/offer.html?utm_source=lagouedu&utm_medium=wodetab-banner&utm_campaign=%E5%A4%A7%E8%AF%BE%E7%BA%BF%E7%B4%A2&_channel_track_key=yKyKbQxA&lgec_type=website&lgec_sign=9A0FAD8D532161C641529DEDC5C30AFC",
        "adAppImage": "https://s0.lgstatic.com/i/image6/M00/66/38/Cgp9HWGwLI6AIYWSAAMK4ADi3Jw315.png",
        "adId": 169,
        "adName": "大厂私教offer计划",
        "adPcHref": "",
        "adPcImage": "",
        "adType": null
    },
    "message": "操作成功",
    "state": 1,
    "uiMessage": null
}

篡改接口地址https://gate.lagou.com/v1/neirong/edu/ads/ad?type=1为https://www.baidu.com,让app发起请求时,不请求拉钩服务器,重定向到百度服务器

  • request
代码语言:javascript
复制
代码语言:javascript
复制
class Demo:

    def request(self, flow):
        # 匹配指定的url
        if 'https://gate.lagou.com/v1/neirong/edu/ads/ad?type=' in flow.request.url:
            flow.request.url='https://www.baidu.com/'


addons = [
    Demo()
]

由于前段识别到接口返回的数据是百度响应的数据格式,无法正常识别,故不展示banner了

我们想让banner展示出来,需要根据接口文档模拟正确的响应数据,让前端可以正常识别

  • response

common

Description

response = flow.response

response.status_code

响应码

response.text

文本 (同下)

response.content

Bytes 类型

response.headers

响应头

response.cookies

响应 cookie

response.set_text()

修改响应的文本

response.get_text()

文本 (同上)

flow.response= flow.response.make(404)

响应 404

代码语言:javascript
复制

import json, os

response_data = {
    "content": {
        "adAppHref": "https://edu.lagou.com/growth/sem/offer.html?utm_source=lagouedu&utm_medium=wodetab-banner&utm_campaign=%E5%A4%A7%E8%AF%BE%E7%BA%BF%E7%B4%A2&_channel_track_key=yKyKbQxA&lgec_type=website&lgec_sign=9A0FAD8D532161C641529DEDC5C30AFC",
        "adAppImage": "https://s0.lgstatic.com/i/image6/M00/66/38/Cgp9HWGwLI6AIYWSAAMK4ADi3Jw315.png",
        "adId": 169,
        "adName": "测试",
        "adPcHref": "",
        "adPcImage": "",
        "adType": 'null'
    },
    "message": "操作成功",
    "state": 1,
    "uiMessage": 'null'
}


class Demo:

    def request(self, flow):
        # 匹配指定的url
        if 'https://gate.lagou.com/v1/neirong/edu/ads/ad?type=' in flow.request.url:
            flow.request.url='https://www.baidu.com/'

    def response(self, flow):
        # 匹配指定的url
        if flow.request.url.startswith ( 'https://www.baidu.com/' ):
            # 设置响应据
            flow.response.set_text ( json.dumps ( response_data ) )


addons = [
    Demo()
]

再次app请求,接口响应数据是我们脚本里设置的

banner展示出来了,说明篡改的响应数据生效了,前段识别成功了,这时可以进入活动详情进行测试了,达到我们想要的效果了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 橙子探索测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档