원격으로는 왜 안될까요?

똑같은 코드인데 로컬에서는 쉘 실행이 잘되는데 원격으로는 안되네요 ㅠㅠ

서버 libc 버전도 확인해보니 libc-2.31.so 였는데요.
read 함수 offset는 130 으로 끝나고 system 함수 offset은 410으로 끝나는 버전이었습니다.
디버깅해보니까 로컬에서 성공할때는 read는 130 system 410이 맞는데
원격에서는 read 140 system 420으로 끝나네요. 근데 원인을 전혀 모르겠어요 같은 코드고 서버로 준 값도 똑같은데 도대체 왜...??

  1. 성공했을때
    [+] read: 0x7f8a02e90130
    [+] libc base: 0x7f8a02d7f000
    [+] system: 0x7f8a02dd4410

2)실패했을때

[+] read: 0x7f59d9bae140
[+] libc base: 0x7f59d9a9d010
[+] system: 0x7f59d9af2420

#pwnable
작성자 정보
답변 5
0dayrover
공부벌레

그리고 강의 슬라이드에 전체 익스플로잇이라고 되어있는 내용 복붙해도 정답이 안되네요 문제는 똑같은데..

2022.01.24. 23:19
avatar
믕믕이부하
대표 업적 없음

[+] read: 0x7f59d9bae140
[+] libc base: 0x7f59d9a9d010
[+] system: 0x7f59d9af2420

나온대로라면 read 함수 주소는 140으로 끝나는데요..?

버전이 같아보여도 오프셋이 살짝 다른 경우가 꽤 있습니다. 일단 read 함수 주소에서 0x10만큼을 더빼서 해보세요. libc base 주소는 항상 000으로 끝나기 때문에 출력 결과만 보았을때는 0x10 만큼 더 빼서 해보면 될 수도 있을 것 같습니다.

예제 익스플로잇 코드는 로컬의 libc를 참조하여 오프셋을 계산하기 때문에 그대로 복사하셔서 실행하셔도 제대로 안될겁니다.

2022.01.25. 03:28
0dayrover
공부벌레

.

2022.01.25. 13:24
blackbearwow
대표 업적 없음

"서버 libc 버전도 확인해보니 libc-2.31.so 였는데요."
이거 어떻게 확인하셨나요? 너무 궁금해요 ㅠ

2022.03.12. 23:00
avatar
bincat
Closed Beta Tester

docker를 사용해도 실제 내부에서 사용하는 라이브러리 버전이 달라지는 일이 왕왕 있습니다..
libc 버전 보다는 libc의 md5값을 확인하는게 더 정확합니다. md5sum [LIBC_FILE_NAME] 을 통해서 확인해 보시면 좋을 것 같습니다.

2022.03.25. 19:20
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기