System Hacking (pwnable)/hackerschool FTZ Write-up 20

[FTZ] level10 ( write - up )

우리가 했던 1번~9번문제와는 다르게 여기서는 setuid가 걸려있는 취약점이 없다.하지만 여기서 현재 두명의 사용자가 비밀스러운 대화를 나누고 있다고 하였고, 공유메모리의 key값도 주었다.따라서 우리는 코딩으로 두사람의 대화를 도청할 수 있다. 코드는 다음과 같다.코드를 대략적으로 설명해보면.. key_t key : 공유메모리를 구별하는 key값이다. // ★몹시중요★문제에서 주어짐! int size : 공유메모리 크기를 결정한다. // 보통 0으로 함. int shmflg : 여러가지 옵션을 추가할 수 있다. // 현재 공유메모리가 돌고있으므로 CREATE로 옵션 추가!- IPC_CREATE : 퍼미션 0666을 설정한다. 첫번째인수 key에 해당하는 메모리가 없으면 공유메모리를 생성한다.- IPC..

[FTZ] level9 ( write - up )

buf2와 go가같으면 setuid를 level10으로 설정해주고 /bin/sh를 실행해준다!따라서 우리는 buf2 == go로 만들어주어야 한다. 위의 소스코드는 fgets 부분에서 bof가 터진다.buf를 40만큼 입력받는데 buf의 크기는 10이다.따라서 10을 넘어서 입력을 받으면 언젠가는 buf2를 침범하게 될것이다.buf와 buf2사이의 거리는 10이지만, 리눅스 자체에서 생성된 dummy data로 인해 값이 약간 다르다.하지만 이러한 dummy data가 크지는 않을것임을 두 변수사이의 거리가 10밖에 되지 않으므로 예측할수있다.따라서 약간의 게싱을 해주었다. 풀었다!

[FTZ] level8 ( wirte - up )

하던대로 힌트를 확인해본다. 일단 shadow 파일은 암호에 관한 정보가 저장되어있는 파일이다.그리고 그 파일의 크기가 2700이라고 한다.우리는 find 명령어를 이용하여 파일의 크기를 입력하여 찾을 생각을 해볼수있다.-size 2700으로 2700이라는 크기를 지정해주고 크기의 단위 w,d,k,c를 하나하나씩 입력해가며 출력값을 찾아본다. -size 2700c를 했을때 .txt파일이 나온다. 이건 누가봐도 cat하고싶게 생겼다.그래서 cat을 해보면..아까 말했듯이 shadow파일은 패스워드에 관한 정보를 담고있다고 했다. 따라서 출력된 문자열은 암호화된 문자열임을 알수있다.이걸 John the Ripper 라는암호 복호화 툴을 사용하면 해독할 수 있다.john the ripper로 복호화 하였다.중..

[FTZ] level7 ( write - up )

늘 그랬듯이 힌트를 확인했더니 이렇다고 한다. 그래서 /usr/bin에 들어가서 level7을 실행시켰더니 wrong.txt라는 파일이 없다고 한다.이건 개인이 직접 구축한 서버라 파일을 찾을수가 없다.원래 FTZ서버에만 있는 파일인데, 파일이 터져버려서 구글을 이용해서 파일을 가져왔다.어쨌든, 무슨값을 입력해도 오류가 뜬다. 패스워드가 틀렸다고 함과 동시에 모스부호같은 이상한 칭구가 뜬다. 힌트를 통해 정보를 얻으면 모스부호같은 친구가 2진수일거라는 생각이 든다.-와 _두개로만 이루어져있기 때문이다. -를 1, _를 0이라고 하면..1101101 1100001 1110100 1100101 -2진수로는! 109 97 116 101 -10진수로는! 이다.근데 숫자 범위가 너무 아스키코드 스럽다. 그래서 아..

[FTZ] level6 ( write - up )

시작하면 바로 이런 화면이 뜬다.그리고 아무키나 누르면!!바로 텔넷 접속 서비스로 넘어가지게 된다.하이텔, 나우누리, 천리안은 모두 서비스가 종료된 텔넷 서비스라 어떤 값을 입력해도 변화가 없다.이상황에서는 패스워드를 절대로 알아낼수없을듯 하다.그러면 접속서비스 화면으로 넘어가기 전에 문제를 해결할 방법을 찾아야겠다. 그것은 바로 Ctrl + C 시그널을 보내는것이다.Ctrl + D 시그널도 보내보았는데 Ctrl + C 시그널만 정상적으로 작동하였다.그 후 ls로 파일을 확인해보았더니 password가 있어서 password를 알 수 있었다.

