이것도 ezshell 문제와 같이 쉘코딩 문제이다. 8바이트만 입력을 받는데 여기서 sandbox()는 세컴으로 execve, execveat 등을 막는다. 즉 쉘을 따는것이 불가능함로 ORW를 해야 한다. 하지만 8바이트만으로는 부족하므로, 8바이트 쉘코드로 read함수를 호출하도록 하여 입력을 많이 받으면 된다. ORW를 할 때 파일 이름을 모른다면 getdents 또는 getdents64 syscall을 이용하면 쉽게 알아낼 수 있다.
https://github.com/balexios/glibc2.23/blob/master/stdlib/exit.c balexios/glibc2.23 glibc version 2.23. Contribute to balexios/glibc2.23 development by creating an account on GitHub. github.com read를 실행한뒤의 레지스터를 활용해 libc leak, stack leak 까지 할 수 있다. 그래서 i의 값을 음수로 바꾸려 했지만 잘 안되서 포맷 스트링 버그를 할 때마다 0으로 바꾸어주면서 여러번 fsb를 할 수 있도록 했다. 그래서 libc leak 후 __free_hook을 one_gadget으로 덮어 둘 수 있다. 이 exit 함수의 cur->idx를..
ApateDNS 로컬로 DNS 변조 Autoruns - Sysinternals 통합도구 일부 자동 시작 위치 검색 -> 레지스트리 시작폴더 등 BinDiff - IDA 플러그인 악성코드 변종 비교 BinNavi IDA Pro와 유사한 역공학 환경 제공 -> 팀원끼리 공유 가능 Bochs x86 컴퓨터를 완전히 시뮬레이션할 수 있는 디버거 -> 이것을 이용해 IDB 파일 디버깅 가능 Burp 스위트 웹 애플리케이션을 테스트 하는 용도 Capture BAT 악성코드 동작할 때 감시 용도 -> 파일 시스템, 레지스트리, 프로세스 행위 CFF Explorer PE 편집을 쉽게할 수 있도록 해줌 (x64&x86) Deep Freeze 물리적인 하드웨어에서 악성코드를 분석할 떄 유용 Dependency Walker..
2019/11/29 - [CTF write-up/hackctf] - [hackctf] childheap 이 문제에서 풀었던 방식 그대로 사용하면 libc leak은 쉽게 된다. 그런데 이 heap_paradise는 할당할 수 있는 최대 갯수를 15개로 제한을 해놓았다. fastbin dfb를 이용하면 안되고, 기존에 있던 청크를 재사용하여 fastbin에 속한 청크의 fd를 직접바꾸어주는 식으로 하게 되면, 15개 할당에 딱맞게 익스를 할 수 있다.
정훈이형의 도움으로 문제를 풀게 되었다. 시험기간이여서 간단히 정리를 하자면 1. 청크내 가짜 청크를 만들고 아다리를 맞춘다. 2. free된 fastbin 크기의 청크에서 size필드를 수정하고 free를 함으로서 fd에 libc 주소를 적는다. 3. 적혀진 libc 주소 + 0.5바이트 브루트 포싱을 이용하여 stdout 구조체 근처에 할당& 수정(libc leak) 4. 3번에서 leak한 값을 바탕으로 __malloc_hook을 one_gadget으로 덮는다.