前言
這次練習的靶機是vulnhub平臺下的DC系列靶機第二臺,下載地址為https://www.vulnhub.com/entry/dc-2,311/,該靶機的難度系數為簡單,和DC1一樣,總共有五個flag,這次虛擬機的配置采用更為簡單的一種配置方法,
虛擬機配置
這次采用的網路連接模式依然是NAT模式,為了避免掃描到其他物理主機,在匯入虛擬機后,右擊DC-2靶機,然后選中配置,依次點擊網路配置->NAT模式->高級->生成,然后確認即可,

收集資訊
nmap -sn --min-parallelism 200 --min-hostgroup 256 192.168.119.0/24
-sn 代表存活主機掃描,不進行埠測探,
–min-parallelism 代表調整探測報文的并行度,也就是在掃描同一臺主機時會發送很多個探測資料包,這個引數指定的數即nmap一次至少要發多少個資料包,
–min-hostgroup 代表調整并行掃描組的大小,也就是一次性同時對多少臺主機進行掃描,
更詳細內容可以參考:https://zhuanlan.zhihu.com/p/322244582,關于nmap的一些性能引數的學習,

通過nmap尋找到靶機的地址為192.168.119.127,下面就對靶機更加詳細的掃描,
nmap -A -sV -p- --min-parallelism 200 192.168.119.127
-A 代表綜合性掃描,能收集很多主要的資訊
-sV 代表掃主要的服務資訊
-p- 引數p是指定埠,后面的
-代表所有埠,

掃描出了http服務與ssh服務,其中ssh服務的埠改成了7744,
修改hosts檔案
用瀏覽器打開網站,看看有什么web層面的漏洞沒有,在瀏覽器地址欄輸入 http://192.168.119.127,

剛剛輸入的是個IP,現在變成了域名,還有提示說不能建立到服務器dc-2的連接,這個應該在服務器上做了配置,將IP強制轉換成域名,這種情況在實戰中也會經常遇到,在一個服務器中有多個站點的情況下往往會禁止IP來訪問服務器,這里無法訪問網站的原因是DNS服務器無法決議這個域名,所以我們需要修改hosts檔案內容,使域名dc-2對應IP 192.168.119.127,
域名決議的流程是:
- 首先瀏覽器會讀取快取中是否有指定域名對應的IP,如果有則決議結束,
- 如果快取中沒有讀到指定域名,則在hosts檔案中尋找有無指定的域名資訊,如果有則決議結束,
- 如果hosts中沒有則訪問DNS服務器,在DNS服務器中尋找域名對應的IP,
更詳細的內容可以參考:https://blog.csdn.net/yanshuanche3765/article/details/82589210,詳解DNS域名決議全程序
首先打開hosts檔案:
vim /etc/hosts
然后寫入:
192.168.119.127 dc-2

保存并退出,然后在器地址欄輸入 http://dc-2即可打開網站了,注意是 http,不是 https,

獲取線索
點擊導航欄上的flag即可獲取到flag1,并且有提示說:平時常用的字典可能會不起作用,你須用到cewl,cewl是一款密碼字典生成工具,它可以從指定的網站爬取到關鍵詞來生成特定的密碼字典,

下面我就就使用cewl爬取dc-2上的資訊,生成一本密碼字典,
cewl dc-2 -w wordlist.txt

生成字典成功,下面我們就獲取該網站上的用戶名, 通過網頁底部的文字 Proudly powered by WordPress得知該網站是 WordPress搭建而成,有一款工具 wpscan是專門針對 WordPress的滲透工具,下面我們就用wpscan來獲取該網站上的用戶名資訊,
wpscan --url dc-2 -e u
-e 代表列舉,也就是列出指定引數的一些資訊,u代表用戶名,這命令的意思就是列舉所有用戶名,

wpsan一共獲取了三個用戶名,把這三個用戶名寫到檔案user.txt中去,以準備暴力破解,
wpscan --url dc-2 -U user.txt -P wordlist.txt
-U 指定用戶名檔案
-P 指定密碼字典檔案

已經成功破解了 jerry和 tom的密碼,分別為:adipiscing,parturient,接下來就登陸網站的后臺,WordPress的默認后臺登陸頁面為 /wp-login.php,
登陸了tom沒發現flag,最終在jerry的管理頁面發現了flag2,

打開這個flag2的連接,看看里面說了什么,

提示的意思為:如果你不能利用WordPress走捷徑,還有另一種方法,希望你發現另一個入口,利用WordPress走捷徑的方法就是修改主題插件中的php檔案,建立webshell,然后提權,這種方式在之前的靶機中有遇到過,這種方法可以參考我之前寫的博文:https://blog.csdn.net/rpsate/article/details/119336355,
這次我們就從另一條路徑入手,另一條路徑指定應該就是ssh了,
通過ssh連接靶機
用剛才獲取的網站后臺賬號嘗試登陸一下ssh,注意埠需要指定為7744(這個埠是前面用nmap掃描出來的),
ssh tom@192.168.119.127 -p 7744

jerry這個賬號沒有登陸成功,經過嘗試tom登陸成功了,登陸的目錄下發現了flag3,但是cat命令用不了,經過測驗可以使用vi讀取該flag3,

繞過rbash
但是發現了tom使用的是rbash,也就是受限制的bash,rbash的功能非常少,所以我們要繞過rbash,這里繞過rbash有兩種方法,下面分別介紹這兩種方法的操作與原理,
利用vi繞過rbash
vi
:set shell=/bin/bash
:shell
export PATH=/bin:/usr/bin:$PATH
因為rbash中執行的命令不能帶 /,所以不能直接執行 /bin/bash,剛好vi中有個命令shell可以呼叫bash,但是該系統中shell默認是指向rbash的,所以我們要通過set使其指向 /bin/bash,然后執行shell呼叫 /bin/bash,這樣就繞過了rbash,
問:那如果vi不能用時,可不可以在rbash中用一個變數指向 /bin/bash,然后再執行這個變數呢?命令如下:
MY_SHELL=/bin/bash
$MY_SHELL
答:不可以,因為該命令還是通過rbash呼叫,即使是將 /藏在變數中,在執行的時候rbash還是會識別到 /,vi能繞過是因為執行 /bin/bash的是vi,而不是rbash,
問:命令export PATH=/bin:/usr/bin:$PATH的作用是什么
在呼叫bash后只能使用簡單的內置命令,更多比較復雜的外部命令是在 /tmp和 /usr/tmp 這兩個檔案夾中的,指定 /tmp和 /usr/tmp 為環境變數后,bash就自動在這兩個目錄里中尋找外部命令,而不用將命令的絕對路徑寫出來,所以這條命令只是讓你執行命令更方便一點,例如:我需要執行whoami命令,不設定環境變數需要輸入 /usr/bin/whoami才能執行,設定環境變數后輸入 whoami即可,
問:什么是內置命令,什么是外部命令?
內置命令是和bash是一體的,在系統啟動是就調入記憶體,而外部命令是以單獨的檔案存盤在指定的目錄中,在需要執行外部命令時,bash會在環境變數的目錄中去尋找,找到后呼叫這個檔案,注意:有一些命令同時會是內置命令和外部命令,這種情況下內置命令只有有簡單的功能,如果要用到更多引數執行更復雜的功能就要呼叫外部命令,可以用 type -a來查看是置命令還是外部命令,
更多詳細內容可參考:https://blog.csdn.net/hidengxin/article/details/84708090,理解Linux內置命令與外部命令
問:外部命令通常存在哪些檔案夾中,怎么分類存放的?
外部命令通常存放在 /sbin,/bin,/usr/bin,/usr/sbin這幾個目錄中,其中/sbin存放的是超級用戶指令,通常是系統管理必備的命令,通常只有root才能執行,/bin存放系統常用指令,一般用戶也能執行,/usr/bin存放的是一些后期安裝的運行腳本,/usr/sbin存放的是用戶安裝的一些系統管理命令,
更多詳細內容可參考:https://blog.csdn.net/qq_28702545/article/details/52577796,/bin、/sbin、/usr/bin和/usr/sbin的簡單區別
利用BASH_CMDS繞過rbash
BASH_CMDS[A]=/bin/bash
A
export PATH=/bin:/usr/bin:$PATH
我在網上看了很多經驗貼都有提到這幾條命令就可繞過rbash的限制,但是沒有看到有那個貼講了原理,于是我在國外某個網站上查到了以下內容:

