오옹 bof 문제이다. 허나 문제가 있다.

/usr/bin/bof 파일을 못열도록 설정해놓았다.


젠장.....

if 문이 참이 되면 Good Skill! 이라는 문자와 동시에 setreuid 명령어를 통해

uid가 바뀌면서 쉘이 실행된다.


char buf[10]


?


char buf2[20]


아마 스택은 이렇게 되어 있을 것이다.


그렇다면 10byte + @로 채워준 후에 buf2의 첫 시작을 go로 덮으면 될것 같다


해보자 게씽게씽



이러지 말자 원래는 gdb로 해야되는 것이 정석이다 ㅡㅡ;;


뭐 일단 풀었으니 빨리 level10으로 가보도록 하자.






'pwnable > FTZ' 카테고리의 다른 글

level8  (0) 2016.08.04
level7  (0) 2016.08.03
level6  (0) 2016.08.03
level5  (0) 2016.08.03
level4  (0) 2016.08.03


shadow 파일이 어딘가에 숨겨져 있댄다.


이름이 shadow 파일인가? 우선 확인해 보도록 하자.



잇힝 찾았다.



흠.... 파일의 크기가 다르다.


그렇다면 파일 사이즈를 옵션으로 찾아보자



find 명령어는 파일 사이즈를 옵션으로 찾을 수 있다.


파일 사이즈의 단위를 모르니.... 

b - block

c - byte

k - kbyte

w- 2byte (word)


저 4개의 옵션중 c와 w 두 옵션에서 저런 결과가 나왔다.


흠.... 저 4개의 파일들 중 level9 라는 문자열이 있는곳이 정답일 것이다.


grep 을 이용해 찾아보자.



(참고) grep으로 문자열 검색하는 방법

