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 =..
- TLS
- pwnable.tw
- tcache
- ebp change
- heap
- pwable
- shellcoding
- overflow
- 해킹
- pwnable
- 본선가고싶다
- glibc
- codegate
- fastbindup
- SQLi
- stack reusing
- oob
- HackCTF
- fastbin
- exit
- srop
- rt_sigreturn
- fsop
- FSB
- hacking
- Total
- Today
- Yesterday