DedeCMS-5.5.7-sp2
版权申明:本文为原创文章,转载请注明原文出处
DedeCMS-5.5.7-sp2
代码审计第0篇之DedeCMS-5.5.7-sp2
目标一:登录admin账号
step1: 注册新账号
注册新账号查看代码执行过程,找到漏洞点
如图所示,登录我们创建好的111用户,查看浏览器缓存的cookie信息

由此可知我们如果要登录admin账号,就要构造DedeUserID和DedeUserUserID__ckmd5的cookie值。
同时观察到此处的我们新注册的账号userID为2,由此猜测admin账号的userID为1,但我们无法得知DedeUserID_ckMd5的值。

step2: 获取1的chMd5值
查看index.php源码有关于cookie的存放

如图所示,在此处对uid的值是否为空进行了条件跳转,若uid为空直接检查是否为登录状态;若不为空,系统会先认为为登录态,再检查参数last_vid,若为空就将uid赋值给last_vid,然后将last_vid放入cookie

查看cookie函数的放置和检查函数,如图所示,此处的Putcookie我们可以猜测就是将原value和value__ckMd5的cookie存入

而Getcookie也就是检查这两个值

而上面我们分析到若uid不为空而lastvid为空我们就可以得到该uid的ckmd5值,因此此处我们将uid设为1,为lastvid设为空

此处的last_vid__ckmd5就是1的ckmd5值,因此我们设置uid和对应的ckmd5查看是否能成功登录,如图所示,登陆成功

目标二:修改任意目标用户密码
step1: 分析修改密码代码
首先确定修改密码的代码部分

如图所示在修改密码之前对传入的的key的值进行了比较,现在查看row['pwd']是什么

row是__ pwd_tmp表中对应mid行的信息,也就是如果我们能获取我们要修改的id及其在 __pwd_tmp表中的pwd值则可对密码进行更新
现在寻找在 __pwd_tmp表中添加pwd的代码,如下所示,首先随机生成了randval,然后对其散列,最后插入到表中,同时下面还进行了跳转,跳转的域名就包含着存在 __pwd_tmp中的密码,由此如果我们想办法进入到该函数则可以成功在__member修改密码

step2: 找到入口
在sn函数中我们可以成功看到我们想要的函数

而sn算法是在如下情况下使用

由此整个流程是 dopost=safequestion - - -> sn - - - > newmail - - - > 获取修改密码链接
根据分析代码我们构造如下cookie(该攻击前提是要修改密码的用户没有设置安全问题,没有设置安全问题的情况下safequestion为0,safeanswer为空):
最后访问生成的链接

目标三: 一句话木马
step1: 找到漏洞代码
查找上传文件时可能发生的漏洞,在此处是对文件名进行的正则匹配,但是无法避免.jpg.php类型,以此看来该处为漏洞入口

全局查找使用该文件的位置,最终锁定了dede/templets/article_add.htm文件内容中有使用该方法的位置,这里的selectImage函数就是用了上面的正则匹配方式上传文件

根据该路径我们确定是管理员后端的增加文章界面,根据html文件内容我们确定了上传文件的地方

通过本地上传文件之后可以看到上传后的路径

step2: 使用burpsuite上传php文件
找到漏洞入口就可以上传文件了,确定上传

最后打开该文件

可采用类似方式上传一句话木马文件掌握控制权
DedeCMS-5.5.7-sp2
install_url to use ShareThis. Please set it in _config.yml.



