2019. 9. 13. 18:02
728x90
하...뭐하는건지 도저히 모르겠다...롸업공부하겠다.
입력한게 check_passcode를 들어가서 연산한다음 hashcode랑 같으면
puts(byte_8048840)을 하고 core함수로 들어간다.
이게 hashcode고
위 연산은 결국 주소를 좀 올리면서 5번 더한다는 것인데
C0D9B0A7=3235492007 을 5로 나누면 647098401이 나온다. 그런데 *5를 하면 3235492005 밖에 나오지 않는다.
그래서 결국 마지막 값에 *2를 해준다.
그러면 이제 hashcode랑 check_passcode 리턴 값이 같아졌으니
core함수로 들어갈 수 있다.
core함수는 이런데 dlsym의 0xFFFFFFFF은 함수의 핸들값, 그리고 printf는 함수이름이다.
ASLR이 항상 있고, 우리는 바뀔떄마다 이동되는 system함수와 /bin/sh의 주소를 정확히 알아야 한다.
그래서 printf의 주소와 해당 함수와 문자열간의 차이를 알아내면 된다.
p system, p printf 를 하면 함수들이 주소를 알 수 있고 p printf-system 하면 그 차이를 알 수 있다.
그리고 find /bin/sh하면 /bin/sh의 주소도 나온다.
결국 코드는
반응형
'ctf 및 여러가지 문제들 > HackCTF' 카테고리의 다른 글
HackCTF - rop (0) | 2019.09.16 |
---|---|
HackCTF - BOF_PIE (0) | 2019.09.15 |
HackCTF - Random key (0) | 2019.09.13 |
HackCTF - 1996 (0) | 2019.09.13 |
HackCTF - Input Check (0) | 2019.09.03 |