본문 바로가기

IT/시스템 해킹(System Hacking)

Windows10 BOF 연습

지금까지는 단 한번도 Windows7이상의 환경에서 취약점 분석을 진행해본 적이 없었다.

오랜만에 툴 사용법도 상기시키고 Windows10에서의 pwnable은 어떠한 차이가 있는 지 몸소 느끼기 위해서

취약한 실행파일을 직접 만들어 공격을 진행해보려고 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>;
#include <string.h>;
 
int main() {
    char buf[128];
    FILE * fp;
 
    // getchar();
 
    fp = fopen("data.txt""r");
    fscanf(fp, "%s", buf);
 
    printf("Message : %s\n", buf);
 
    fclose(fp);
 
 
    return 0;
}
 
 
 
cs

 

간단한 BufferOverFlow 취약점이 존재하게끔 프로그램을 작성했다.

해당 프로그램은 파일의 내용을 읽어 콘솔화면에 출력해주는 프로그램이다.

 

사진1. 프로그램 실행예시

 

해당 소스코드를 컴파일시 모든 바이너리 보호기법을 해제하고 컴파일을 진행하였다.

① Stack Canary

② DEP

③ ASLR

④ SafeSEH

 

그 후 BOF취약점을 이용해 EIP를 컨트롤하려고 한다.

 

정확히 "A"*132 + "B"*4 + "C"*4를 파일 내용으로 구성하였을 경우 다음과 같이 EIP 컨트롤이 가능하게 된다.

 

사진2. EIP control

 

그렇다면  EIP도 컨트롤 가능하며 DEP도 걸려있지 않고 버퍼의 공간또한 충분하기에

가장 간단한 방법으로 버퍼에 계산기를 실행시키는 쉘코드를 집어넣고 해당 버퍼로 eip를 변조하는 형태의 

익스플로잇 코드를 작성하였다.

 

 

실제로 익스플로잇 코드가 동작하는지 확인해보자.

쉘코드가 포함된 데이터로 텍스트 파일을 작성 후 

취약한 바이너리를 실행해본 결과

 

 

다음과 같이 계산기가 뜨는 것을 확인할 수 있었다.

 

 

이로써 Windows10에서도 쉘코드의 변형없이(WinExec등 커널함수 주소제외) 그대로 사용할 수 있는 것으로 판단된다.

 

앞으로 Windows10 환경에서의 CVE를 분석하면서 연구를 진행해보겠다.