level 4
2020. 9. 5. 11:38
buffer의 크기가 40 즉, RET까지의 길이는 48, main 함수의 인자 개수 2개로 제한, 환경변수 초기화, 48번째 문자 '\xbf'.
이로써는 BOF 야기할 방법이 많습니다.
argv[1]의 주소이용 또는 RET 다음의 주소이용 또는 execl 이용 또는 심볼릭 링크이용 등등...
여기서 RET 다음의 주소를 이용해보겠습니다.
먼저 orc.c 파일을 복사해줍니다.
이제 컴파일을 한 뒤 디버깅해보겠습니다.
disas를 통해 buffer는 딱 크기만큼 $ebp보다 위에 있다는 것을 알아냈습니다.
그러면 RET까지의 거리는 48로 생각할 수 있겠네요.
A*44 B*4 C*100을 인자로 던져 RET주소 다음의 위치를 알아내겠습니다.
0xbffffbf8이네요.
payload를 작성해보겠습니다.
"A"*44 + "\xf8\xfb\xff\xbf" + "\x90"*100 + "~~"(ShellCode)
성공!