kali的IP:192.168.56.102                                         靶機IP:192.168.56.111

主機發現

使用nmap進行主機發現

這里發現192.168.56.111為新增加的IP,即為靶機IP。

端口掃描

主要使用你馬屁、進行存活端口探測,包括端口服務的版本,操作系統等信息

這里看到靶機開放了22,23,80端口。

22端口運行著ssh服務,23端口運行著一個不常見服務,但是23端口可以使nc鏈接,80端口運行著http服務。

web滲透

使用瀏覽器查看80端口的http服務,發現是一個登陸界面。

針對登錄界面,首先使用弱口令進行嘗試,發現賬號密碼為admin/admin123,同時也可以使用sql注入萬能語句進行密碼繞過,這里萬能語句的位置在username欄中,也可以使用hydra進行爆破,hydra對不存在驗證碼的http表單爆破很有效果。

這里首先找到我們提交的數據會提交到哪一個文件中。

第二要找到用戶數據的提交格式及內容

第三要找到驗證失敗的返回相應特征。

這些信息足夠hydra進行爆破和判斷,使用hydra進行爆破。

這里也成功得到密碼。進入后臺并沒有發現可以直接利用的漏洞點。

查看也面源代碼,發現了一個全新的參數地址

是一個可以進行文件上傳的站點。上傳一個webshell,這里使用kali自帶的webshell

上傳完成后,在頁面源代碼中發現了上傳的地址,

對webshell進行訪問觸發。

成功觸發。

提權

信息收集

信息 收集并沒有有用的信息,發現我們有root目錄的訪問權限,并發現了一個名字為win的文件,

文件里面使用wine運行了一套windows的可執行程序,Wine是一個可在Linux和其他操作系統上運行Windows應用程序的兼容層。它模擬所有必要的Windows環境和API,使得Windows應用程序可以在Linux中運行,而不需要任何Windows環境或虛擬機。簡單來說,wine可以將windows可執行程序的語句逐條翻譯成linux系統可以理解的語句。

在win文件中提到的路徑中我們發現了兩個文件

將文件下載下來放到windows環境中運行。

緩沖區溢出的利用

首先查看系統進程,

運行exe程序以后,再次查看進程,發現系統開啟了23端口,

程序運行結果如圖:

使用kali連接端口發生發送數據,這里手動發送數據太慢了,直接使用腳本,

這里使用2000個字符導致報錯,使用msf-pattern_create生成一個2000個長度的字符串用于定位。理論上這個方法可行,但是實際上不知道為什么這里的字符串傳不進去。我們換一種思路,首先生成1800個0,再用msf-pattern_create生成一個200長度的字符串,再進行查找。具體如下

經過調整以后成功獲得偏移量,偏移量為1902,也就是說,1903,1904,1905,1906為EIP的位置,這里調整exp進行驗證。

這里看到eip全部被B覆蓋,接下來要查詢壞字符。

可以使用github上面的腳本badchars進行生成所有字符,在用腳本傳進去,傳到我們要放置語句的地方,通過返回結果查看是否存在壞字符。

從00到ff之間有間隔,所以肯定有壞字符。經過測試,所有的壞字符為\x4d\x4f\x5f\x79\x7e\x7f。eip寄存器里面放著下一條語句執行的寄存器的位置,我們通過輸入字符發現緩沖去溢出以后字符會先覆蓋eip,后覆蓋esp。所以我們能寫入語句的位置使esp,所以在eip寄存器中要實現將程序跳轉到esp中,但是eip中只能存放下一條語句的位置,所以我們要在程序中找到一條這樣的語句,語句的功能使跳轉到esp中,將這條語句的地址寫入eip中,當程序進入eip以后就會執行跳轉指令,跳到esp中執行惡意語句。明確思路以后就要進行操作。在匯編語言中語句jmp esp表示跳轉到esp中,但是寄存器里面不可能存放一條語句,他存放的是語句的操作碼,操作碼都是固定的,可以直接搜索得到,也可以使用工具msf-nasm_shell實現,msf-nasm_shell是Metasploit框架中包含的一個交互式的匯編語言環境。

得到機器碼以后要在程序中找到存在跳轉語句的地方。在調試器左下角調用python腳本顯示所有模塊,

選擇其中false多的選項,這里使用第二個,再在這個模塊里面搜索jmp esp指令。

這里有兩個地址里面的內容都是jmp esp,選擇一個地址放在eip的位置上。繼續構造payload,使用msfvenom生成paypoad。

-p指定生成payload的類型,-f c是指定payload以c語言源碼的形式輸出出來,-b指定的是payload中不能出現的字符,這里都是剛剛發現的壞字符,不管在什么語言里面,\x00都表示截斷,是壞字符,最后一個參數的意思表示如果程序崩潰,就以線程的形式結束程序。構造如圖所示的最終利用腳本。

這里eip中 地址和我們尋找的地址相反,這里存在一個小端顯示的問題,可以自己搜索,在加payload之前要添加幾個字符表示劃過,不要讓payload和eip挨得太近,防止出現問題。注意要將IP地址修改為靶機地址,我們不是要滲透我們的windows機器。這里進行連接測試。

成功反彈shell,但是看起來是windows的shell,使用dir查看發現就是linux的根目錄。

其實這里是將win的z盤映射在了linux的根目錄中,至此靶機滲透測試結束。