System Hacking (pwnable)/HackCTF Write-up 5

[hackCTF] wishlist ( write-up )

Analysisvoid __fastcall __noreturn main(__int64 a1, char **a2, char **a3) { int select; // eax ​ setup(); while ( 1 ) { menu(); select = read_str(); switch ( select ) { case '2': show(); break; case '3': delete(); break; case '1': add(); break; } } }분석하기는 어렵지 않다.프로그램 내부에는 크개 3가지의 함수가 있다. add()_int64 add() { int index; // ebx ​ index = global_index; ptr[index] = malloc(24uLL); printf("wishlist: "..

[hackCTF] babyheap ( write-up )

재밌는 fastbin dup into stack 문제이다.빡센 특징이 한가지가 있다.그건 바로 malloc이 6번까지밖에 안된다는것이다.- 그래서 malloc free해서 unsorted bin leak은 힘들다.- malloc hook을 덮어도 다시 malloc 할 수가 없어서 다른방법으로 malloc을 해야 한다.그래서 show함수에 있는 oob 취약점으로 leak 해야한다. show함수에 있는 oob 취약점과 특별한 방법으로 malloc해서 풀면 된다.여기서 오늘 알아가는건, free할때 (dubble free 등) 오류가 나면 내부 루틴에 의해 malloc이 된다는것이다. 간단한 fastbin dup into stack이라 딱히 설명할건 없고, 그냥 익스코드 남기고 간당!12345678910111..

[HackCTF] SysROP ( write-up )

간단간단한 ROP 문제이다.특이한 점으로는 read는 있는데 출력함수가 없어서 leak을 못한다.그 대신 함수내에서 여러 gadget을 주는데, 요걸로 execve("/bin/sh",0,0) syscall하면 된다.더 특이한 점은 int 0x80을 안줘서 syscall도 못한다. 그래서 read함수 내의 syscall을 이용하면 된다!read함수 내에 syscall이 있는것을 볼 수 있다. 함수 끝에 1byte는 항상 일정하다.따라서, read함수에 got에 1byte overwrite로 \x5e(syscall)을 덮어 syscall을 호출하면 된다. 익스코드는 다음과 같다.1234567891011121314151617181920212223242526272829303132333435363738394041..

[HackCTF] Unexploitable_2 ( write-up )

유사 트릭(?) 문제이다! 일단 main 함수이다.12345678910int __cdecl main(int argc, const char **argv, const char **envp){ char s; // [rsp+0h] [rbp-10h] setvbuf(_bss_start, 0LL, 2, 0LL); setvbuf(stdin, 0LL, 2, 0LL); fwrite("Hard RTL ha? You don't even have fflush@dynstr!\n", 1uLL, 0x30uLL, _bss_start); fgets(&s, 64, stdin); return 0;}Colored by Color Scriptercs누가봐도 오버플로우로 rop하면 되는 문제이다.하지만 마땅한 출력함수가 없다. fwrite를 사..