문제
nx, canary 가 걸려있다.
버퍼 크기 이상으로 값을 넣으니 카나리 값 변조에 의해 프로그램이 종료된다.
1. src 에 입력을 받는다. (bof 발생)
2. src 배열 인덱스 0부터 49까지 xor 비트 연산을 한다.
3. dest에 src를 복사한다. (1바이트 만큼 조작 가능)
4. 계속할 지 안할지를 묻는다.
문제 해결 과정
src 에 bof 를 발생시켜 ret 를 변경하면 될 것이다.
그런데 카나리로 인해서 SFP 바로 전에 카나리 값이 들어가 있는 상황이다.
-> 카나리 값을 빼와서 그걸 유지시키면서 익스플로잇 하면 될 것 같다.
카나리의 하위 1바이트가 null 값인 것을 이용해, strncpy 시 한 바이트 만큼을 조작하면
printf 를 통해 카나리 값까지 출력될 것이다.
B로 덮은 부분부터가 카나리 값이기에 printf 시 쭉 출력되서 카나리 값까지 출력이 될 것이다.
접근 방법은 다음과 같다.
1) 카나리 leak
dummy * 0x39 만큼 보내고 그만큼 받은 뒤 카나리 값을 따로 받아서 저장한다.
2) 주소 leak
dummy + canary + sfp + pr + setvbuf_got + puts_plt + main
rop를 통해 got 주소를 leak 한 후, 다시 메인으로 돌아간다.
3) 페이로드 전송
dummy + canary + sfp + pr + binsh + system
leak 한 주소를 바탕으로 binsh, system 주소를 구한 후 페이로드를 짜서 보낸다.
+ pop rdi 가젯을 구해주고, leak 한 주소를 가지고 라이브러리 버전을 확인해서 그에 맞는 오프셋 값들을 구해놓는다.
익스플로잇
'Wargame > HackCTF' 카테고리의 다른 글
[HackCTF] RTC (0) | 2021.06.01 |
---|---|
[HackCTF] Unexploitable #2 (0) | 2021.05.23 |
[HackCTF] Unexploitable #1 (0) | 2021.05.23 |
[HackCTF] UAF (0) | 2021.05.08 |
[HackCTF] Beginner_Heap (0) | 2021.05.08 |