目前XSS漏洞普遍存在,但是所玩出的花樣招式并不多。希望這這個議題能夠起到拋磚引玉的作用吸引更多的人分享有意思的玩法。
議題介紹一些XSS的基本應用以及進階玩法,比如XSS探測環境,釣魚,攻擊內網這些非常有趣的玩法。讓大家不再僅僅局限于拿個Cookie進后臺。因為一旦Cookie存在HttpOnly屬性或者后臺做了訪問控制等,就沒的玩了 此議題希望能改變目前的這種狀態。
議題前半部分更多是介紹玩法以及玩法的原理,后半部分便是結合實際的例子來給大家演示下這些玩法到底是如何去玩的有多么的有意思。
1.Xss的多種利用方式
1.1 XSS獲取觸發頁面以及Cookie等敏感信息
如果Cookie的關鍵字段沒有使用HttpOnly , 后臺訪問限制等防護手段。
那么攻擊者便可以利用Cookie進入到網站后臺,進一步在后臺發現SQL注入文件上傳等漏洞 拿下WebShell。
什么是關鍵字段?PHP的SESSION等用于驗證身份的Cookie字段。
1.2 利用JavaScript協議來做些有意思的事情
為什么第一個iframe元素里會輸出XSS ? 而第二個iframe元素則不會?
第一個iframe里能顯示h1標簽因為有返回值且不為undefined
問:那我們可以利用這個做些什么?
利用可信任域的XSS來進行釣魚攻擊
1.3 XSS蠕蟲
大概流程圖
通過各種方式讓更多的人觸發到你的XSS,然后使受害者成為攻擊者如何去實現?
如果你用有一枚XSS后,這些將不再是你蠕蟲的障礙。
如何去實現?
這樣的蠕蟲跟CSRF有什么區別?
如果你遇到一個點無需Token等驗證信息即可發表動態的話那么便可以使用CSRF來蠕蟲
案例:時光網前端禮包大放送 XSS+CSRF 各種刷轉發 回復 加關注
該如何去蠕蟲?
1.4 劫持表單
1.它適用于哪些環境?
可被植入XSS代碼的頁面存在表單
擁有網站的控制權限卻解不開用戶密碼
2.該如何去劫持表單?
目前在長短短的xss庫中已擁有這個功能。
使用方法:xss.xform(表單對象,接受地址)
3.表單劫持的原理:
1.先獲得要劫持表單的action,target(為了不影響功能)
2.將當前表單的提交地址替換為我們的地址
3.當表單提交時先提交給我們,然后才提交給原本的地址
好處:在劫持到數據的同時,又不影響功能,可以正常登陸
Sogili XSS庫:http://pujun.li/xss.js
1.5 探測目標環境
有時候為了不盲目攻擊一個目標我們需要去獲得更多信息。比如:Flash版本 Java版本 操作系統 瀏覽器等等信息
1.為什么要這樣去做?
我們該如何去探測到目標的環境?
雖然Navigator對象任何瀏覽器都支持,猶豫不是標準所以有的瀏覽器可能獲取不到某些信息
獲得flash版本 :http://jsbin.com/rukirayuca
獲得java版本 :http://jsbin.com/cabirudale
獲得插件列表 :http://jsbin.com/vejujatuxa
獲得插件列表2:http://jsbin.com/pebirixedo
從UserAgent中又可以看出操作系統以及瀏覽器版本
1.6 XSS的內網應用
1.獲得內網IP:
獲得IP, 猜測下內網的范圍,為以后掃描內網的其他機器做準備。
如何做到瀏覽器獲得內網IP的?
Javascript : window.webkitRTCPeerConnection
WebRTC在firefox上已有在線聊天的例子,雖然他最初不是為方便xss而生的可是他的一些API可以方便我們用XSS去做更多的事情。比如獲得內網IP。
WEBRTC主頁:http://www.webrtc.org/
2.掃描內網機器的開放端口之Web端口:
利用javascript的onload特性來做即可。
2.掃描內網機器的開放端口之服務端口:
利用其他服務的協議以及私有協議來探測,比如FTP協議。
當我們要探測21端口是否開放時便可以使用ftp協議,幾乎所有瀏覽器都支持它。
3.掃描內網機器的Web容器:
利用img的onload,這兒可以發散性思考一下 還有什么可以這樣做?
4.攻擊內網中的其他機器
前提:足夠多的路徑與POC
這樣我們便可以用利用一些cms的漏洞來攻擊內網機器,比如wordpress安裝后默認路徑是/wordpress
那么便可以用之前掃描得到的ip以及開放的端口配合上路徑去發動一些攻擊。
不是所有的漏洞都可以,得是一些可被利用的漏洞才行。比如命令執行,可以執行個反彈shell的命令。
比如getshell getshell后用js去請求驗證一下便可以知道成功否。
引用黑哥PPT中利用st2反彈shell的圖片:
XSS Proxy
1.攻擊者直接訪問后臺時:
2.攻擊者用XSS Proxy訪問后臺時:
5.XSS Proxy的原理
注:JS是客戶端腳本,能觸發你XSS的人,肯定是有權限訪問后臺的人。
2.那些實際案例中的XSS
2.1 案例1:圖蟲網存儲型XSS + CSRF + Phishing 即使有httponly 照樣玩的飛起
2.2 案例2:前程無憂(51job.com) 兩枚存儲型XSS + 蠕蟲 (html標簽外20字符加載js)
圍脖沒人轉發,露臉率不夠高?蠕蟲來幫你。
蠕動時:
如何去蠕蟲?先模擬正常操作走一遍,同時抓包。
轉發微博時抓包:
分析參數值:
Type 4 :代表轉發微博
Noticeid Replyid 代表微博ID
Content 代表轉發的內容
分析完后,便可以把我們要蠕
動的微博ID替換到Noticeid Replyid
然后用js來編寫ajax的代碼,使其蠕動
代碼該如何編寫?
Address為接受請求的地址。
Shuju 為修改后的POST數據包
然后定義一個函數,函數中創建了AJAX對象,并設置好了Content-Type
調用函數傳入地址以及數據包即可POST成功。
達到轉發微博的效果,轉發后別人點開微博,又會中招,傳遞給其他人
2.3 案例3:我是如何通過一個 XSS 探測搜狐內網掃描內網并且蠕動到前臺的!(附帶各種 POC)
Cookie獲取不全(因為有httpOnly) 后臺放在內網,這樣的XSS點你還會繼續下去么?
反正試試又不會懷孕,干嘛不試呢?
Sohu出了自媒體系統,于是我便去測了下XSS,然后得到了以下信息。
從上圖中,我們得到了什么?
url,Ping這個Url發現顯示未知主機,然后便意識到肯定是一臺內網主機。
UserAgent,從UserAgent中看出了是WIN7+Chrome30(如果是存在漏洞的瀏覽器可以直接先弄員工機)
得知到這些信息后對我們有什么用處?起碼我們知道他們的員工是使用的現代瀏覽器了,而不是老掉牙的IE6,現在便可以來大干一場了。
1.獲得內網IP:
最后得到員工內網IP段:10.7.8.1 – 10.7.8.255
可以干什么?
員工段應該是辦公網段可以嘗試一些硬件設備的漏洞,比如TP-link的csrf 修改DNS。等等之類的,發揮自己的想象….
內網XSS中,那些經常方便我們的”通病”:
在內網中有人通過域名訪問,有人通過內網IP訪問。
從上邊的圖中可以看出當有人通過內網IP訪問時,暴露了內網IP以及端口號,收集著為下一步掃描端口做準備。
像sohu這種大公司內網肯定劃分的比較嚴格的,服務器肯都放在一個網段中,所以只需要對 10.10.125.195網段掃描下常開的端口,80 8080 以及暴露的8087。
為什么不多掃描點端口呢?因為掃描太多端口,會導致網頁比較卡 甚至網頁崩潰
掃描內網服務器網段所開放的WEB端口:
可以看到上邊的圖中每個ip都探測了3個端口,onload事件中的端口,也對應了需要探測端口。
運行后的結果:
整理去重后的結果:
得到了內網Web服務器所開放的端口后,我們該干嘛?
收集一些CMS,框架的默認路徑,以及POC,下一步可以嘗試利用POC去反彈shell或Getshell。
比如:命令執行漏洞,例子有:struts2 Thinkphp Elasticsearch CVE-2014-3393 Cisco ASA Software遠程認證繞過漏洞……
引用黑哥PPT中的圖片
把收集到的ip,端口以及路徑集合在一塊去嘗試利用下POC,如下圖:
如果上一步無法進行,那么便可以先試試找到個sql注入,文件上傳漏洞。
如何去做?可以先通過ajax的方式把后臺的一些網頁給爬下來,然后本地渲染找下漏洞可能存在點。
發送了了一個文章URL的ID參數帶單引號和不帶單引號兩個請求。
第二個請求加了個單引號報錯了,當時我以為有注入,高興壞了 后來發現根本就不是注入點。
現在陷入了困境,后臺不存在漏洞,又沒有足夠的路徑以及POC,該怎么辦?
操起老行當,釣魚:
在爬網站后臺的時候特地去爬了下登陸界面,為釣魚做準備。
由于不細致也可能是自己太貪心想多釣到點賬號,沒有設置只出現一次,導致后來被發現。
PPT中的那些例子
獲得flash版本 http://jsbin.com/rukirayuca
獲得java版本 http://jsbin.com/cabirudale
獲得插件列表 http://jsbin.com/vejujatuxa
獲得內網IP http://jsbin.com/riyisavura
掃描內網端口 http://jsbin.com/ziwununivo
掃描WEB容器 http://jsbin.com/piwemaquwa
掃描FTP端口 http://jsbin.com/kulahicide