瑞数WAF保护站点的渗透测试

渗透技巧 10个月前 admin
275 0 0

在一次测试项目中碰到一个站点很奇怪,每次请求的时候在url后面都会跟一个长长的加密字符串,而且请求都是一次性的(或者很短的时效性),不能通过burp的Repeater进行重发,效果如下图所示瑞数WAF保护站点的渗透测试

删除加密参数后重发,出现了瑞数WAF比较常见的特征,即响应码 412 ,和响应包中 以$_ts开头的变量以及一大堆看不懂的长字符串

瑞数WAF保护站点的渗透测试

被瑞数WAF保护站点的特征

1、首次请求网页状态码返回202/412,重发数据包响应码为400或412(删除URL中的加密参数后)

2、禁止F12,出现两个循环 debugger

瑞数WAF保护站点的渗透测试

瑞数WAF保护站点的渗透测试

3、查看Cookie 

瑞数WAF保护站点的渗透测试

HttpOnly 打✔ 的cookie是服务器返回的,一般判断瑞数WAF版本是看客户端生成的Cookie ,在这里就是FSSBBIl1UgzbN7NT的对应的值,m开头,说明这是瑞数VMP版本。

具体如何区分瑞数版本,请查看这篇文章:js逆向思路-区分瑞数vmp/6/5/4/3反爬

二、测试方法

背景 

在某个站注册了两个账号后发现了一个查询接口:/projectaudit/users/queryDetail ,请求数据格式:{“userId”:”xxxxxx”},现在希望测试这个站点有没有越权漏洞。假如没瑞数WAF保护,这个需要分分钟钟就能测完,但是瑞数在中间搞事情,加了很多验签和加密在里头,导致不能重放数据包。

一、hook send 函数,实现数据包重发

首先绕过无限循环的debugger ,在前文提到的2个debugger处,右击鼠标选择一律不在此处暂停,就可以开始调试了。

瑞数WAF保护站点的渗透测试

瑞数WAF保护站点的渗透测试

添加xhr断点,将接口关键词设置为断点参数 

瑞数WAF保护站点的渗透测试


在网页上重新请求该页面,成功拦下  瑞数WAF保护站点的渗透测试

回溯【调用堆栈】找到比较靠后的发包点:send()函数

$_198.withCredentials = $_55,$_198.send($_345),$_139;

$_345 刚好为post请求中的内容 

瑞数WAF保护站点的渗透测试

下面的工作就是hook住这个send函数,实现更改函数后手动发包。

瑞数WAF保护站点的渗透测试

手动修改 $_345 参数的内容,赋值为需要查询的 userid ,放过这个断点,就将篡改的内容发送出去了。但是这种方法太麻烦了,每次都要调试到这个地方,而且需要筛选到这个URL。

二、直接调用XMLHttpRequest

瑞数WAF保护站点的渗透测试

function rsPost(path, bodyData) {    var a, s, u = new window.XMLHttpRequest;    u.open("POST", path, false)    u.setRequestHeader('X-Requested-With''XMLHttpRequest');    u.setRequestHeader("Content-type""application/json");    u.send(bodyData)    if (4 === u.readyState) {        return u.responseText;       }    }

瑞数WAF保护站点的渗透测试

如果请求头中携带了认证信息,还需要手动设置:

u.setRequestHeader("Authorization""Bearer ......);

瑞数WAF保护站点的渗透测试

测试在 /projectaudit/users/queryDetail 接口查询 userId

瑞数WAF保护站点的渗透测试

path = '/projectaudit/users/queryDetail'data = '{"userId":"1691375873224982530"}'rsPost(path,data)


原文始发于微信公众号(KQsec):瑞数WAF保护站点的渗透测试

版权声明:admin 发表于 2023年8月15日 下午6:40。
转载请注明:瑞数WAF保护站点的渗透测试 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...