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;
}