문제의 c 소스 코드입니다.
corruptMe에 0xff를 저장하면
win() 함수가 실행되서 셸을 획득할 수 있습니다.
vuln() 함수를 디어셈블 해보면
corrupMe 변수의 주소가 0x404049임을 알 수 있습니다.
ff는 10진수로 255이고 이는 %255c로 나타낼 수 있습니다.
드림핵의 강좌를 보면 printf() 함수의 포맷 스트링 인자의 순서가 나와 있습니다.
%p를 통해 입력 값이 몇 번째 인자에서부터 들어가는 지를 확인해보면
6번째부터 들어가는 것을 확인할 수 있습니다.
페이로드를 8바이트 단위로 나눠서 작성하면 아래와 같이 됩니다.
%255c%8$ nAAAAAAA 0x404049
여기서 주소는 리틀엔디안을 적용시켜줘야 합니다.
위 내용을 바탕으로 익스플로잇 코드를 작성해 줍니다.
encode() 함수로 16진수로 바꿔주고
p64() 함수로 리틀엔디안으로 패킹해 줍니다.
실행하면 셸을 획득하고 플래그를 가져올 수 있습니다!
'write-up(pwn) > G04T' 카테고리의 다른 글
[G04T] Simple BOF 3 (0) | 2022.09.08 |
---|---|
[G04T] Simple FSB 3 (0) | 2022.09.08 |
[G04T] Simple FSB 1 (0) | 2022.09.07 |
[G04T] Simple BOF 2 (0) | 2022.09.05 |
[G04T] Simple BOF 1 (0) | 2022.09.05 |