某CMS从审计到Getshell
2021-12-03 09:47:20 Author: forum.90sec.com(查看原文) 阅读量:155 收藏

0X00

HDHCMS建站系统是目前国内ASP.NET少见的优秀建站管理系统,基于 ASP(点)NET(C#)+ MSSQL的技术开发,同步支持PC与手机网站的建设,后台支持微信公众号的接入。

0X01

逛云悉指纹识别时看到了此CMS,看到历史漏洞只有一个,便有了兴趣(用户量很少)。

1

历史漏洞:

2

漏洞描述: HDHCMS存在逻辑缺陷漏洞。攻击者可利用漏洞通过构造cookie即可直接登入后台,获取敏感信息。

3

0X03

下载源码后打开ilspy反编译BIN目录下的dll文件:

既然知道了漏洞是通过伪造Cookie进入后台,那么直接找后台登录的接口:

4

既然漏洞是伪造Cookie,就不需要验证用户名和密码的正确性,

其中从FunSetSesValFunSetCookies函数的名字能看出主要是在服务端设置Session和Cookie的,点击函数名即可定位到源码位置。

0X04

FunSetSesVal函数如下:

8

FunSetSesVal函数的作用是给HdhAllVar的键SesAdmin设置了一个值DonforYhm,而DonforYhm就是后台登录页面输入的用户名

利用ilspy全局搜索一下发现HdhAllVar的键SesAdmin默认值如下:

5

所以我们构造Cookie:AdminName=admin, 但是admin这个用户名是需要真实存在的。

0X05

FunSetCookies函数如下:

9

FunSetCookies函数会接收4个参数:CookName,CookKey,CookValue,CookExpire,其中CookExpire是固定的700

全局搜索一下前三个参数HdhAllVar.CokAdminSet, HdhAllVar.CokAdminUse, DonforYhm:

public static string CokAdminSet = "AdminCook";
public static string CokAdminUse = "AdminUser";
DonforYhm = HdhCmsFun.FunRequestPost("DonforYhm"); //接收后台登陆POST传过来的用户名

至此Cookie的设置流程就完成了,把两个Cookie整理如下:

AdminName=admin; AdminCook=AdminUser=admin

0X06

这就简单了,利用Chrome浏览器的Console输入下面的命令并回车:

document.cookie="AdminName=admin"
document.cookie="AdminCook=AdminUser=admin"

然后访问default.aspx,就可以进入后台了。

6

0X07

在后台没有找到可以GetShell的地方,但是发现一处任意文件读取,读取到web.config,然后就是简单的低权限日志备份拿shell了。

上哥斯

7

不会玩Markdown的传图。一直提示帖子中不能包含链接。。


文章来源: https://forum.90sec.com/t/topic/1935/1
如有侵权请联系:admin#unsafe.sh