대학생들을 위한 IT

쉘코드2 :: 이커시 본문

악성코드

쉘코드2 :: 이커시

phantomik 2019. 1. 16. 13:12

지난 포스팅에서는 쉘코드에 들어가기 앞서 [지뢰찾기로]로 간단한 연습 포스팅을 올렸었다. 

어제가 연습용인 이유를 다시 간단히 적어보자면 메인함수로 리턴을 해야 하는 값을 강제로 WinExec가 있는 [7C8623AD] 주소로 바꾸어서 한번만 실행 가능하도록 했기 때문. 

오늘은 지난 시간에 이어 제대로 된 쉘코드(이번엔 [계산기])를 작성해보겠다.


쉘코드 작성하기 위한 스택 도식화

필자가 만들고자 하는 쉘코드가 실행하기 위해 건들어야 할 스택부분을 도식화하였다. 이 그림을 참고하여 글을 읽어 내려가 보자.


계산기 실행 코드 Immunity Debugger 실행 메인함수

Immunity Debugger 의 Disassembly 화면이 보인다. 차례대로 "메모리 address, 기계어, 어셈블리, contents" 으로 구성되어 있다.

이중 쉘코드에 필요한 기계어 부분만 복사해 메모장에 붙여 만들었다.
(블록지정된 부분을 다 복사할 경우 메모리부터해서 전체 내용이 다 복사되므로 기계어 부분만 남기고 나머지는 지워주는 수작업 필요)

첫 번째 도식화 시킨 것과 같이 더미 값과 리턴주소와 쉘코드를 붙여 공격 페이로드를 만들어 보겠다.

더미 --> 313233343536373839306162 (12바이트 채우기)

리턴주소 --> 0012FF84

쉘코드 --> 6A0568F4204000FF1500204000


공격 페이로드(익스플로잇) = 더미 + 리턴주소 + 쉘코드  

3132333435363738393061620012FF846A0568F4204000FF1500204000

채워질 스택 부분

Contents 내용 중 "fread" 후(메모리 주소 : 00401047) 공격 페이로드가 블록 처리 된 부분에 들어갈 것이다. 확인해 보자!

fread 후 스택 부분 변화

영롱하게 잘 들어갔다. 이제 쉘코드가 완성이다??!! 실행보자!

프로그램이 죽어 버린 모습

fread 후 신나게 F9를 눌러 진행시켰지만.. 프로그램이 죽어버린 모습을 볼 수 있다. 

눈치 채신 분이 있을 지 모르겠지만 fread 후 스택 부분의 우리가 주의해야 할 부분 "0012FF74" 이후 모습을 살펴보면,
더미 값이 들어간 위 3자리(총 더미 12 바이트 // 스택 한 칸에 4바이트) 다음 자리를 보면 우리가 처음에 넣어주려는 "0012FF84" 값이 거꾸로 들어간 모습을 볼 수 있다. ('프로그램이 죽어 버린 모습' 그림의 EIP 부분을 봐도 된다) 이를 다시 수정해서 실행시켜 보자!

페이로드 수정 : 31323334353637383930616284FF12006A0568F4204000FF1500204000

스택 부분 수정 완료

다시 RETN 부분까지 달려가서 프로그램이 죽는지 확인해 보자!

RETN에서 F7 누르기 전

RETN에서 F7 누르기 후

그림의 메모리 주소가 "0012FF84"로 변경된 걸 확인할 수 있다.

hex dump 값 확인

0012FF8B 부분의 unhandle이 걸려 다시 죽어버린다.

위 : addd.exe 아래 : winexec

이유인 즉슨, 같은 "004020F4" 주소에 addd.exe에서의 헥사 값은 "72 00 00 00 2D 2D 2D 2D"이었지만,
WinExec에서의 헥사 값은 "63 61 6C 63 2E 65 78 65" 값을 가진다. 즉 서로 다른 내용을 품고 있는 것!(이식과정에서 죽어버린다!!)

이식하는 과정 중, 절대 값 주소로 계산하는 과정에서 원하는 주소로의 이동이 이루어지지 않은 것!!

IAT ENTRY 확인

IAT ENTRY를 확인하여, "7C8623AD" 주소를 사용해 이식과정을 다시 진행해본다!(이는 WinExec 실행 주소로 바뀌지 않는 주소)

EBP 기준 기계어 코드 소스

기계어코드 추출

이제 다른 환경에서도 작동할 수 있게끔 다시 정리를 해보자!

더미 : 313233343536373839306162

리턴주소 --> 0012FF84

쉘코드 --> 36C645FB6336C645FC6136C645FD6836C645FE6336C645FF006A05368D45FB50BEAD23867CFFD6

최종 공격 페이드

31323334353637383930616284FF120036C645FB6336C645FC6136C645FD6C36C645FE6336C645FF006A05368D45FB50BEAD23867CFFD6

질문이 있다면 댓글에 남겨놓으시라

'악성코드' 카테고리의 다른 글

쉘코드4-1 :: 이커시  (1) 2019.01.20
쉘코드4 :: 이커시  (0) 2019.01.20
쉘코드3-1 :: 이커시 (Trampoline)  (0) 2019.01.18
쉘코드3 :: 이커시  (0) 2019.01.17
쉘코드 :: 이커시  (0) 2019.01.15
Comments