阅读 2564

HttpCanary使用指南——正则匹配注入

HttpCanary更多资料,点我!!!

HttpCanary于v2.11.0版本上线了正则匹配注入功能。顾名思义,就是使用正则表达式或者匹配字符串,动态修改网络请求数据中的部分数据。

举个例子:

{
   "date": "30日星期天",
   "high": "高温 30℃",
   "fengli": "<![CDATA[<3级]]>",
   "low": "低温 23℃",
   "fengxiang": "西南风",
   "type": "多云"
}
复制代码

我们希望将网络请求体中这段数据中的符号℃修改为中文摄氏度,即:

{
   "date": "30日星期天",
   "high": "高温 30摄氏度",
   "fengli": "<![CDATA[<3级]]>",
   "low": "低温 23摄氏度",
   "fengxiang": "西南风",
   "type": "多云"
}
复制代码

如果使用常规的断点方式手动修改(例如HttpCanary的动态注入)操作起来极为不方便,但是如果使用正则表达式或者字符串匹配来动态替换修改则极为容易。HttpCanary于v2.11.0版本开始正式支持此功能,这篇博客主要讲解如何使用正则匹配功能修改数据。

一、使用限制

正则匹配注入功能只能修改文本类型数据,如果是图片、视频等非文本则不支持,HttpCanary会根据MimeType来判定是否支持。目前支持的MimeType类型如下:

  • application/javascript
  • application/x-www-form-urlencoded
  • application/multipart-formdata
  • application/xml
  • text/html
  • text/plain
  • application/json
  • text/json
  • text/css
  • text/csv
  • text/csv
  • image/svg+xml

如果有其它文本类型的MimeType不在以上范围内,可以反馈给我,后面版本加上。

此外,目前正则匹配注入功能还限制了只适用小于32k的数据量,大数据量暂时尚不支持。

二、使用方式

正则匹配注入需要依赖于静态注入器,它是静态注入器的一种使用方式。首先,首页选定需要注入的请求长按,选择静态注入,打开静态注入编辑页面。

当需要修改请求体或者响应体的时候,点击相应编辑按钮,然后选择规则替换,进入规则编辑器

2.1 字符串匹配替换

字符串匹配替换是指查找目标数据中与指定字符串完全匹配的子字符串并进行替换,例如将所有 “℃” 替换成 “摄氏度”。

测试范例:

https://www.apiopen.top/weatherApi?city=南京
复制代码

我们在规则编辑器中新增一个规则(无需勾选正则表达式):

新建好规则后,可以通过预览对比下注入效果。

规则匹配注入支持多个规则同时应用,例如可以同时将code=200修改为code=400:

创建完成注入器后,我们通过RestClient实际发送请求看下注入效果。

注入效果非常完美!

2.2 正则匹配替换

字符串匹配替换虽然能够解决绝大多数问题,但是很明显仍然不够灵活。

比如说,我希望将下方数据中的fengxiang值 “西南风” 替换为 “自然风”,但是原始请求结果中不一定是 “西南风”,也可能是 “东北风”、“东风”、“西风”等等风。这种情况除非枚举,否则很难做到完美替换。这时候就是正则表达式上场的时候了。

{
   "date": "30日星期天",
   "high": "高温 30℃",
   "fengli": "<![CDATA[<3级]]>",
   "low": "低温 23℃",
   "fengxiang": "西南风",
   "type": "多云"
}
复制代码

我们同样在规则编辑器中添加一条规则,不过要勾选上正则表达式。写一个简单的正则表达式来动态匹配“xx风”。

预览效果如下:

完美!

同样的,正则表达式支持使用$1来匹配()内的值进行替换,再次以上面的json数据为例,我希望修改成如下效果:

{
   "date": "30日星期天",
   "high": "30摄氏度 高温",
   "fengli": "<![CDATA[<3级]]>",
   "low": "23摄氏度 低温",
   "fengxiang": "西南风",
   "type": "多云"
}
复制代码

其中 “高温 30℃” 修改为了 “30摄氏度 高温”,“低温 23℃” 修改为了 “23摄氏度 低温”,也就是既将 “℃” 符号修改为 “摄氏度” 又将高低温移动到了后面。

这种情况就可以使用正则表达式的 $和() 来灵活替换,正则如下:

其中第一个括号内的内容使用$1保留,第二个括号内的内容使用$2保留,替换时进行重新组装。效果如下:

最后,使用RestClient实际请求看下效果:

2.3 关于正则表达式

菜鸟教程