(http://soharang.tistory.com/815)


흠 어쩐지 저 found라는 이름이 수상했더니만!


shadow 파일은 저런식으로 생겨먹었는데


1 : 사용자명 

2 : 패스워드 
3 : 패스워드 파일 최종 수정일 
4 : 패스워드 변경 최소일 
5 : 패스워드 변경 최대일

6 : 패스워드 만료 경고 기간 

7 : 패스워드 파기 기간 (패스워드 파기 후 계정 비활성 기간) 
8 : 계정 만료 기간 
9 : 예약 필드 


이러한 구조로 되어있다.

보통 패스워드는 암호화 되어 저장한다.


존더리퍼를 사용하여 복호화 하면 


:?apple 가 패스워드이다.


:?를 지우니 로그인이 되었다.







'pwnable > FTZ' 카테고리의 다른 글

level9  (0) 2016.08.04
level7  (0) 2016.08.03
level6  (0) 2016.08.03
level5  (0) 2016.08.03
level4  (0) 2016.08.03


아니 이것은!!!!!

이런 유형의문제는 실력의 유무와는 상관없이 약간의 삽질을요구한다.


만약 CTF에서 이러한 문제가 출제되었다면 빠르게 풀어서 점수를 획득하도록 하자.


일단 /bin/level7 을 열어보자.



흠...... 이게 뭐지 라고 생각한다면 당신은 센스가 없는 사람이다.


"-"를 1로 "_" 를 0으로 치환해봐야겠다 라는 생각을 했다면

당신은 성공한 것이다. 일단 바꿔보자


1101101 1100001 1110100 1100101


흠 이렇게 보면 뭐가 뭔지 알 수 없다.

일단 10진수로 바꿔보자.


109  97  116  101


이렇게 봐도 알 수 없다.....지금 나온 숫자를 ASCII 코드로 바꿔보자.


m a t e


흠 이게 패스워드인듯...



흠흠흠 나왔다

'pwnable > FTZ' 카테고리의 다른 글

level9  (0) 2016.08.04
level8  (0) 2016.08.04
level6  (0) 2016.08.03
level5  (0) 2016.08.03
level4  (0) 2016.08.03


와우 친절하지 않을 수가 없다.

로그인을 하자마자 저렇게 hint를 던져준다.

ctrl+c를 눌러 취소하고 내부를 살펴보도록 하자



에효... 패스워드 파일이 바로 보인다....


솔찍히 이건 무슨 취약점인지 필자도 잘 모르겠다.


그냥 넘어가기로 하자. (나중에 한번 알아봐야지)

'pwnable > FTZ' 카테고리의 다른 글

level8  (0) 2016.08.04
level7  (0) 2016.08.03
level5  (0) 2016.08.03
level4  (0) 2016.08.03
level3  (0) 2016.08.03



얍얍 이것이 힌트로다.


/usr/bin/level5 프로그램은 /tmp 디렉토리에 임시 파일을 생성한다. 라는 것이 이 문제의 힌트이자 열쇠이다.



파일을 살펴본 결과 level 6에 대한 setuid 도 걸려있다.


실행시켜보면 알겠지만 임시파일은 우리가 육안으로 확인해보기도전에 사라진다.

(그래서 엿같다)


우리가 이 문제를 풀기 위해서는 여러가지 방법이 존재하는데

그중 대표적인 방법이 바로 symbolic link를 이용하여 문제를 해결한다.


방법을 설명하자면 다음과 같다.

1. tmp 디렉터리에 tmmp 라는 파일을 하나 만들어 준다.

2. /tmp/tmmp 에 level5.tmp라고 심볼릭 링크를 걸어준다.

3. /usr/bin 이 실행되면서 level5.tmp에 password를 쓴다.

4. level5.tmp는 사라지지만 tmmp는 남아있게 된다.


즉 /tmp/tmmp 라는 파일을 만들고 심볼릭 링크를 통해 level5.tmp 를 쉽게 말해 가짜로 만드는 것이다. 그렇게되면 /usr/bin/level5라는 프로그램이 level5.tmp에 쓰기 연산을 수행하지만, level5.tmp는 tmp/tmmp 에 연결되어 있으므로, tmp/tmmp 에 데이터를 쓰게 되는 것이다.

(모르면 구글링 검색합시다. ㅡㅅㅡ 필자도 구글검색을 통해 알았습니다.)


먼저 tmmp라는 파일을 만들어 준 다음 level5.tmp 와 심볼릭 링크를 걸어준다.



ls -al 명령어를 통해 제대로 걸려있는지 확인할 수 있다.


자 이제 level5를 실행시켜보자.



모띠모띠 기모띠~ 하게 패스워드가 출력된 것을 확인하고 다음으로 넘어간다.



 

'pwnable > FTZ' 카테고리의 다른 글

level7  (0) 2016.08.03
level6  (0) 2016.08.03
level4  (0) 2016.08.03
level3  (0) 2016.08.03
level2  (0) 2016.08.03


힌트다


누군가 /etc/xinetd.d/에 백도어를 심어놓았댄다........ 일단 보자




얍얍 있다. 실행파일은 아니고... 텍스트파일 같다 한번 까보자.



와웅 저게 뭐지....... 구글링을 통해 알아보자


service finger                                                       //서비스 이름

{

disable = no                                                  //xinet의 제어를 받을래?

flags                    =REUSE                   

socket_type           =stream                             //사용하는 TCP/IP 소켓

wait                     =no 

user                     =level5                              // 데몬의 uid

server                   =/home/level4/tmp/backdoor // 서비스가 실행될때 부름

log_on_failure        += USERID                         //

}


대충 이정도이다.


xinetd란 서비스에 접속을 요청할시에 xinetd가 중간에 개입하여 허가된 사용자인지를 검사한다. 허가된 사용자가 맞다면, 해당 서비스를 요청해주는 일종의 검문소역할이라고 생각하면 된다.


자 이제 저 문구를 자세히 보자


서비스가 실행될때 /home/level4/tmp/backdoor 을 실행한다.

우리가 이 backdoor 파일을 조작하여 패스워드를 출력할 수 있지 않을까?


해보자! 먼저 저 경로를 따라간다.



vi를 이용하여 backdoor 파일을 만들어 주자!!!!

C언어 명령어를 이용하여 my-pass 를 실행시킬 수 있도록 만들어 주자.


흠 이제 finger 명령어를 치면 플래그가 나올까?





흠흠흠 잘 되지 않았다.


그 이유는 기본 finger 서비스의 경우 disable 옵션이 yes 라서 외부에서 접속할 경우엔 실행되지 않는다. 하지만 backdoor 서비스는 disable이 no 로 설정이되어있어 외부에서 접속할 경우엔 backdoor 서비스가 실행 된다.


finger 명령어는 외부 서버의 유저들의 정보도 가져올 수 있는 기능이 있는데,
finger [user]@[host] 명령어를 사용하면 된다.


백도어가 실행되어야지만 우리가 원하는 결과를 실행시킬 수 있으므로

finger @localhost 를 하면 우리가 지정한 backdoor 가 실행된다.



얄루 나왔다!

'pwnable > FTZ' 카테고리의 다른 글

level6  (0) 2016.08.03
level5  (0) 2016.08.03
level3  (0) 2016.08.03
level2  (0) 2016.08.03
level1  (0) 2016.08.02

다음 소스코드와 아래의 힌트가 있다


다음 코드는 autodig의 소스이다.


#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>


int main(int argc, char **argv){


    char cmd[100];


    if( argc!=2 ){

        printf( "Auto Digger Version 0.9\n" );

        printf( "Usage : %s host\n", argv[0] );

        exit(0);

    }


    strcpy( cmd, "dig @" );

    strcat( cmd, argv[1] );

    strcat( cmd, " version.bind chaos txt");


    system( cmd );


}


이를 이용하여 level4의 권한을 얻어라.


more hints.

- 동시에 여러 명령어를 사용하려면?

- 문자열 형태로 명령어를 전달하려면?



아 눈아프다...


일.단.은 setuid가 level4인 파일을 찾아보자.





아이 갓잇@@@@!!!


이제 저 C 소스코드를 분석해보자


만약 argv[ ]의 인자가 2개인 경우 들어온 인자를 "dig@" 뒤에 붙여준다.


예를들어 sabjilkng 라는 문자열을 넣어주면 dig@sabjilking 가 된다.


그리고 그 다음줄은 version.bind chaos txt라는 문자열을 

현재 cmd 명령어 뒤에 추가한다.


우리가 autodig sabjilkng 를 입력하면

$ dig@sabjilkng version.bind chaos txt 라는 명령어를 실행하게 된다.


more hint를 참고하면 동시에 여러 명령어를 사용하려면? 이라고 힌트가 나와 있다.


리눅스에서는 ;(세미콜론)을 사용해서 여러개의 명령어를 ; 로 구분하여 여러 명령어를 입력하고 실행시킬 수 있다.


그렇다면 dig@sabjilkng version.bind chaos txt ; my-pass 명령을 이용하여 level4 의 패스워드를 알아낼 수 있지 않을까?



level3 의 패스워드가 출력되었다 ㅠㅠ


그 이유는 dig가 실행된 다음 my-pass 명령어가 실행되었기 때문이다.


여기서 more hint의 두번째 줄을 보면 문자열 형태로 명령어를 전달하려면? 이라는 힌트가 있다. 그렇다면?


인자를 따옴표로 묶어서 하나의 문자열로 넣어줌으로써 해결할 수 있다.



잇힝 나왔다!!

'pwnable > FTZ' 카테고리의 다른 글

level6  (0) 2016.08.03
level5  (0) 2016.08.03
level4  (0) 2016.08.03
level2  (0) 2016.08.03
level1  (0) 2016.08.02


힌트다.


FTZ 문제의 경우 각 문제별로 힌트가 존재하니 한번 참고하여 풀어보길 바란다.


텍스트 모드 vi 는 크게 3가지 기능을 갖고 있다.


1. 텍스트  모드

2. 명령 모드

3. ex 모드


우리는 여기서 2의 명령 모드를 이용하여 쉘 명령어를 실행할 것이다.

여기서 쉘 명령어를 실행시키는 방법은 다음과 같다


:sh -  쉘로 나가기

:! 쉘 명령어 - 쉘 명령어를 한줄만 실행시킨다.

r! 쉘 명령어 - 쉘 명령의 결과를 화면에 출력시킨다. 


그렇다면 우리는 두번째 !쉘 명령어를 통해 my-pass를 실행시킬 수 있지 않을까?


하지만 vi 또는 vim에서 시도해본 결과 되지 않았다.


혹시... 낚시인가..... setuid가 level3으로 되어있는 파일이 있는지 찾아보자.




이런 젠장 ㅡㅡ;;


한번 실행시켜보자.



흠 뭔가 다른데? 저기서 한번 시도해보자!



얄루 나왔다!

'pwnable > FTZ' 카테고리의 다른 글

level6  (0) 2016.08.03
level5  (0) 2016.08.03
level4  (0) 2016.08.03
level3  (0) 2016.08.03
level1  (0) 2016.08.02


잇힝 힌트파일을 까보면 setuid가 level2 권한으로 설정된 파일을 찾으라는 것이다.


리눅스에는 uID와 gID 가 있다.


각각 user ID, group ID 인데 리눅스 기초를 꼭 공부하도록 하자.


이제 find 명령어를 이용해 찾아보자.


find / -perm +4000 -user level2

(찾아라 - 권한옵션 - user가 level2인)



다른 곳은 전부 Permission denied 를 뱉어낸 반면 단 하나의 파일이 걸려들어왔다.


잇힝 찾았다!!! 한번 실행해보자.



쉘을 내 놓거라



my-pass 때려주면 플래그가 나오게 된다.


이문제가 백도어의 원리를 설명해주고 있다.



'pwnable > FTZ' 카테고리의 다른 글

level6  (0) 2016.08.03
level5  (0) 2016.08.03
level4  (0) 2016.08.03
level3  (0) 2016.08.03
level2  (0) 2016.08.03

+ Recent posts