| 김답변 |
그런 케이스는 굉장히 많은데요
I/O sync 가 안맞아서 그럴때도 있고 -> 이거는 pwntools 쓰셔서 recvuntil 사용하시면 대개 해결됩니다
libc가 제대로 릭이 안된걸 수도 있고 -> 무슨말이냐면, 예를들어 recv 와 send를 릭하는 경우 두 함수의 오프셋은 대부분 0x10밖에 차이가 안나기 때문에 libc id로써 사용할 수 없습니다. 충분히 긴 거리를 갖는 두 함수를 릭하셔야 합니다
레어한 경우로 로컬바이너리와 리모트바이너리가 다른 경우 -> 실제로 저도 대회중에 정확히 익스했는데 리모트에서 안따지는게 있어서 문의해본 결과 웹에 올라온 바이너리와 서버에 돌아가는 바이너리가 달랐었습니다(필요한 데이터의 주소가 0x10차이로 변함). 정말 정확히 익스했단걸 확신하신다면 운영진에 문의하시면 됩니다(확신안해도 문의하면 좋습니다)
그리고 사실 맨마지막경우는 저도 대회 운영중에 한번 실수한적이 있는데, 대회 운영 자체가 일정이 워낙 바쁘게 진행되다보니 이전버젼의 바이너리를 업로드하는경우가 가끔 발생합니다
서버 부하문제 -> 문제가 한 세네번의 I/O가 아니고 2000번정도의 I/O를 요구하는 경우 다수가 접속하면서 서버가 먹통이 되는 경우가 흔하게 발생합니다. 그런데 이경우는 그냥 connect자체가 됐다 안됐다, send/recv가 됐다 안됐다 하기 때문에 바로 아실 수 있을겁니다
되게 많은 경우가 I/O sync때문에 발생합니다. 보내고 받는 중간중간에 sleep 을 0.5초정도 넣으시거나 아니면 익스코드를 pwntools로 포팅해보세요. pwntools쓰시면 팀안에서도 익스플로잇 공유가 쉽고, 라이트업 쓰실 때도 깔끔하게 공유가 가능합니다(전세계 대부분이 pwntools를 사용하기 때문입니다) |
2017/08/14 |
|