扫码领资料
获网安教程
免费&进群
1、环境搭建
项目地址:https://gitee.com/hellokaton/tale.git
导入项目至idea,然后Maven->reload project即可,之后运行Application
2、项目依赖、结构
项目采用Blade框架开发
在Blade中提出 WebHook
,你可以叫它钩子。该组件主要目的是拦截每次请求之前和之后的一些操作,在该项目中也实现了WebHook
判断请求URL开头是否包含ADMIN_URI
以及不是登录请求,如果满足条件将会判断是否登录,没有登录会跳转到登录页面
其中ADMIN_URI
的值为
public static final String ADMIN_URI = "/admin";
Blade框架中构造 /test/../admin/index
无法匹配到 /admin/index
所以也无法绕过
3、代码审计
3.1 任意文件读取
路由:admin/template/content
用户可控参数fileName
filePath直接拼接 filname并未做任何过滤,后续直接通过Files.readAllLines
将文件内容读出
验证:读取pom.xml文件内容
3.2 任意代码文件写入
路由:admin/api/template/save
程序首先获取了一个TemplateParam
对象,其中包含两个可控参数
@Data
public class TemplateParam {
private String fileName;
private String content;
}
在通过StringKit.isBlank(templateParam.getFileName())
来判断fileName
是否为空,如果不为空进入下面的代码逻辑,获取content
并拼接filepath,在进行判断,文件是否存在,不存在则创建文件,后续进行写入操作
验证:修改桌面文件
我们也可以通过修改代码文件,来自己创建一个路由等服务器重启获取系统权限
写入一个不需要登录就能访问的路由
写入成功
系统重启后即可执行命令
3.3 任意文件上传
路由:admin/api/attach/upload
获取文件名并赋值给fname,之后进入getFileKey
方法中,跟进查看具体逻辑
其作用通俗来说就是要上传到哪里去,如果没有/upload/当前日期的文件夹则创立
StringKit.fileExt
中主要是生成文件名,并未对后缀做任何限制
验证:文件不解析,只能打个xss了
4、总结
如有问题,感谢各位师傅指正
5、修复建议
1、使用最新的框架进行搭建
2、安装框架补丁包
来源:https://xz.aliyun.com/t/12489
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权!
学习更多渗透技能!体验靶场实战练习
(hack视频资料及工具)
(部分展示)
往期推荐
原文始发于微信公众号(白帽子左一):Tale博客系统代码审计过程