buf = b'A'*0x48 && p.recvuntil(b'A'*0x40)

payload를 구성하고 그걸 바탕으로 leak된 read_got 값을 받는 과정에서 이해가 안되는 부분이 있어서 질문드립니다.

분명 buf를 통해 보낼 때는 0x48의 크기만큼 A를 채운 후 payload를 구성하는데 왜 받을 때는
0x40만큼의 A를 받은 후에 leak이 되는 것인지 궁금합니다.

위 사진만 보아도 A의 개수가 달라지는 것을 확인할 수는 있는데 왜 달라지는 것인가요?

#pwnable
작성자 정보
답변 1

Q: 0x48만큼 입력했는데 왜 0x40만큼만 recvuntil()하는지 모르겠다.
A: main함수를 보면 알수있습니다.
write 함수가 출력을 sizeof(buf)에 의해 buf의 사이즈만큼 출력하는 걸 알 수 있습니다.
그래서 아무리 많이 입력해도 0x40만큼 출력되고, 출력되는 임이의 값(dummy)을 받고 그다음에 leak 되는 주소를 받게 됩니다.

int main(int argc, char *argv[]) {
    char buf[0x40] = {};

    initialize();

    read(0, buf, 0x400);
    write(1, buf, sizeof(buf)); //write(1, buf, 0x40) 으로 생각해야한다.

    return 0;
}
2024.09.26. 00:54
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기