ida에서 shift + f12로 string들을 볼 수 있다. 이 문자열들을 이용하면 익스짜는데 시간단축이 될 수도 있다. 그 예로 hackctf Unexploitable 1번을 풀 수 있다. [HackCTF] Unexploitable #1 hackctf에 있는 unexp 1번이다. string에 함수 fflush가 들어가있고 fflu 'sh'를 이용해서 system('sh')을 실행시킬 수 있다. len('fflu')는 4개이니 4 byte만 더해주면 문자열은 'sh\x00'을 가르킬 것이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 from pwn import * #context.log_level = 'debug' #p = proce..
2014 코드게이트에 나왔던 angry_doraemom이다. 소켓 C문제도 처음인데다가 리버스커넥션은 검색을 했던 꽤 힘들었던 문제... 더 분발해야겠다는 생각이 너무 많이든 문제였다. arch : 32bit got overwrite canary_leak ( + 프로그램이 정상작동하려면 doraemon.txt, mouse.txt, bread.txt가 필요하다. port 8888열고 접속하면 된다. nc localhost 8888 다른건 필요없고 1~4번중 옵션고르는건데 4번에 bof터지는 곳이 있었다. canary leak을 어떻게 구상할까에 막혔는데 fork()하고 nc로 접속해서 문제를 푸는 형식이기에 원본파일을 재시작 하지않는이상 접속을 몇번을 해도 카나리 값은 변하지 않는다는 점을 생각하면 카나리..
hacking camp에 나왔던 문제이다. stack pivoting을 공부 할 수 있었던 좋은 문제. 스택 피보팅(stack pivoting)이란? gadget을 이용해서 stack의 흐름을 변경하는 기법이다. 해당 문제에서는 bss와 stack을 이용할 것이다. 가젯은 - prdi - prsi - leave_ret - read_ret leave_ret gadget은 말그대로 leave ret 즉, mov rsp rbp pop rbp pop eip jmp eip 명령어다. read_ret은 다음과 같다. rbp가 있는 영역에다가 read해주는 역할이다. sfp에다가 bss의 영역을 넣고 leave ret해주면 pop rbp로서 rbp는 bss를 가르키게 되고 ret에 read_ret을 넣어주면 bss에..
지금 malloc.c 분석을 하며 문서를 작성하느라 블로그에 올릴게 없다.. 그 동안 풀어봤던 문제들 몇개를 계속 올려야겠다. 2018 코게 예선으로 나온 baskinrobins31이다 간단한 64bit ROP이다. 64bit, partial RELRO뿐이다. 메인의 내용은 별거없으니 pass한다. int main() { Intro() your_turn() computer_turn() } your_turn()에서 입력받을때 bof가 충분히 터지고 got overwrite이 가능하기에 ROP로 shell취득이 가능하다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 ..
이번 20회 해킹캠프에서 campnote라는 문제를 풀었는데 아직도 fastbin dup이 어려워서 정리한번 하려고한다. 조건 fast사이즈의 chunk를 자유자재로 할당, 해제할 수 가 있어야 한다. free된 chunk에 대해서 free를 또 할 수 있어야 한다. libc_leak top_chunk와 인접하지않게 small, large 사이즈의 청크를 할당, 해제하면 해당 청크에 fd, bk에 의 주소가 박힌다. 보이는 것처럼 main_arena로 와서 - 0x10만큼 빼고 거기서 malloc_hook의 오프셋을 빼면 libc_base를 구할 수 있다. base = - 88 - mallo_hook_offset - 0x10 setting 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ..