argv[1][47]은 \xbf이면 안된다!!!!
libc함수 system을 이용하자!
system 함수의 주소는 0x80482e8
ret에 0x80482e8을 넣는다.
오잉?? system함수의 주소는
0x40058ae0이었다!!
main()함수를 disassemble 했을 때 system호출 지점은 0x80482e8이지만
실행 시점에 공유 라이브러리를 로딩한 후의 system()함수의 시작점을 찾아햐 한다.
따라서 실행 후 system()함수의 address를 찾아야 한다.
system 함수에서도
이전함수의 EBP RET system함수인자
esp가 바뀌고, ebp는 안 바뀌는데??
라는 의문을 가질 수 있지만,
새로운 함수에서 처음에 mov esp ebp덕분에
esp값을 ebp에 넣는다.
이제 system함수의 인자 /bin/sh을 구해야 한다.
이때 이러한 코드를 사용하면 /bin/sh을 구할 수 있다.
system함수의 인자는 system함수 ebp+8지점이다.
이것이 기본적인 RTL이다.
RET부분을 바꿔주었다. system 함수 주소로
eip가 변하는데,,
이제 system 함수로 와서,
push ebp를 해준다.
mov로 ebp가 다시 esp 위치로 온다.
esp+8지점의 인자가 system 함수 인자이다