一、准备文件
二、整体分析
如下图所示,chinaz没有采用MVC框架,所以比较易于分析
可以看到网页主要功能文件直接放到了根目录下,然后 library 目录存了一些类文件,值得注意的是 logs 目录,里面存放着日志文件,但是扩展名为 php,虽然用 .htaccess 防止了 php 的解析
三、任意文件包含+getshll
1. 使用 rips 扫到任意文件包含,如图
虽说是任意文件包含,其实只能读包含扩展名为 php 的文件,虽然在 php5.3.4 以下的版本可以使用 00截断,但是我用的是 5.4。其实之前有注意到日志文件的扩展名为 php,而日志文件的内容很可能是可控的。
暂且不管,先走完流程
2. 在 phpstorm 中分析代码
Ctrl + 右键,跟踪 filter 函数
代码简单易懂,我们以 POST 方式传入 page,使用 filter 过滤参数中的 .
,在末尾拼接 .php ,然后调用 require_once 包含文件,虽然限制了我们使用目录穿越,但是还是可以使用绝对路径绕过。
3. 分析日志文件,尝试写马
使用 Ctrl + Shift + F 全局搜索 logfile.php,观察在哪里写入了日志文件
进入config.php,继续全局搜索 $cfg_logfile
在 common.php 中,继续跟进
找到了写入日志文件的函数为 write_log(),Ctrl + 右键 查看函数调用
在该文件的 loadFile() 函数中找到了调用,loadFile 获取一个参数,如果该参数不是一个文件,则会调用 write_log(),写入日志,而日志内容包含所获取的参数,继续查看 loadFile() 的调用
在 view.php 的 echoContent() 中找到调用,并且观察到 loadFile() 参数的一部分来自于 echoContent 的第一个参数
在 index.php 中找到 echoContent 的调用,经过刚才的分析可知,$data['page']
若不存在,则会被写入日志。而 $data['page']
来自于 $_GET['page']
,filter 函数只过滤了 点,影响不大
访问 /index.php?page=<?php phpinfo(); ?>
,页面报错,并且 <?php phpinfo(); ?> 被写入日志
4. 利用前面的文件包含去解析马儿
POST page=/logs/logfile
,成功解析
四、命令执行
可以看到 seay 扫到很多命令执行漏洞,随便找了一个跟踪
定位到 view.php 的第60行,通过回溯,找到函数的调用顺序:在 index.php 中调用 viwe:echoContent,echoContent 继续调用 view:ParseIf,因为在 echoContent 中传入的参数为 $_GET[‘page’] 所以尝试传入 ?page=xxx 观察变量 $strIf,结果如下
其中xxx为传入的 page,如果传入 1") 可以向前闭合,使用 // 可以注释掉后面的内容,二者中间为 if 的语句,if 恒为真,即可以执行任意命令,payload如下:
?page=1") phpinfo();die();//
使用 die() 命令,可以让程序在第一次执行 eval() 后退出程序,防止命令多次执行,和出现页面不存在的图片(因为我们传入的 page 不存在),影响体验
结果如下
在百度变量覆盖的时候发现了一个师傅的利用方式,在此记录一下
直接盗图了,师傅勿怪(点此去师傅的博客)
五、变量覆盖
观察到多个页面存在如下代码,有变量覆盖的危险,而 $post_data
来自于过滤后的$_POST
,是用户可控的数据
但是我实在没找到利用的方式,最后看了前面说的师傅的博客
如图,在 normaliz.php 中存在 preg_replace(),并且三个参数都可以通过 foreach 获得,所以三个参数皆可控
所以师傅的 payload 如下
POST /action.php
page=normaliz&method=/xxx/e&mail_replacement=phpinfo()&source=xxx
查阅官方文档得知
PHP 5.5.0 起, 传入 “\e” 修饰符的时候,会产生一个 E_DEPRECATED 错误; PHP 7.0.0 起,会产生 E_WARNING 错误,同时 “\e” 也无法起效。
特意准备去下个 php6 来测试一下,结果意外的发现并没有实际存在的6版本
鉴于 5.5 和 7 之间,下了个 5.6 版本的,也成功执行了,但是 7 已经失效,猜测在 7 以下的版本都可以成功执行
六、总结
有位名人曾说过,“不要满足于自己所发现的,还要多研究一下别人的博客,不仅能巩固自己已有的知识,还能学到一些新的知识”
好吧 ~_~,就是我自己说的