dreamhack(23)
-
[Dreamhack] baby-bof
#include #include #include #include #include #include #include void proc_init () { setvbuf (stdin, 0, 2, 0); setvbuf (stdout, 0, 2, 0); setvbuf (stderr, 0, 2, 0); } void win () { char flag[100] = {0,}; int fd; puts ("You mustn't be here! It's a vulnerability!"); fd = open ("./flag", O_RDONLY); read(fd, flag, 0x60); puts(flag); exit(0); } long count; long value; long idx = 0; int main () { char n..
2023.12.10 -
[ Dreamhack ] __environ
이 문제도 바로 이전에 올린 블로그 내용과 같이 environ ptr을 사용해서 푸는 문제이다. #include #include #include #include #include void sig_handle() { exit(0); } void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); signal(SIGALRM, sig_handle); alarm(5); } void read_file() { char file_buf[4096]; int fd = open("./flag", O_RDONLY); read(fd, file_buf, sizeof(file_buf) - 1); close(fd); } int main() { char buf[1024]; lon..
2023.06.09 -
[ Dreamhack ] environ
#include #include #include #include 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(60); } int main() { char buf[16]; size_t size; long value; void (*jump)(); initialize(); printf("stdout: %p\n", stdout); printf("Size: "); scanf("%ld", &size); printf("Data: "); read(0..
2023.06.09 -
[ Dreamhack ] house_of_spirit
house of spirit은 free함수를 통해 자신이 원하는 임의의 메모리를 해제할 수 있을 때 사용할 수 있는 공격 기법이다. tcache는 속도 등 여러가지 이유로 보안 검사들이 많이 생략되어 있다. 그래서 stack에 실제 tcache 청크와 같은 구조를 가지는 청크를 구성하고 해당 영역을 free하면 stack 영역을 해제하여 tcache에 stack 영역을 넣을 수 있다. 그리고 ptmalloc은 비슷한 크기의 요청이 오면 재사용 한다는 특징이 있다. 이를 통해 stack 주소로 동적 할당을 받을 수 있다. 만약 해당 프로그램에서 동적 할당을 받은 뒤 그 할당받은 주소에 입력을 줄 수 있다면 bof가 발생할 수도 있고 그 프로그램의 지역변수 등을 바꿀 수 있다. 위 코드와 같이 data의 주..
2023.05.28 -
ptmalloc2
ptmalloc은 리눅스에서 사용하는 memory allocator이다. 모든 프로세스는 실행 중에 메모리를 동적으로 할당하고 해제하는 과정이 매우 빈번하게 일어나는데 이 동작을 빠르고 메모리의 낭비 없이 이뤄지도록 하는 역할을 memory allocator이 한다. ptmalloc2 역할 - 메모리 낭비 방지 할당 요청이 발생하면 이전에 해제된 메모리 공간중 비슷한 크기의 메모리 공간이 있는지 탐색, 작은 크기의 요청 발생시 해제된 메모리 공간 중 큰 메모리 공간이 있으면 그 영역을 나눠주기도 한다. - 재사용 빠른 메모리 재사용을 위해 동적할당된 메모리를 해제할 때 tcache 또는 bin이라는 연결리스트에 저장해둠 - 단편화 방지 단편화가 심해지면 각 데이터 사이에 공간이 많아져 메모리 사용의 효율..
2023.05.26 -
[ Dreamhack ] Kind kid list
int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { char password[8]; // [rsp+0h] [rbp-E0h] BYREF __int64 v4; // [rsp+8h] [rbp-D8h] char name[8]; // [rsp+10h] [rbp-D0h] BYREF __int64 v6; // [rsp+18h] [rbp-C8h] char dest[8]; // [rsp+20h] [rbp-C0h] BYREF __int64 v8; // [rsp+28h] [rbp-B8h] char kid_list[132]; // [rsp+30h] [rbp-B0h] BYREF char src[8]; // [rsp+B4h] [rbp-2Ch]..
2023.05.23