본문 바로가기

DiceCTF 2021

[Dice CTF 2021] flippidy Binary 분석 Canary, NX가 설정되어있고, Full RELRO가 되어있다. Full RELRO이므로, GOT 영역을 쓸 수 없다. 다른 글들을 참고해보면 여러 방법이 있지만 __malloc_hook이나 __free_hook의 주소를 덮어서 공격을 했다. 프로그램을 실행하면, notebook의 크기를 입력받고 2가지의 기능을 선택할 수 있다. "add notebook", "flip notebook"이다. IDA로 각 기능을 분석하겠다. main 함수에서 notebook의 크기(=note_size)를 입력받았고, 해당 크기에 맞게 malloc( ) 함수를 통해 heap_addr를 저장한다. v1에 heap_addr + 8 * idx 값을 저장하고, 해당 주소에 0x30 만큼 동적 할당한다. 생성된.. 더보기
[Dice CTF 2021] babyrop 0. Binary 분석 64bit 바이너리에 NX bit가 설정되어 있고, 그 외의 보안 기법은 설정되어 있지 않다. write( ) 함수로 "Your name: "을 출력하고, gets( ) 함수로 변수를 입력받고 프로그램이 종료되는 간단한 함수다. 1. 취약점 분석 gets( ) 함수에서, 변수에 길이제한 없이 입력받기 때문에 "버퍼 오버플로우" 취약점이 발생한다. 80글자의 문자열을 입력하면 RIP를 덮어서 흐름을 제어할 수 있다. 2. Exploit 작성 문제 이름처럼, ROP를 이용하면 될 것 같다. 취약점 자체는 쉬웠지만, 익스플로잇을 작성하는데 어려움을 겪었다. 일단 쉘을 획득하기 위해 write( ) 함수를 이용하여, write나 gets의 주소를 leak해서 system( )이나 exec.. 더보기