Information Security
[Dreamhack] basic_exploitation_000 본문
basic_exploitation_000 | 워게임 | Dreamhack
basic_exploitation_000
Description 이 문제는 서버에서 작동하고 있는 서비스(basicexploitation000)의 바이너리와 소스 코드가 주어집니다. 프로그램의 취약점을 찾고 익스플로잇해 셸을 획득한 후, "flag" 파일을 읽으세요. "fla
dreamhack.io
문제 파일
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void alarm_handler() {
puts("TIME OUT");
exit(-1);
}
void initialize() {
setvbuf(stdin, NULL, _IONBF, 0);
setvbuf(stdout, NULL, _IONBF, 0);
signal(SIGALRM, alarm_handler);
alarm(30);
}
int main(int argc, char *argv[]) {
char buf[0x80];
initialize();
printf("buf = (%p)\n", buf);
scanf("%141s", buf);
return 0;
}
코드 분석을 먼저 해보자
0x80 만큰 buf에 사이즈가 할당되어 있으며 initialize() 함수 실행 후 buf의 주소를 출력해준다.
그 뒤 buf를 입력 받는다. initialize() 함수는 30초가 지나면 알람을 보내주고 Time out을 출력해주는 것으로 보인다.
이 코드에서는 buf의 크기가 128바이트로 정해져 있는데 scanf 입력에서 크기를 제한해주고 있지 않아 buffer overflow가 발생 가능하다.
pwn.py 파일에 익스플로잇 파일을 만들어주고 실행시켜주자
현재 링크에 오류가 있어 remote 함수에 오류가 생긴다
pwn 임포트
remote 함수로 원격접속이 가능
code를 132 바이트 - 26바이트는 106바이트
-> 106바이트는 아무 문자나 채우고 RET 전까지 바이트를 채움. buf의 주소값을 32비트 리틀엔디안 패킹 방식으로 넣어줌. interactive를 통해 쉘에 접속
-- 2022.10.04--
접속 성공
참고 블로그
https://velog.io/@silvergun8291/Dreamhack-basicexploitation000
[Dreamhack] basic_exploitation_000
basic_exploitation_000소스코드를 출력해보면scanf("%141s", buf)에서 buf에는 141 Byte 크기의 문자열을 입력받지만, 입력값이 141 Byte를 넘으면 남는 값은 버퍼에 그대로 남게 됩니다.결론적으로 입력 크기에
velog.io
'INTERLUDE > System Hacking' 카테고리의 다른 글
[Dreamhack] shell_basic (0) | 2022.09.29 |
---|---|
[Dreamhack] pwngdb, pwntools 설치 (0) | 2022.09.29 |
BOF 스터디 (0) | 2022.09.20 |
[FTZ] Level 12 (0) | 2021.11.23 |
[FTZ] Level 11 (0) | 2021.11.18 |