본문 바로가기

보안/DreamHack

Dreamhack basic_rop_x86

직전에 풀었던 basic_rop_x64와 운영체제만 다른 것이다.

 

gdb로 확인을 해보자

분명 sub esp 0x40을 했지만... c코드에 정의된 buf 배열은 ebp-0x44부터 정의되는 것을 볼 수 있고 32비트 운영체제이기 때문에 SFP는 4바이트이다. 따라서 0x48바이트를 덮어야 return address영역을 덮을 수 있다.

 

이후 이전 문제와 같이 페이로드를 작성하면 되는 줄 알았으나 64bit와 32bit 운영체제의 차이점은 더 있었다.

바로 함수 호출 규약과 리턴 가젯의 종류이다. 64bit에서는 rdi, rsi, rdx, rcx 등등 순서로 함수의 인자가 레지스터를 통해 전달이 되었다면 32비트에서는 레지스터가 아니라 그냥 인자들을 스택에 쌓아두고 받아온다.

 

따라서 이를 생각하며 페이로드를 작성하면 다음과 같다.

 

'보안 > DreamHack' 카테고리의 다른 글

Dreamhack oneshot  (0) 2024.10.18
Dreamhack fho  (0) 2024.10.14
Dreamhack basic_rop_x64  (0) 2024.10.10
Dreamhack Return Oriented Programming  (0) 2024.10.10
Dreamhack Return to Library  (1) 2024.10.07