완료됨
auth 주소가
rsp + 8 인걸 알아내고 이런 input 값을 줬는데 0x7fffffffddd8%247c%8$n 해도 먹히지를 않습니다.. 뭐가 잘못된거죠..
#시스템_해킹
#기초
#포맷_스트링_버그
작성자 정보
답변
2
일단 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ÜÝÿÿÿ
이렇게 됩니다.