Summary Unsorted bin attack ROP Analysis login변수의 값이 있으면 rop를 할 수 있다. Exploit Unsorted bin attack으로 login변수에 값을 넣어줄 수 있다. Unsorted bin attack condition 공격자에 의해 Unsorted chunk를 생성 할 수 있어야 합니다. 공격자에 의해 Free chunk 영역에 값을 저장 할 수 있어야 합니다. 공격자에 의해 Free chunk 와 동일한 크기의 Heap 영역을 할당 할 수 있어야 합니다. exploit flow 2개의 Unsorted chunk 할당 첫 번째 free bk 를 타겟-16(64비트 기준)으로 overwrite free 청크 사이즈만큼 다시 할당. 공격 대상 영역에 ma..
Summary Thread Local Storage(TLS) 리눅스는 x86: gs, x86_64: fs 레지스터로 TLS를 관리한다. TLS란 쓰레드를 관리하기 위한 전역변수이며 해당 변수의 0번 째 인덱스에는 TCB(Thread Control Block)의 주소가 저장된다. TCB는 해당 쓰레드를 관리하기 위한 구조체. typedef struct { void *tcb; /* Pointer to the TCB. Not necessarily the thread descriptor used by libpthread. */ dtv_t *dtv; void *self; /* Pointer to the thread descriptor. */ int multiple_threads; int gscope_flag; u..
Summary 1byte overflow UAF로 풀었는데 dup으로 풀 수 있을듯. Analysis puts("[A]llocate Buffer"); puts("[F]ree Buffer"); puts("[B]anner"); puts("[E]xit"); return printf(">> "); 기능은 크게 2개로 나뉜다. Allocate chunk1(32) 할당. buffer에 입력을 받고 len(buffer)만큼 chunk2(mysize) 할당. ( len(buffer)가 16 이상일 경우, 길이가 16 미만이라면 chunk2를 할당하지 않고 chunk1에 기록.) input_buf_len 15: struct chunk1 { int *chunk2 = malloc(buf_len); int dummy; int..
Summary tcache(18.04) challenge Analysis puts("====== Ethereum wallet service ========"); puts("1. Create new wallet"); puts("2. Deposit eth"); puts("3. Withdraw eth"); puts("4. Show all wallets"); puts("5. exit"); Wallet[0] -> 16byte Wallet[1] -> 16byte Wallet[2] -> 16byte Wallet[3] -> 16byte Wallet[4] -> 16byte 지갑은 이렇게 5개까지 만들 수 있고, 구조체는 struct Wallet { int *fuck_rand_chunk = malloc(0x82); int..
다른 문제 보다가 안풀려서 잠시 쉬어갈 겸 풀어보았다. Summary heap overflow pointer overwrite Analysis puts("\n[V]iew my bowls"); puts("[B]uy marimo"); puts("[S]ell marimo"); puts("[A]bout"); puts("[Q]uit"); printf(">> ");메뉴는 이렇게 있고 입력을 받을 때 show me the marimo를 입력하면 마리모를 하나 준다. (size는 1) 원래 Buy하려면 돈이 필요한데 꽁짜로 준다 ! ㅎㅎ 마리모는 최대 15개 까지 살 수 있다. struct marimo{ int_32 time; int_32 size; int *name = malloc(16); int *profile =..
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', '..
거의 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..
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..
- 해킹
- glibc
- pwnable.tw
- pwnable
- 본선가고싶다
- HackCTF
- shellcoding
- codegate
- rt_sigreturn
- pwable
- overflow
- SQLi
- tcache
- exit
- FSB
- hacking
- fastbin
- ebp change
- srop
- stack reusing
- heap
- oob
- TLS
- fastbindup
- fsop
- Total
- Today
- Yesterday