0
点赞
收藏
分享

微信扫一扫

App托管服务分发平台 index-uplog.php 文件上传致RCE漏洞复现

码农K 2024-06-26 阅读 26

一、背景

Allow List 是白名单,请求的接口如果在白名单里,就被允许。

Block List 是黑名单,请求的接口如果在黑名单里,就被拒绝。

黑白名单是可以一起启用的,优先黑名单。

二、白名单 Allow List

在这里插入图片描述

1、新增白名单接口

在这里插入图片描述

处理动作可以是Drop connection, 也可以是Return 403 response。

在这里插入图片描述

在这里插入图片描述

2、验证结果

请求的接口不在白名单里,报错见下:
在这里插入图片描述

上面设置的是Drop connection,,如果白名单处理的动作换成Return 403 response,报错将变成如下:
在这里插入图片描述

三、黑名单 Block List

在这里插入图片描述

1、新增黑名单

在这里插入图片描述
在这里插入图片描述
接下来,我们将访问接口http://192.168.10.19:9039/api/v1/work/workId/1/detail。

2、验证结果

在这里插入图片描述

四、总结

黑名单启用的情况下,白名单也启用,访问某个接口,会发生什么呢?

这里把测试验证结果总结一下:

匹配白名单匹配黑名单结果
黑名单生效,Tags = Block List,请求被拒
请求正常
白名单生效,Tags = Allow List,请求被拒
黑名单生效,Tags = Block List (同只匹配黑名单一样),请求被拒

所以它的逻辑是:

先判断是否匹配黑名单,如果请求接口在黑名单里,则请求被拒。

再判断是否匹配白名单,如果不在白名单里,则请求也被拒;反之,请求正常通过。

1、实现自己的黑白名单

在日常编程中,我们也会需要或这或那的黑白名单。

比如用户ID、学校ID、IP地址、设备编号等, 以此实现不同粒度的黑白名单。

建议你也像这样配置两个名单,黑名单和白名单,黑名单优先于白名单。

再加上黑白名单的开关变量。

如此设计,适应灵活的业务需求变化。

2、伪代码

 Integer schoolId

// 黑名单
if (commonConfig.getEnabledBlack()) {
     if (StringUtils.isNotEmpty(schoolIdBlackList) && schoolIdBlackList.contains(schoolId.toString())) {
        // 在黑名单里, 返回报错
         throw new BizException("学校在黑名单里");
     }
 }

// 白名单
if (commonConfig.getEnabledWhite()) {
     if (StringUtils.isEmpty(schoolIdWhiteList)) {
         throw new BizException("学校不在白名单里");
     }
     if (!schoolIdWhiteList.contains(schoolId.toString())) {
        // 不在白名单里, 返回报错
         throw new BizException("学校不在白名单里");
     }
 } 

附录

Charles抓包工具系列文章(一)-- Compose 拼接http请求
Charles抓包工具系列文章(二)-- Repeat 回放http请求
Charles抓包工具系列文章(三)-- 接口映射工具(Map Remote和Map Local)
Charles抓包工具系列文章(四)-- Rewrite 重写工具
Charles抓包工具系列文章(五)-- DNS spoofing (DNS域名伪装)
Charles抓包工具系列文章(六)-- Block List 和 Allow List (黑白名单)

举报

相关推荐

0 条评论