Q. 버퍼 오버플로란?
버퍼에 데이터를 쓰는 소프트웨어가 버퍼의 용량을 초과하여 인접한 메모리 위치를 덮어쓸 때 발생하는 비정상적인 현상
[실습 조건 ]
- 아래 C 소스 코드를 컴파일한 바이너리에는 scanf 함수 사용으로 인한 버퍼 오버플로(BOF) 취약점이 존재한다.
- 64비트 리눅스 환경에서 GDB 및 BOF 취약점을 이용하여 Welcome! 메시지가 화면에 출력되도록 하는 과정을 보이는 포스트를 작성하시오.
- 올바른 패스워드를 입력하여 나오는 Welcome! 메시지는 인정하지 않는다.
32비트 환경이나 바이너리도 인정하지 않는다 - 빌드 방법 : gcc -g -o hw hw.c
[hw.c]
#include <stdio.h>
#include <string.h>
void ShowWelcomeMessage (void)
{
puts ("Welcome!");
}
int CheckPassword (void)
{
char aBuffer [32];
printf ("Password: ");
scanf ("%s", aBuffer);
return strcmp (aBuffer, "tltmxpaqhdkstlftmq");
}
int main (int argc, char * argv [])
{
CheckPassword () ? puts ("Access Denied.") : ShowWelcomeMessage ();
return 0;
}
[BoF 예제]
Breakpoint 1, 0x00005555555551b1 in CheckPassword () at hw.c:13
13 scanf ("%s", aBuffer);
(gdb) n
Password: --> 버퍼 오버플로를 발생시키는 패스워드 입력
14 return strcmp (aBuffer, "tltmxpaqhdkstlftmq");
(gdb) continue
Continuing.
Welcome!
Program received signal SIGSEGV, Segmentation fault.
0x00007fffffffdee8 in ?? ()
'보안 > 시스템 보안' 카테고리의 다른 글
주통기 기반 윈도우즈 서버 취약점 점검(W-01, W-02, W-04, W-06) (0) | 2024.12.15 |
---|---|
Privilege Escalation 실습 및 과제 (0) | 2024.10.17 |
Brute Force 기법 중 하나인 패스워드 크렉킹 실습(Password Cracking) (0) | 2024.09.24 |