일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- E14-20T6S04X00
- 듀얼부팅
- NOR
- wep
- airmon-ng
- 2021-3156
- 초시대
- DOS
- sudo
- 디스크
- 5G
- WPA3
- cmd
- aireplay-ng
- airodump-ng
- Slim3
- WLAN
- 이커시
- 쉘코드
- DDos
- 무선랜
- WPA1
- 반사서버
- aircrack-ng
- NAND
- shellcode
- 보안이 미래다
- WPA-PSK
- 디도스
- 윈도우
- Today
- Total
대학생들을 위한 IT
쉘코드3 :: 이커시 본문
이번 시간에는 취약점이 있는 프로그램을 실행시켰을 때, [계산기]가 실행되게끔 만드는 쉘코드를 만들어 볼 것이다.
이번 취약점이 있는 프로그램에는 [All to Mp3 Converter]가 되시겠다.
All to Mp3 Converter
다른 확장자들을 .mp3 확장자로 바꾸어 주는 프로그램이다.
즉, 필자가 하려는 작업은 [Add] 버튼을 눌러 mp3 확장자로 바꾸려는 파일을 열었을 때, '계산기'가 실행되게 끔 만드는 작업이다.
안티디버깅
[All to Mp3 Converter] 프로그램을 리버싱해서 취약점을 알아보려는 도중 안티디버깅 기술이 걸려있는 걸 확인했다... 이러면 어떻게 Immunity Debugger를 실행시킬 수 있을까 생각해보자!!
이럴 때 사용하는 방법이 [Attach]이다. 디버깅 화면에서 [ctrl + F1]을 누르거나 파일 탭을 누르면 [Attach] 하위 탭이 보일 것이다.
실행중인 프로그램에 해당하는 이름을 찾고 Attach를 누르면
All to Mp3 Immunity Debugger 실행 성공
step over 과정에서 꺼져버리는 프로그램
하지만 이내 프로그램이 멈춰버리고 말았다.
프로그램이 멈추지 않고 계속 실행되는 그 지점을 찾아야 한다.
(복귀 주소 값을 찾아가기 위한 지점까지 값을 만들어 넣어주어야 죽지 않고 리턴 값을 찾아간다!)
그 지점을 찾기 위해 펄 소스로 만들어 진 파일을 Immunity에 계속 Attach 하는 작업을 반복해 준다.
먼저 무료로 제공되는 펄 엔진을 다운 받아 보자. 필자는 베리베리스트로베리를 사용하였다.
cf. (perl 확장자 : .pl)
strawberryperl.com
처음은 넉넉히 10000으로 설정하고 시작해보자!!
펄 소스
소스에서 보면 fuzzer1.pl을 실행시켰을 경우 fuzz1.wav라는 사운드 파일이 만들어지게끔 만들었고, 더미를 0x값 [41] (A) 10000개로 지정하여 실험해 보았다.
10000개의 경우 프로그램이 역시나 죽어버렸고, 다음은 그 반 값인 5000으로 설정하였으나 이래도 죽어 버렸다.
머 노가다로 하나하나 맞춰보는 수밖에 없지요! 노가다 시작합시다...
노가다를 하던 중, EIP 주소 값이 [46366846] 곳을 발견했고, 이 다음 쭉 진행되는 걸 발견했다.
(ESP 값의 Contents 부분이 ASCII "AAAAA..."로 나오지 않고 그림과 같은 값이 나온 이유는 중간에 [https://wiremask.eu/tools/buffer-overflow-pattern-generator/] 사이트의 도움을 받아 처리했기 때문이다.)
저 '46366846'의 값을 [https://wiremask.eu/tools/buffer-overflow-pattern-generator/] 사이트에 들어가 [Find the Offset] 탭에 넣어보면
4128
[4128]이란 오프셋 값이 나오고 4128바이트만큼의 더미 값을 지정해준다면 죽지 않고 계속 실행됨을 의미하기도 한다!!
이제 펄 소스를 수정해서 다시 시도해보자!
fuzz4.wav 열기!
다시 F9를 눌러 진행하는 중..또 다시 프로그램이 죽어버리는 모습을 포착했다... 힘이 너무 빠진다...
이유는 다음의 그림에 나타나 있다.
더미 값이 끝나고 복귀 주소를 [0012F8E4]로 지정해 놓았더니, 스택 주소가 매번 바뀌는 걸 발견했다.
즉 ]0012F8E4]로 복귀하여 명령을 시행해야 하는데 바로 다음에 그 주소 값이 나오지 않으니 자꾸 죽어버리는 것이다...
이를 수정하기 위해서는 항상 고정 주소 값을 받는 구간을 찾아야 할 것같다.
포스팅은 다음에 이어서 해야할 것 같다...
'악성코드' 카테고리의 다른 글
쉘코드4-1 :: 이커시 (1) | 2019.01.20 |
---|---|
쉘코드4 :: 이커시 (0) | 2019.01.20 |
쉘코드3-1 :: 이커시 (Trampoline) (0) | 2019.01.18 |
쉘코드2 :: 이커시 (1) | 2019.01.16 |
쉘코드 :: 이커시 (0) | 2019.01.15 |