auth 주소가
rsp + 8 인걸 알아내고 이런 input 값을 줬는데 0x7fffffffddd8%247c%8$n 해도 먹히지를 않습니다.. 뭐가 잘못된거죠..
#시스템_해킹
#기초
#포맷_스트링_버그
작성자 정보
답변
2
Sechack
2024 Invitational Contenders
일단 rsp + 8이 아니라 rsp + 12에 위치해 있고요. 따라서 auth변수의 주소는 0x7fffffffdddc입니다. 그리고 printf함수는 NULL문자를 만나면 출력을 종료한다는 특성때문에 덮으려는 주소를 앞이 아닌 뒤에 위치해야 합니다. offset도 8이 아니라 9가 나와야 하고요. 가장 중요한건 주소를 little endian으로 뒤집에서 넣어줘야 한다는것입니다. 그냥 0x7fffffffdddc이렇게 입력하면 주소가 아니라 문자열로 인식해버리니까 Hex Encode기능을 이용해서 Hex로 뒤집어서 넣어줘야 하고 주소를 뒤에다 넣었으니까 앞에 입력한 길이 / 8만큼 offset이 밀리게 됩니다. 따라서 offset은 11이 되게 됩니다.
따라서 최종 페이로드는
Hex Encode
2532353563253131246e616161616161dcddffffff7f
String
%255c%11$naaaaaaÜÝÿÿÿ
이렇게 됩니다.
삼부허리케인
대표 업적 없음
입력한 길이 / 8만큼 offset이 밀려 11이 된다고 하셨는데 이게 어케 되는거죠? 입력한 길이는 255아닌가요? / 8 로 나누게 되면 11이 안나오는데 구글링해도 원하는 답을 얻지 못하였습니다 ㅜㅜ