본문 바로가기

return oriented programming

(2)
[ROP_64bit] codegate2018 Qual BaskinRobbins31 1. 바이너리 파일 2. 바이너리 분석 본 글은 ghidra 툴을 이용하여, 분석하였다. ( 아래는 main에 대한 코드만 넣어두었다. 좀 더 자세한 사항은 디컴파일하여 확인해 보는 것을 추천한다. ) 해당 바이너리는 베스킨라빈스31게임과 비슷한 것으로, 횟수 31에서 입력한 값만큼 차감하면서 0이 되면 loss하는 게임이다. 단, 입력값은 1~3중에 입력해야 하는 조건이 존재한다. your_turn() : 사용자가 입력한 값을 필터링하는 함수이다. my_turn() : 컴퓨터가 입력하는 값을 의미하는 함수이다. - 남은 기회가 4일 경우, 컴퓨터가 이기게 된다. - 남은 기회가 0미만 3이상일 경우, 남은 기회에서 -1 된다. - 남은 기회가 1~3일 경우, 컴퓨터가 이기게 된다. undefined8 ..
[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..