

NX만 적용되어있는 64bit 아키텍처이다.

카나리가 적용이 안되서 그런지 이전 문제들과 main함수의 버퍼 크기를 구하는 방법이 조금 다른 느낌이다. 직관적으로 0x50만큼의 버퍼가 할당되었다고 생각했는데 어셈블리어를 잘 살펴보면 0x40만큼의 버퍼가 할당되는 위치는 ebp-0x40이다. 따라서 0x40만큼의 버퍼를 'A'로 덮고 8바이트의 SFP를 'B'로 덮고 return address를 리턴 가젯을 통해 system함수를 호출하도록 세팅하면 된다.

페이로드는 다음과 같다. 이전 글인 Return Oriented Programming과 payload가 거의 유사하다.

실행시키면 쉘이 잘 얻어지는 것을 볼 수 있다.
============================================================================================추가로 드림핵 풀이에서는 ret2main 기법으로 해당 문제를 풀었는데
이전 풀이과정에서 리턴가젯으로 read의 got값을 추출 하는 부분까지는 똑같다.
이후 payload에 main함수의 주소를 넣으면 main함수로 다시 리턴하게 되는데 이때 write(1, read_got, ...)를 통해 read함수의 got값을 얻었으니 이를 통해 system함수의 주소, /bin/sh 문자열의 주소를 모두 구하고 다시 리턴가젯을 통해 system('/bin/sh')를 호출하는 것이다.
페이로드는 다음과 같다.

첫번째 main에서 read_got값을 갖고 다시 main으로 리턴 하는 것이다.

실행시키면 쉘이 잘 얻어지는 것을 볼 수 있다.
'보안 > DreamHack' 카테고리의 다른 글
| Dreamhack fho (0) | 2024.10.14 |
|---|---|
| Dreamhack basic_rop_x86 (0) | 2024.10.11 |
| Dreamhack Return Oriented Programming (0) | 2024.10.10 |
| Dreamhack Return to Library (1) | 2024.10.07 |
| Dreamhack ssp_001 (1) | 2024.10.05 |