먼저 파일을 실행해보자
실행시켰더니 이상한 값이 나온다.
보호기법이 뭐가 있는지 확인해보자
NX가 걸려있다. 쉘코드를 사용하지 못한다.
IDA로 파일을 까보자
v5에 sup함수의 주소를 넣고 s변수에 133바이트 만큼 입력을 받는다. 그리고 v5를 실행한다.
sup함수는 s변수를 그대로 출력한다.
s의 크기는 0x8c, 즉 140바이트인데 133바이트까지만 입력받을수 있으므로 RET는 변조를 하지 못한다.
그러나, sup() 함수의 주소를 담고 있는 void 포인터의 메모리는 덮어 쓸 수 있다. 이는 v5이므로 v5의 값을 변조시키면 문제는 풀릴것이다.
먼저 함수가 뭐가 있는지 살펴보자
shell이란 함수가 있는 것을 확인할 수 있다.
v5에 shell함수의 주소를 넣으면 문제가 풀릴것 같다.
shell함수의 주소는 0x0804849b이다.
shell함수)
shell함수는 system 함수를 호출하는 함수
shell함수를 실행시키면 쉘을 얻을 수 있다
v5의 크기는 0xc인데 이는 12바이트이다. s와 v5사이의 거리는 0x8c-0xc=140-12=128이다.
payload를 짤때 dummy값을 128만큼 해주고 그다음에 shell함수를 패킹한 값을 넣어주면 될 것이다.