먼저 파일을 실행해보았다
메뉴를 입력하면 해당하는 메뉴에 맞게 출력이 된다.
NXbit 가 걸려있는데 RTL로 풀면 될 것 같다.
코드를 확인해보자
main함수 안에서 reduced_shell()을 호출한다
gets로 문자열을 입력 받는데 여기서 오버플로우가 일어난다
s의 크기는 0x1c=28byte이다.
더미값이 있는지 확인하기 위해서 디버깅 했다.
디버깅을 했더니 너무 길어서 reduced_shell 첫번째 명렁어에 bp해주고 gets함수 call 명령어에 bp 해준다음 거리를 구했다.
32바이트로 이는 28바이트 + 4바이트(sfp)인것을 알 수 있다. 따라서 더미값이 없음을 알 수 있다.
구조가 다음과 같을 것이다
ret[4] |
sfp[4] |
buf[28] |
32바이트 만큼 dummy값을 채운다음 ret에 system을 넣어주면 될것이다.
따라서 system함수의 주소와 "/bin/sh"의 주소를 찾으면 된다
IDA를 통해 "/bin/sh"의 주소를 찾을 수 있었다.
system함수의 주소도 IDA를 통해 쉽게 구할 수 있었다
-ex.py-