pwnable.kr 120위 안에 들기를 했고, 그후 목표를 다시 pwnable.tw 100위 안으로 들기를 했는데, 이도 마쳤다. 뭔가 새로운 목표가 필요하다. pwnable.tw 50위 안으로 잡아볼까,,,
중간중간에 쉬운거 띄고 푼거 띄고 하니까 11부터 풀게됬다. unlink 도 되고 spirit 도 될거같고 Top 도 될거같은데 그냥 unlink 연습삼아 unlink로 했다.
갔다온 만큼 더 열심히 해야징
핡 목표 달성했네요. 이제 reversing.kr 좀 하렵니당
윽 익스 75% 정도 다 짰을떄 같은팀 다른형님이 푸셔서 못써먹은 익스입니다 ㅠㅠ.. 그래도 원하는대로 bss 에 있는 flag 를 읽은게 아닌 쉘을 딴 익스니까 거기에 의미를 둡시당..
이거 잘쓰면 ㄹㅇ루다가 영역 옮겨다니면서 체이닝 할 수 있다. 잘써먹자.
rax => strlen 결과rbp => stdoutrbx => strlen 결과 --------------------eax => stdout 안에 값rdx => rbp + 0x88 안에있는 포인터r8 => fs:0x10 값 0x7ffff7dd3780 => FILE Pointer 같음 [0xf7ff670000000001 ( fs:0x10 + 1 )] rdi : stdout stdout + 0xd8 => _IO_file_jumps stdout + 0xd8 포인터를 덮으면 될듯. 그리고 실제로 됬다.... secretgarden 풀었따리 힙베, 립베 릭하고 _IO_file_jumps는 vtable 꼴이므로 이걸 heap 쪽에 넣어두고, 패빈덥으로 stdout 쪽에 받고, stdout + 0xd8 에 있는 _..
getattr(__import__(dir(__import__("glob"))[23]),dir(__import__(dir(__import__("glob"))[23]))[309])("/bin/sh") . 없이 쉘띄우기
막 syscall 을 쓰고싶은데 syscall 가젯이 없을경우가 있다. 심지어 릭벡터가 없어서 libc에서 못불러오는 경우가 있다. 이럴경우에 쓸수 있는 방법이 있다. 이렇게 find "\x0f\x05" 로 검색해보면 read+14 부분에 syscall 이 있는걸 볼 수 있다. 그럼 이걸 어떻게 이용할 것인가 하면 바로 read_got 부분에 있는 libc의 하위 1바이트를 0x5e 로 고쳐주는 거다. 그러면 read_plt 를 부를경우, syscall 이 콜될것이다. 그리고 1바이트 경우에는 간단하게 되고 2바이트가 넘어가면 brute force 가 조금 필요하다. 그래도 aslr 그냥 뚫는거보단 훨씬 빠르다