전체 글 156

[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로 패스워드를 알수없다. 따라서 우리는 한번의..

[pwnable.xyz] note ( write - up )

main함수에서 1을 입력하면 edit note 함수를 실행시키고, 2를 누르면 edit desc함수를 실행시킨다.edit not함수에서는 입력받을 길이를 정하고, 문자열을 입력한다. 하지만 입력받을 길이에 제한을 두지 않는다. 문자열을 입력할때는 전역변수 buf에 입력한다. 이렇게 입력받은 buf는 전역변수 s에 복사된다. edit desc에서는 buf에 20만큼을 입력받는다. 위의 메모리 구조를 보자. 문자열 s의 32바이트 아래 전역변수 buf가 있다.따라서 s를 오버플로우시켜 buf를 read함수의 got로 변조시킨다. 그리고 edit desc에다가 win함수의 주소를 써넣은 후, edit desc함수를 한번 더 호출시켜 read함수를 또 호출한다.이렇게하면 플래그를 볼수있다. 익스코드는 다음과 ..