OSCP/OSCP Course PDF

9. Working with Exploits

우와해커 2020. 2. 27. 10:34

외부에 공개된 Exploit의 코드를 잘 살펴봐야한다.
root권한 실행을 요구한 후 삭제 등 악성행위를 하는 코드가 존재함.

 

공개 익스플로잇 코드에 대한 몇 가지 신뢰할 수있는 소스가 있습니다.

 

 

9.1 - Searching for Exploits

신뢰할만한 곳
1. Exploit Database
2. SecurityFocus

 

웹 사이트를 접속하여 찾아볼 수 있고 서치스플로잇을 이용해서 콘솔로 explit 코드를 찾을 수 있음
root@kali:~# searchsploit slmail

 

9.2 - Customizing and Fixing Exploits

다양한 개발환경, 운영체제, 소프트웨어 버전과 패치로 인해 explit이 정상 작동안할 가능성이 많음.
더 큰 문제는 많은 익스플로잇들이 한 번의 샷일 수 있다.
즉, 익스플로잇에 실패하면 서비스가 중단되고 다시 시작하거나 머신이 재부 될 때까지

추가 익스플로잇 시도를 수행 할 수 없다.

 

9.2.1 - Setting Up a Development Environment
이러한 이유로 코드에 대한 검토 및 작동에 대한 이해 없이 코드를 실행해서는 안된다.
기존 익스플로잇을 테스트하고 개선하기 위해 운영 체제 버전 및 취약한 소프트웨어 버전과 일치하는

소규모 개발 환경을 설정합니다.
수정된 익스플로잇이 대상 컴퓨터에서 작동 할 것이라고 확신하면 대상을 대상으로 공격을 시작할 수 있습니다.

 

9.2.2 - Dealing with Various Exploit Code Languages
익스플로잇 코드는 다양한 언어로 개발될 수 있는데,
복잡한 것은, C와 C++은 리눅스와 윈도우에서 차이가 있으며 상호 호환이 되지 않는다.

 

9.2.2.1 - Swapping out Shellcode

공개 익스플로잇에는 우리 목적에 맞지 않는 쉘 코드가 있습니다.
계산기를 팝업하는 쉘 코드를 우리의 개발 환경에 맞지 않는 쉘을 바인딩하고, 하드 코딩 된 IP로 쉘을 반전시켜야 한다.

SLMail과 같이 프로그램을 쉽게 디버깅 할 수 있거나 취약점이 다양한 버퍼 크기에 민감하지 않은 경우,

익스플로잇을 위해 쉘 코드를 교체하는 것은 비교적 간단한 작업입니다.

그러나 DEP 및 ASLR을 우회하는 것과 같은 보다 복잡한 익스플로잇의 경우,
쉘 코드를 교체하면 쉘 코드 크기가 변경되고 익스플로잇의 다양한 명령어가 잘못 정렬되어

익스플로잇에 부정적인 영향을 줄 수 있습니다.

 

9.2.2.2 - exploitdb - 643.c

 

예제 코드의 선언문을 보면 알겠지만, 이 코드는 리눅스에서 컴파일 되야함.

root@kali:~/slmail# head 643.c

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>


그러나 일부 코드 중 다음과 같이 우리의 타겟과 상관없는 코드가 존재함(윈도우 익스플로잇)

define retadd "\x9f\x45\x3a\x77" /*win2k server sp4 0x773a459f*/

9.2.2.3 - exploitdb - 646.c

 

아래의 지시문은 이 코드가 Windows 환경에서 컴파일되어야 함을 나타냅니다.
root@kali:~/slmail# head 646.c

#include <string.h>
#include <stdio.h>
#include <winsock2.h>

다행스럽게도 Kali Linux에는 Windows 크로스 컴파일러가 있으며이 작업에 사용할 수있는 mingw가 있습니다.
아직 없으면 다음 명령을 사용하여 Kali Linux에 설치할 수 있습니다.

 

root@kali:~# apt-get install mingw-w64

 

설치되면 mingw cross 컴파일러를 사용하여이 코드를 Windows PE 실행 파일로 컴파일 한 다음
wine을 사용하여 Kali Linux에서 이 실행 파일을 실행할 수 있습니다.


그렇게하기 전에 코드를 검사하겠습니다. 이 익스플로잇은 그대로 작동하지 않을 것입니다.

 

다시 한 번, 관련 없는 리턴 주소 및 관련없는 쉘 코드와 같은 문제는 우리를 방해합니다.
그러나 약간의 디버깅과 마사지를 통해 익스플로잇을 작동시킬 수 있습니다.

 

root@kali:~# cd slmail/

root@kali:~/slmail# i686-w64-mingw32-gcc 646-fixed.c -lws2_32 -o 646.exe
646-fixed.c: In function ‘exploit’:
646-fixed.c:54: warning: assignment from incompatible pointer type

 

root@kali:~/slmail# wine 646.exe 10.11.1.35

[$] SLMail Server POP3 PASSWD Buffer Overflow exploit
[$] by Mad Ivan [ void31337 team ] - http://exploit.void31337.ru
[+] Connecting to 10.11.1.35

 

수정된 익스플로잇 페이로드가 전송되면 새로운 리버스 쉘 페이로드가 실행되고

SLMail 서버에서 리버스 쉘을 다시 얻습니다.

root@kali:~# nc -nlvp 4444
listening on [any] 4444 ...

 

* 추가 TIP: dos2unix

윈도우에서 작성된 파일인 경우 캐리지리턴 등의 불일치 등 으로 인해

리눅스에서 컴파일할 경우 에러가 발생하는 경우가 생김,

=> do2unix <파일명> 을 통해 변경 가능