Pwnable
ChildHeap (double free, stdout leak)
stdout을 이용하여 leak이 필요한 문제이다. Writeup File information Code Main int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { int v3; // [rsp+Ch] [rbp-4h] Init(*(_QWORD *)&argc, argv, envp); while ( 1 ) { while ( 1 ) { menu(); v3 = input_number(); if ( v3 != 1 ) break; Malloc(); } if ( v3 != 2 ) exit(0); Free(); } } Main함수는 다음과 같은 역할을 한다. menu 함수 호출 input_number로 입력을 받아 입력에 따라 다음..
Adult_FSB (64bit fsb, exit)
exit함수 내부적으로 free 호출하는 것에 대한 글을 쉽게 찾아서 쉽게? 풀었던 것 같다. Writeup File information Code Main int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { signed int i; // [rsp+Ch] [rbp-144h] char buf; // [rsp+10h] [rbp-140h] unsigned __int64 v5; // [rsp+148h] [rbp-8h] v5 = __readfsqword(0x28u); Init(*(_QWORD *)&argc, argv, envp); for ( i = 0; i > 16) & 0xffff one_gadget_high = (one..
ChildFSB (64bit fsb)
원래 풀려던 방법으로는 실패해서 살짝 다르게 풀어보았는데 생각대로 한 번에 풀려서 다행이었다. Writeup File information Code Main int __cdecl main(int argc, const char **argv, const char **envp) { char buf; // [rsp+0h] [rbp-20h] unsigned __int64 v5; // [rsp+18h] [rbp-8h] v5 = __readfsqword(0x28u); Init(); puts("hello"); read(0, &buf, 25uLL); printf(&buf, &buf); return 0; } Main함수의 역할은 다음과 같다. read함수로 buf에 최대 25만큼 입력한다. printf함수로 buf를 ..
babyfsb (64bit fsb)
Writeup File information Code Main int __cdecl main(int argc, const char **argv, const char **envp) { char buf; // [rsp+0h] [rbp-40h] unsigned __int64 v5; // [rsp+38h] [rbp-8h] v5 = __readfsqword(0x28u); setvbuf(_bss_start, 0LL, 2, 0LL); puts("hello"); read(0, &buf, 0x40uLL); printf(&buf, &buf); return 0; } Main함수의 역할은 다음과 같다. read함수로 buf에 최대 64만큼 입력한다. printf함수로 buf를 출력한다 (fsb 발생) Exploit 이 문..
you_are_silver (64bit fsb)
64bit 환경에서의 fsb를 이용하는 문제이다. Writeup File information Code Main int __cdecl main(int argc, const char **argv, const char **envp) { char s; // [rsp+0h] [rbp-30h] int v5; // [rsp+28h] [rbp-8h] unsigned int v6; // [rsp+2Ch] [rbp-4h] setvbuf(stdout, 0LL, 2, 0LL); v6 = 50; puts("Please enter your name"); fgets(&s, 46, stdin); printf(&s, 46LL); v5 = get_tier(v6); printf((const char *)v5); return 0; }..
hacknote
Writeup File information Code 함수명들은 따로 설정한 것입니다. Main void __cdecl __noreturn main() { int v0; // eax char buf; // [esp+8h] [ebp-10h] unsigned int v2; // [esp+Ch] [ebp-Ch] v2 = __readgsdword(0x14u); setvbuf(stdout, 0, 2, 0); setvbuf(stdin, 0, 2, 0); while ( 1 ) { while ( 1 ) { menu(); read(0, &buf, 4u); v0 = atoi(&buf); if ( v0 != 2 ) break; Delete(); } if ( v0 > 2 ) { if ( v0 == 3 ) { Print()..