10 coins Memory Corruption: Format String Bug 질문

FSB_Easy에서 auth를 0xff로 덮어서 쓰는 방법을 잘 모르겠습니다.

%x를 이용해서 하는 것까진 알았는데, auth의 주소에 접근해서 쓰는 법이 감이 잡히지 않습니다.

#시스템 #fsb
Author
Answers 1
This answer was accepted. Thanks for sharing!
santa_
No badge

테스트로 AAAAAAAA.%8$x.%9$x.%10$x.%11$x를 입력하면 결과는 AAAAAAAA.555547cd.41414141.2438252e.252e7824가 출력되며 입력값인 AAAAAAAA(0x41414141)이 9번째 인자로 들어간다는 것을 알 수 있습니다.
여기서 포맷 스트링으로 16 바이트를 작성하고 auth의 주소를 작성하면 auth 주소는 11번째 인자로 들어갑니다.
%255c%11$n으로 11번째 인자에 255(0xff)를 쓰도록 하고, a를 6개 채워 16 바이트를 맞춘 뒤 auth 주소를 작성하면 됩니다.
auth 주소는 0x00007fffffffdddc로, hex encode 모드에서 little-endian 방식으로 dcddffffff7f0000를 입력하고 hex encode 모드를 해제하면 ÜÝÿÿÿ 값이 나옵니다. 이 값을 포맷 스트링의 auth 주소로 넣어주시면 됩니다.
hex encode 모드를 해제한 상태에서 완성된 아래 포맷 스트링을 입력하면 auth 변수를 0xff로 변경할 수 있습니다.
%255c%11$naaaaaaÜÝÿÿÿ

2023.03.20. 16:54
Do you know the answer?
Share and earn points!
Answer and earn points