在bash的內部有一個bash表,這個bash表中有 命令->命令檔案路徑這樣的鍵值對,BASH_CMDS是bash的一個內置陣列,該陣列下標對應命令,值對應命令檔案路徑,當我們將/bin/bash賦值給BASH_CMDS[A]是,那么 A就是一條命令,執行A命令就等于執行了 /bin/bash,所以當你執行A命令是,rbash發現其中沒有 /,所以就會順利的執行,
同理我們也可以指定 ls,whoami等系統命令,當你執行 BASH_CMDS[ls]=/usr/bin/whoami是,你再執行 ls,你會驚奇的發現命令列出現的是用戶名,而不是陳列出目錄,但是要注意的是BASH_CMDS只能改變外部命令的對應關系,對內置命令是無能為力的,
只使用rbash是用容易繞過的,如果與
chroot命令結合使用就會有比較強的限制作用,更多內容可以參考: https://blog.csdn.net/guodongsoft/article/details/52549573
提權
通過find命令尋找具有s權限的檔案,沒有找到,用 sudo -l查看可以用root權限執行的命令,發現sudo不能用,也根據flag3的提示轉換到jerry用戶試試,用之前在web中跑出來的密碼嘗試登陸該賬號,
su jerry
很順利的切換到了jerry賬號,也發現了 /home/jerry目錄下的flag4,提示git?

還是嘗試一下 find -perm -u=s -type f -exec ls -la {} \; 2>/dev/null和 sudo -l,這兩條命令在前面的靶機中幾乎每次都用到,前面講解得很詳細,這里就不做解釋了,
最終通過 sudo -l發現了可以用root權限執行git,

那我們可是使用git提權,因為在git中可以執行shell命令,我們用root權限執行git,然后用git呼叫 /bin/bash即可獲取一個擁有root權限的shell,
sudo git help config
這條命令是查看關于組態檔的幫助檔案,在查看檔案的時候可以執行shell命令,用法與vi,more,less等命令類似,
!/bin/bash
!表示呼叫bash來執行shell命令,

提權成功!獲取最終flag,
cd /root
cat final-flag.txt

總結
該文章重點講解了繞過rbash的方法與原理,
簡述了dns的流程與hosts檔案的作用,
了解的cewl與wpscan的基本用法,
大家可以自己嘗試一下通過WordPress的后臺直接獲取webshell,方法可以參考我之前的文章:https://blog.csdn.net/rpsate/article/details/119336355,
參考文獻
[1] https://blog.csdn.net/hidengxin/article/details/84708090,理解Linux內置命令與外部命令
[2] https://blog.csdn.net/guodongsoft/article/details/52549573,chroot命令
[3] https://blog.csdn.net/qq_28702545/article/details/52577796,/bin、/sbin、/usr/bin和/usr/sbin的簡單區別
[4] https://blog.csdn.net/weixin_44288604/article/details/108032112,vulnhub之DC2靶機
[5] https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html,Bash Variables
[6] https://blog.csdn.net/yanshuanche3765/article/details/82589210,詳解DNS域名決議全程序
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293527.html
標籤:其他
下一篇:安全-萬能密碼漏洞復現
