Hackthebox bagel.dll 代码审计

利用ilspy将bagel.dll打开

关于此目录有可以说的内容

目录解析

最上方的bagel是组装名字(assemble name)

bagel_server 是命令空间(namespace)

下一级分支是类如File,Base,Handler,Orders等(class)

反序列化导致的命令执行漏洞代码审计思路

 首先看主程序Bagel

1.通过明显的英语翻译可以看到main函数执行了两个函数一个是initialzieserver()和startserver(),初始化服务和开启服务 服务为wsserver(websocket)

值得关注的是初始化服务中存在MessageReceived(),根据下方关于messagerecevied函数的设计,可以知道此函数利用了handler类中的deserialize方法和serialize方法(反序列化函数)

而此反序列化函数获取到的内容是json格式的内容。

因此跳转到handlerle类中看deserialize函数是否被重写

Handler类

可疑点

1.看到存在typenamehandling=4的设置 

2.反序列化的语句是JsonConvert.DeserializeObject<Base>(json,val);

反序列化的对象是从Base类获取的key-value值

观察Base类

关注点:

1.Base类继承于Orders类,因此继承父类的所有公共函数(public函数)

2.userid和session都是私有成员,且session为Unauthorized

观察Orders类

提炼:

1.orders类存在三个私有成员filename、order_info和new一个file类

2.存在三个公有函数RemoveOrder、WriteOrder、ReadOrder

其中Readorder读取文件内容存在目录路径过滤

writeOrder函数使用get时直接返回writefile内容

RemoveOrder函数仅仅设置了getter、setter

Order类内new了一个FIle类,因此可以使用File类设置的函数

观察File类

提炼:

1.存在两个类为ReadFile和WriteFile

调用readcontent和writecontent函数进行读写操作

 

因此我们可以确定一个路径,如下图

 图片来源:0xdf 师傅

 

需要注意的是使用getter时是不需要参数的情况下,如果调用setter就是传了一个参数才会调用

 

posted @ 2024-07-02 20:02  lisenMiller  阅读(15)  评论(0编辑  收藏  举报