pwntools (2) 썸네일형 리스트형 [BOF] echo1 1. 문제 echo1 바이너리 파일을 다운로드할 수 있는 링크가 주어진다. nc로 접속할 수 있는 정보가 주어진다. 2. 코드 분석 코드는 ghidra, gdb를 통해 분석하였으며, 본 설명은 푸는데 필요한 부분만 작성하였다. 아래 그림은 input받는 name에 대한 부분이다. malloc을 통해 0x28만큼 동적 할당하며, 해당 공간에 byebye, greetings의 함수 포인터와 입력받는 name을 저장한다. name의 경우, 0x24만큼 입력값을 받아오며, 할당한 heap영역의 0위치부터 8byte씩 저장된다. 이후, name의 첫 0x4는 bss에 위치한 id에 저장된다. ( bss에 위치한 주소는 고정주소이다. ) heap bss +-----------------------+ 0x4 +---.. [Practice] ROP - GOT Overwrite Ⅰ. ROP(Return Oriented Programming) 정의 리턴 가젯을 사용하여, 복잡한 실행 흐름을 구현하는 기법이다. 공격자는 이를 이용하여, 문제 상황에 맞춰 return to library, return to dl-resolve, GOT overwrite 등의 페이로드를 구성할 수 있다. ROP 페이로드는 리턴 가젯으로 구성되는데, RET단위로 여러 코드가 연쇄적으로 실행되는 모습에서 "ROP Chain"이라고도 부른다. Ⅱ. 실습 1. 실습 코드 // Name: rop.c // Compile: gcc -o rop rop.c -fno-PIE -no-pie #include #include int main() { char buf[0x30]; setvbuf(stdin, 0, _IONBF, 0.. 이전 1 다음