[HackCTF] Yes or no
문제
NX + ASLR 이 걸려있다.
gets() 가 실행되도록 값을 입력
-> bof 를 발생시켜 ret 를 변경가능
현재 NX bit, ASLR 이 적용된 상황에서 주소가 leak 되지 않고 있다.
-> 64 bit rop 기법을 통해 쉘을 얻을 수 있을 것이다.
두 가지 정도의 방법이 있다.
먼저 다음과 같이 기본적인 rop 기법을 이용하는 방법이다.
1. bss에 binsh 주입
2. put_got 주소를 leak 함
3. got overwrite 함
4. puts 실행함
아니면 rop 을 이용하되, leak 을 한 뒤에 다시 main 으로 돌아가면 굳이 got overwrite 없이도 쉘을 실행할 수 있다.
문제 해결 과정
주소를 leak 한 뒤에 main 으로 돌아가는 방법을 써보겠다.
필요한 것들을 구해보도록 하자.
1. Gadget
2. 처음에 입력해줘야 할 값
bp 를 건 다음에 eax 확인하기
offset(ret 까지의 거리) : 0x12 + 8
익스플로잇
저번에 풀었던 dreamhack x64 문제와 상당히 유사했다.
다만 한 가지 의문인 것이 두 번째 페이로드에 binsh 과 system 사이에 ret 가 있어야 한다는 것이다.
처음에 계속 쉘이 안따지길래 봤더니 저 문제였다.
근데 왜 포함해줘야 되는지를 잘 모르겠다;;
나중에 알게되면 이유를 써둬야겠다..