知識點(diǎn):
1、利用 Join the Rippe 的 ssh2john 破解SSH私鑰
2、通過簡單的代碼審計C語言程序來溢出提權(quán)
環(huán)境:
靶場
系統(tǒng):Linux
任務(wù):拿到2個flag
靶場IP地址:192.168.199.138
攻擊機(jī)
系統(tǒng):kali
地址:192.168.199.249
信息收集
拿到靶場之后使用nmap掃描一下開放端口服務(wù)

通過上面掃描結(jié)果,我們可以看到開發(fā)了22(ssh)、80(thhp)、31337(http)三個端口,其中80、31337都是web服務(wù)。
首先80端口的web頁面
http://192.168.199.138

頁面上沒有其他的內(nèi)容,只是一個nginx容器搭建的web頁面,先掃掃它的目錄:

沒有什么特別的目錄和文件,無法從80端口進(jìn)行突破,換另一個端口31337

訪問web后發(fā)現(xiàn)是由apache搭建的網(wǎng)站,我們繼續(xù)使用工具對網(wǎng)站目錄進(jìn)行掃描

發(fā)現(xiàn)幾個文件
http://192.168.199.138:31337/.bash_history (CODE:200|SIZE:219) http://192.168.199.138:31337/.bashrc (CODE:200|SIZE:3526) http://192.168.199.138:31337/.profile (CODE:200|SIZE:675) http://192.168.199.138:31337/.ssh (CODE:200|SIZE:43) http://192.168.199.138:31337/robots.txt (CODE:200|SIZE:70)訪問/robots.txt 后發(fā)現(xiàn),也是上面掃描出來的文件內(nèi)容

打開/taxes/

獲得第一個falg
在掃描的結(jié)果中,有一個.ssh的文件引起我的注意,訪問后頁面上回顯了ssh連接的私鑰和公鑰:

id_rsa(私鑰)、authorized_keys(公鑰,認(rèn)證密鑰)id_rsa.pub(公鑰),訪問以下文件可以把它們下載到本地:

下載到本地后查看公鑰發(fā)現(xiàn)用戶為simon

嘗試使用私鑰(id_rsa)登陸ssh
ssh -i id_rsa simon@192.168.199.138

這個時候發(fā)現(xiàn)登陸不上,原因是因?yàn)槊艽a不對,接下來使用ssh2john破解id_rsa(私鑰)
首先查看ssh2john文件路徑
locate ssh2john

/usr/share/john/ssh2john.py
然后把ssh2john.py復(fù)制到當(dāng)前路進(jìn)行,接下來就利用ssh2john把id_rsa(私鑰)轉(zhuǎn)換成john可識別hash文件
python ssh2john.py id_rsa > key

最后使用john the Ripper來破解key文件
john key

密碼為:starwars

拿到密碼之后進(jìn)行ssh連接
chmod 700 id_rsa
ssh -i id_rsa simon@192.168.199.138
user:simon
pass:starwars

登陸成功之后,我們切換到root目錄下發(fā)現(xiàn)flag.txt但是沒有權(quán)限查看

接一下就是重要的時刻了。
提權(quán)
(這部分我是不會的。。。。)
我們先來查找一下哪些文件是root權(quán)限的
find / -perm -4000 2>/dev/null
注釋:
find / 從根目錄查找
-perm -4000 具有執(zhí)行權(quán)限的文件
2>/dev/null 避免輸出錯誤

通過搜索 root 權(quán)限的文件我們可以查看到 read_message ,是不是好像在哪里見過,對,就是在/root目錄下的read_message.c文件!通過查看文件發(fā)現(xiàn)是一段由c語言編寫的程序
cat read_message.c


通過代碼審計得到了flag2為:flag2{use_the_source_luke},其中代碼的意思就是:使用 strncmp函數(shù)來比較輸入的內(nèi)容數(shù)組,authorized(Simon)而且字符為5,第三個參數(shù)buf是數(shù)組,也就是說最大字符不能超過20,如果等于authorized(Simon)并且字符不超過authorized(Simon)那么printf打印出以下內(nèi)容

不過輸不等于authorized,則printf輸出的內(nèi)容是:

通過代碼審計,buf不能超過20個字符。超過了就可以利用execve函數(shù)來讓我們進(jìn)行溢出得到root權(quán)限了,具體輸入正確的Simon然后后面隨便輸入字符超過20個字符我們就可以進(jìn)入到program 目錄,我們可以替換為 /bin/sh
Simon000000000000000/bin/sh


參考大佬的文章