[FTZ] level5 ( write - up )

/usr/bin/level5 프로그램은 level6의 setuid가 걸려있다.따라서 이 프로그램이 만드는 임시파일은 level6의 권한이다.하지만 .tmp 확장자인것으로 보아 임시파일이라 파일이 생성되자마자 사라진다. ㅠㅠ 실제로 실행시키자마자 확인해도 파일이 없는것을 볼수있다. 따라서 우리는 심볼릭 링크를 이용해서 문제를 해결할수있다.juntae라는 파일을 하나 만들어주고, level5.tmp라는 이름의 심볼릭링크를 하나 만든다.이 심볼릭 링크는 juntae라는 파일을 참조하게 된다. 만약 level5 프로그램을 실행시키면 level5.tmp라는 프로그램이 이미 만들어둔 심볼릭 링크에 값을 쓰게 될것이다.그 후 level5.tmp는 다시 삭제될것이다. 하지만 이미 심볼릭링크로 juntae에 값을 연결해..

[FTZ] level4 ( write - up )

힌트를 확인하고, 확인해본다.xinetd.d이 디렉토리였다는것을 알수있다.따라서 디렉토리로 들어가서, 안에 파일을 찾던 도중 backdoor파일을 찾을 수 있었다.백도어 파일을 확인해보니 finger service를 설정해주고있었다.일단 핵심 부분만 말하면 level5의 권한으로 /home/level4/tmp/backdoor파일을 실행시키는 서비스이다.하지만 /home/level4/tmp에는 아무런 파일도 존재하지 않는다.따라서 우리가 직접 프로그래밍을 통해 패스워드를 출력해주는 프로그램을 만들면 될듯 하다. vi로 backdoor.c 를 만든다.쓱쓱싹싹 코딩을 하고, :wq를 입력하여 나간다. 그리고나서 gcc로 컴파일하여 finger 서비스를 실행시키면 패스워드를 볼 수 있다.level5 passwo..

[FTZ] level3 ( write - up )

이번 힌트는 좀 길다. 간단하게 말하자면 이 프로그램은 인자로 host를 넘겨받는다.그 후 dig @ host version.bind chaos txt를 실행시키는 것이다.dig는 DNS 서버의 정보를 가져와준다. ( 이런것이 있다는것만 알아두면 될듯 하다 )하지만 여기서 핵심은 인자로 호스트를 넘겨받으면서 문자열 형태로 여러 명령어를 전달할수있다는것에 있다. 핵심이 될 두가지는 " " 와 ; 이다.리눅스에서 ; 는 첫번째로 ; 앞에있는 명령어를 실행시키고, 두번째로 ; 뒤에있는 명령어를 실행시킨다는 의미이다.그리고 이걸 문자열로 전달하려면 " " 와같이 전달해주어야 한다.따라서.. 이렇게 level4의 패스워드를 얻을수있었다.level4 password is suck my brain

[FTZ] level2 ( write - up )

그렇다고 한다.일단 level1에서 했던대로 setuid가 걸려있는 파일을 찾기 위해 find 명령어를 이용한다. /usr/bin에 있는 editor라는 파일을 찾을수있다. 실행시켜보면 vim 편집기가 실행된다.vim에서 !를 활용하면 쉘의 명령을 실행시키는게 가능하다. 지금 이 vim에는 setuid가 걸려있다는걸 인지하자.그러면 여기서 실행하는 명령어는 level3의 권한이다.따라서 /bin/sh나 my-pass명령어를 실행하면 level3의 권한을 획득하거나, level3의 password를 볼 수 있을것이다. level3 password is "can you fly?".

[FTZ] level1 ( write - up )

FTZ level1 에서 우리가 해야할것은 level2 setuid권한이 걸린 파일을 찾는것이다. 리눅스에서는 파일을 찾을때 find 명령어를 사용한다. find / -user level2 -perm -4000 2>/dev/null 위 명령어는 모든 디렉토리 ( / ) 중 level2 user의 것이며 ..setuid( -perm -4000 )가 걸려있는 파일을 찾는다는 명령어이다./dev/null은 쓰레기통의 의미이다. 출력이 되었을때 오류가 나면, 화면이 지저분하므로 쓰레기통에 넣어준다는 의미이다. /bin에 있는 ExecuteMe을 찾을 수 있다.누가봐도 실행시켜주라는 의미같다. level2의 권한으로 명령어를 하나를 실행시켜준다.패스워드를 my-pass로 패스워드를 알수없다. 따라서 우리는 한번의..