cmd_center

oogu ㅣ 2023. 2. 3. 11:50

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

[그림 1-1]

카나리가 없다.

코드를 분석하면 read를 통해 bof가 발생하고, cmd_ip 변수가 ifconfig 문자열과 일치하는지 확인 후 system 함수를 실행한다.

따라서 bof를 통해 dummy + ifconfig + ;/bin/sh 입력하면 ifconfig 명령어 수행 후 /bin/sh을 실행할 것이다.

 

[그림 1-2]

gdb로 분석하여 스택을 그리면 [그림 1-2]가 나온다.

[그림 1-3]
[그림 1-4]

성공

 

사용자의 입력을 적절한 검사 없이 명령어를 사용할 때 발생하는 Command Injection이다.

이런한 취약점을 막으려면 입력 값에 대해 메타 문자의 유무를 철저히 검사해야 합니다. 그리고 꼭 필요한 상황이 아니라면 system과 같은 성격의 함수를 사용하지 않으려 해야 합니다.

'Dreamhack - pwnable' 카테고리의 다른 글

master_canary  (1) 2023.02.15
seccomp  (0) 2023.02.13
sint  (0) 2023.02.03
tcache_dup2  (0) 2023.02.01
tcache_dup  (0) 2023.02.01