둘둘리둘둘리둘둘리둘둘리둘둘리둘
[Hacker school FTZ] Level17 -> Level18 본문
#include <stdio.h>
void printit() {
printf("Hello there!\n");
}
main()
{ int crap;
void (*call)()=printit;
char buf[20];
fgets(buf,48,stdin);
setreuid(3098,3098);
call();
}
Level16(http://dool2ly.tistory.com/23)과 다른점은 shell을 띄워주는 함수가 없다는것 뿐이다.
Level16과 마찬가지로 변수 call의 내용이 printit의 주소가 아니라 쉘 코드의 시작 주소를 넣어주면 되겠다.
고맙게도 setreuid가 있으니 쉘 코드는 단순히 shell만 실행시켜주면 된다.
Level11(http://dool2ly.tistory.com/18)에서 부터 해왔듯 환경변수 sh에 쉘코드를 등록해놓고 call의 자리에 환경변수의 sh의 주소를 넣어주면 Level18의 쉘을 딸수 있다.
[그림 1]
buf의 크기는 전과같이 56-16= 40byte이니 페이로드는 아래와 같다.
[ 더미(40) | 쉘코드 주소 ]
--풀이--
'War game > 해커 스쿨 FTZ' 카테고리의 다른 글
[Hacker school FTZ] Level19 -> Level20 (0) | 2015.08.20 |
---|---|
[Hacker school FTZ] Level18 -> Level19 (0) | 2015.08.20 |
[Hacker school FTZ] Level16 -> Level17 (0) | 2015.08.20 |
[Hacker school FTZ] Level15 -> Level16 (0) | 2015.08.20 |
[Hacker school FTZ] Level14 -> Level15 (0) | 2015.08.20 |
Comments