LEVEL 1 

/ -perm +4000 -user level2 -ls 2>/dev/null (2번은 에러스크립터를 제외하게 해줌)
을 이용해서 level2권한이 걸린곳을 찾고 
my-pass 명령어를 직접 실행시키는것은 막혀잇으니 level2 권한으로 
shell(커맨드)를 실행시킨후 my-pass를 입력한다 

LEVEL 2

LEVEL1과 마찬가지로 권한을 찾은 후 권한이 걸린 /usr/bin/editor로 이동한다 
vi 편집기를 이용해서 :! < 쉘 명령을 한줄만 입력할 수 있다
:!my-pass 를 쳐서 한다 .


LEVEL 3 

힌트를 열어보면 
-동시에 여러 명령어를 사용하려면?
-문자열 형태로 명령어를 전달하려면 ? 이라는 문구가 들어있다 
마찬가지로 권한을 찾은뒤 권한이 걸려있는 /bin/autodig로 접근한 뒤
쉘에 my-pass를 전달해야 하므로 ./autoding "bin/bash;my-pass"를 이용한다.
동시에 여러 명령어 전달 - argv[1]>>;<<argv[2] 이런식으로 세미콜론사용
문자열 형태로 전달 "argv[1]" 이런 식으로 따옴표 안에 넣어줌

LEVEL 4

백도어를 누군가가 심어놨다고 한다 cat 명령어로 백도어를 열어보니
level5권한이 걸려있는 파일이 /home/level4/tmp/backdoor에 있다고 한다 .          또한 service finger 이다
tmp에 가면 backdoor 파일이 없다 그래서 시스템 함수에 "my-pass"를 전달해줘서
my-pass를 level5의 권한으로 실행시켜줘야한다.
#include <stido.h>
#incldue <stdlib.h>
int main() 
{
  system("my-pass")
  return 0;
}

LEVEL 5 

/tmp 디렉토리에 level5.tmp라는 이름의 임시파일을 생성한다고 한다 
level5를 실행시킨후 tmp에 가서 확인하면 임시 파일이 존재 하지 않는데 
level5.tmp 라는 동일한 이름을 가진 임시 파일을 생성하여서 
내용만 바뀐 level5.tmp를 읽어서 풀 수 있다 

LEVEL 6 

텔넷 창이 뜨기 이전에 hint에서 ctrl+ c를 이용해서 인터럽트(중단)을 시키면 
패스워드를 얻을 수 있다 

LEVEL 7

단순히 창의력 문제였다 
아스키 코드와 모스부호는 2진수라고 생각하고 10진수로 변환한뒤 풀면 된다

LEVEL 8 

용량이 2700인 파일을 찾아야한다
find / -size 2700c 2>/dev/null 을 사용한다 
그 후에 나오는 암호화 된 것을 존 더 리퍼를 이용해서 푼다 

LEVEL 9 

버퍼 오버 플로우가 시작됐다 
buf1 , buf2에 각자 10씩 할당되어있고 buf2의 첫 2자리에 go가 들어가면 
/bin/bash가 열린다 
gdb분석으로 더미값 파악후 풀면된다 

LEVEL 10 

공유 메모리 공부 후 소스를 짜 풀어야한다 

LEVEL 11

포맷스트링버그 기법

print( str ) 에서 취약점이 발생한다 

LEVEL 12 

RTL

gets 함수 에서 취약점 발생 [엔터를 입력받을 때까지 모두 문자열로 인식해서 받아들이므로 버퍼 값을 넘어서도 넣을 수 있음 

LEVEL 13

스택 가드 , 쉘코드(에그쉘)
더미 파악후 스택 가드 값을 맞춰주고 RET에 에그쉘에서 얻은 코드를 넣어줌

LEVEL 14 

buf에 20이 할당 되엇으나 fgets로 45까지 넣어줄 수 잇으므로 오버플로우 발생 가능하다. gdb분석해서 0xdeadbeef 의 위치를 알아낸 후에
gets 함수이고 소스에 권한이 할당되잇으므로 파이프로 묶은뒤 cat을 이용한다

LEVEL 15가 안보인다..?

차후에 추가


LEVEL 16 

shell , printit 함수와 *call 포인터가있음
shell에는 권한이 담겨있고 printit은 필요없음 *call포인터가 printit을 저장할때 
printit의 주소 대신에 shell의 주소를 넣으면 풀림


LEVEL 17

저번 문제와 똑같은데 shell함수가 없어짐 (권한이 없음)
고로 에그쉘로 쉘코드를 구한 후 LEVEL16에 shell함수 주소 대신 
쉘코드의 주소를 구하면 됨 


LEVEL 18

check에 0xdeadbeef 를 넣어주면 쉘코드가 실행됨

하지만 check는 string밑에 존재 하기 때문에 버퍼 오버 플로우가 불가능하다

하지만 소스 상에서 보면 0x08을 넣으면 count--가 된다 

check와 string은 100 104 즉 4의 차이가난다 고로 \x08을 네 번 넣고 
데드 비프를 넣으면 된다 (100지점에 서로 꽉 달라붙어 잇었을 것으로 예상 그렇지 않앗다면 4~8만큼 값을 조절하면서 넣어보자!) // 추가로 공부 필요가 할거같음


LEVEL 19 

GETS 함수를 쓴다 에그쉘을 이용해서 그냥 RET에 넣으면 된다

LEVEL 20 

포맷 스트링 버그 

fgets(bleh,79,stdin); 으로 79의 크기밖에 사용못하게 보안 코딩이 되어있음

printf(bleh) 으로 취약점이 있음 그냥 또 포맷스트링버그를 쓰면됨

'해커스쿨 ftz' 카테고리의 다른 글

FTZ - level19 Chaining RTL  (1) 2016.06.12
FTZ-LEVEL20  (0) 2016.04.26
FTZ-LEVEL19  (0) 2016.04.25
FTZ-LEVEL18  (0) 2016.04.24
FTZ-LEVEL17  (0) 2016.04.24

+ Recent posts