분류 전체보기 - 148

  1. FTZ_level6 2016.01.11
  2. FTZ_level5 2016.01.11
  3. FTZ_level4 2016.01.11
  4. FTZ_level3 2016.01.11
  5. FTZ_level2 2016.01.11
  6. FTZ_level1 2016.01.11
  7. 했던거 진짜 없다.... 1 2016.01.11
  8. 비공개로 되어있던거 공개로 몇개 전환 2016.01.11

FTZ_level6

해킹/FTZ 1~10 2016. 1. 11. 22:06


level6으로 로그인하니 다짜고짜 힌트를 던진다.... 이게 뭐지 인포샵이나 bbs나 처음 들어본다.





음 뭔가 선택하라길래 일단 1번을 선택하고 무슨일이 일어나는지 보고있는데... 아무 반응이 없다.

그냥 진짜 하이텔에 연결하는 모양이다.....

일단 쉘을 보기 위해서 숫자를 선택하지 않고 ctrl+c를 눌러보니




허허허... ctrl+c를 막아놨다... 뭐지.. 하면서 몇번 접속해보다가.. 우연히 앞의 힌트화면에서 ctrl+c를 눌러봤다.




어라? 빠져나온것은 물론이고 password가 떡하니 놓여있다... 참... ctrl+c를 하는 문제였던 것이다.


뭐 대강은 알고있지만 참고를 위해 적어놓자면

ctrl+z : 백그라운드로 작업전환
ctrl+d : 정상종료

ctrl+c : 강제종료

라고한다. 리눅스상에서 쓰이는 단축키다. 알아두면 다 어딘가 쓸데가 있겠지.




ps.이번에 다시 문제를 풀때는 이렇게 풀지를 않았다. level5를 풀고 그자리에서 바로 su로 들어갔더니 바로 쉘이 떠서 ctrl+c를 누를 필요도 없었다. 여러모로 허점이 많은 문제인듯.

'해킹 > FTZ 1~10' 카테고리의 다른 글

FTZ_level8  (0) 2016.01.11
FTZ_level7  (0) 2016.01.11
FTZ_level5  (0) 2016.01.11
FTZ_level4  (0) 2016.01.11
FTZ_level3  (0) 2016.01.11
Tags
Social

FTZ_level5

해킹/FTZ 1~10 2016. 1. 11. 19:03


버릇처럼 cat hint를 하면서 시작.

레이스컨디션과 관련된 문제로 보인다.

usr/bin/level5라는 파일이 실행되면서 임시파일을 생성해서 사용하는데 물론 임시파일이니 level5프로그램이 종료되면 사라질 것이다.

이게 사라지기전에 가로채서 내용을 읽으면 될것이다.


라고 생각하고 반복문을 돌려서 잠깐동안 생성된 level5.tmp파일을 읽어보려고 했으나... 안타깝게도 나중에 디버깅을 해본 결과 level5.tmp파일에는 level5가 읽을 수 있는 권한이 없다.


자 그럼 생각할 수 있는 방법은 이게 삭제되는걸 막거나 삭제되기 전에 어딘가 옮겨놓는 방법인데...


1.먼저 가장 쉬운 방법은 level5.tmp라는 파일을 먼저 만들어 놓고 level6에게 그것에 대한 쓰기권한을 주는 것이다.

level6이 level5.tmp가 있는지 먼저 체크하지 않는 취약한 프로그램이라는 가정 하에, 그렇게되면 level6은 level5가 미리 만들어놓은 level5.tmp라는 파일을 쓰기모드로 열게 되고 거기다가 비밀번호를 적어넣을 수 있다. 하지만 그리고 나서 level5.tmp를 삭제하려고 할 때 해당파일의 소유자가 level5이니 삭제할 수가 없다. 그래서 파일이 남아있게 되고 그걸 읽으면 되는 문제인것.


2.만약 /usr/bin/level5가 root권한으로 실행되는 프로그램이라고 가정하면

level5.tmp파일을 level5권한으로 만든다고 해도 root의 권한으로 삭제할 수 있다. 이 경우에는 심볼릭 링크를 사용하면 되는데

예를들어 level5_oxqo라는 파일을 만들고 /tmp폴더 밑에 level5.tmp라는 심볼릭 링크를 만들어 level5_oxqo를 가리키게 하는 것이다.

그러면 프로그램은 level5.tmp를 열어서 패스워드를 쓴 후 지우지만 그 내용은 level5_oxqo에 적히게 되고 level5.tmp를 삭제한다고 해도 level5_oxqo라는 파일에 내용이 남아있게 되는 것이다.


뭐 여기서는 level6의 권한으로 프로그램이 돌아가므로 굳이 2번의 방식을 택할 필요가 없다.



이런식으로 level5.tmp라는 빈 파일을 만들어놓고 프로그램을 돌리면 지워지지 않은 임시파일을 읽을 수 있다.

끝-


'해킹 > FTZ 1~10' 카테고리의 다른 글

FTZ_level7  (0) 2016.01.11
FTZ_level6  (0) 2016.01.11
FTZ_level4  (0) 2016.01.11
FTZ_level3  (0) 2016.01.11
FTZ_level2  (0) 2016.01.11
Tags
Social

FTZ_level4

해킹/FTZ 1~10 2016. 1. 11. 16:55


level4의 힌트를 열어보니 백도어가 있단다. 들어가서 확인해보자.




음 확실히 backdoor가 있다. 실행시켜봤다.




실행이 되지 않아서 권한을 확인해보니 읽기권한밖에 없었다. 읽어보니 finger라는 서비스의 정의같은 내용이다.

xinetd는 슈퍼데몬으로서 서비스를 전달받아서 다시 실행시키는 역할을 한다. 즉 finger라는 서비스를 이 서버에 요청하면 xinetd는 해당 폴더 안에서 finger라는 서비스를 찾아서 실행시켜줄텐데 여기선 정상적인 finger라는 서비스 대신에 backdoor로 서비스가 대체된 것으로 보인다.

그래서 이 서비스를 요청하면 xinetd는 자신이 backdoor파일 안의 정보에 의해 server라고 명시되어 있는 /home/level4/tmp/backdoor라는 프로그램을 실행시켜줄 것이다. 어떤 프로그램인지 실행시켜보자.




그런 파일은 없단다. 하지만 level4/tmp 에 존재하는 파일이니 내가 직접 작성할 수 있을 것이다.

cd /home/level4/tmp로 해당 폴더에 들어가서

vi backdoor.c로 c파일을 아래와같이 작성했다.


my-pass를 쉘에 입력해주는 간단한 프로그램이다.



gcc -o backdoor backdoor.c 명령어로 컴파일을 해준 뒤 xinetd에 finger 서비스를 요청했다.

@localhost는 원래 ip가 들어갈 자리인데 지금 접속해있는 ftz서버 자신에게 보내는 것이니 @localhost 혹은 @127.0.0.1로 해주면 되겠다.

이번에는 어쩌다보니 패스워드도 같이 캡쳐에 들어갔지만... 뭐 검색하면 다 나오는걸 뭐..

끝-



'해킹 > FTZ 1~10' 카테고리의 다른 글

FTZ_level6  (0) 2016.01.11
FTZ_level5  (0) 2016.01.11
FTZ_level3  (0) 2016.01.11
FTZ_level2  (0) 2016.01.11
FTZ_level1  (0) 2016.01.11
Tags
Social

FTZ_level3

해킹/FTZ 1~10 2016. 1. 11. 16:21


level3의 힌트다.

autodig이라는 파일의 소스코드인데 dig이라는 명령어가 뭐 메일 비슷한거였나... 아무튼 별로 중요하지 않다.

argv[1]이 중간에 들어가고 그렇게 파싱한 문자열을 그대로 system 함수로 보내기때문에.. ;로 끊어주고 명령어 입력하면 된다.

하지만 ;를 하면 지금 열려있는 level3의 bash에서도 명령어의 끝으로 인식하기 때문에 그 뒷쪽은 argv로 들어가지 않는다.

그래서 "를 사용해서 묶어줘서 전체가 다 argv[1]으로 들어가도록 만들어 줘야한다.




autodig이라는 파일을 찾은다음 ";bash;"를 입력. 성공적으로 level4의 쉘을 띄웠다.

마찬가지로 my-pass에서 나오는 패스워드 출력화면은 생략.

끝-

'해킹 > FTZ 1~10' 카테고리의 다른 글

FTZ_level6  (0) 2016.01.11
FTZ_level5  (0) 2016.01.11
FTZ_level4  (0) 2016.01.11
FTZ_level2  (0) 2016.01.11
FTZ_level1  (0) 2016.01.11
Tags
Social

FTZ_level2

해킹/FTZ 1~10 2016. 1. 11. 16:09


음.. 힌트가 뭔가 생략되어있다. 대충 로그인 하면 바로 문제파일을 떨궈주는 형식에 익숙해져서인지 저 힌트를 보고 VIM에 뭐가 취약점이 있는줄 알았다.

하지만 그런건 아니고 setuid 권한이 걸린 VIM 프로그램을 따로 만들어서 어딘가에 숨겨놓은 문제다. VIM자체 취약점을 찾는 문제일리가 없지..



우선은 뭐 level1과 마찬가지로 권한걸린 파일을 찾고 실행시켜봤다.




음, setuid 걸린 VIM이 열린다.

이거 나 몰랐던거같은데 gdb에서도 !bash 이런식으로 디버깅하다가 쉘을 사용했던 기억을 더듬어서 똑같이 !my-pass를 :를눌러서 VIM이 명령을 받는 상태에서 입력해봤더니 플래그가 출력되었다. 플래그 출력화면은 생략.

끝-






'해킹 > FTZ 1~10' 카테고리의 다른 글

FTZ_level6  (0) 2016.01.11
FTZ_level5  (0) 2016.01.11
FTZ_level4  (0) 2016.01.11
FTZ_level3  (0) 2016.01.11
FTZ_level1  (0) 2016.01.11
Tags
Social

FTZ_level1

해킹/FTZ 1~10 2016. 1. 11. 16:00

level1의 패스워드는 level1이다.




들어가서 level1폴더안의 내용을 보니 hint가 보인다. 읽어보니 level2 권한에 setuid가 걸린 파일을 찾으란다.

find명령어를 사용할 수 있는가를 묻는듯.


find / -perm -4000 -user level2 2>/dev/null


find 다음의 /는 루트 디렉토리 '/'로부터 모든 파일을 찾겠다는 것이고

-user level2는 파일의 소유자가 level2인 파일을 찾겠다는 것이다.

-perm -4000은 스티키비트에 조건을 줘서 검색하는 것인데

쓰고는 있지만 이것에 대해서 아직까지도 정확히 모르고 있었다는게 부끄럽다..


일반적인 파일의 권한은 3자리로 뒷쪽의 000 세개의 비트는 각각 유저, 그룹, 아더의 세가지 권한을 나타낸다.

이것들을 각각 4, 2, 1 세 숫자의 덧셈의 결과로 나타낼 수 있는데. 4는 읽기, 2는 쓰기, 1은 실행 권한을 말한다.

즉 권한이 600이라면 소유자 자신에 대하여는 6=4+2이므로 읽기와 쓰기의 권한만 있고 실행권한은 없는 것이다. 나머지 두비트가 00이기 때문에 그룹과 아더 유저들은 이 파일에 대하여 어떠한 권한도 가지지 않는 것이다.

이부분이야 뭐 알고 있었던 것인데... 어렴풋이만 알고 있었던 부분은 바로 네자리 권한에 관한 것.


-perm -4000에서 제일 첫번째 비트인 4, 저 자리가 특수권한을 나타낸다.

이것도 마찬가지로 4,2,1 세가지의 조합으로 나타나는데 4는 SUID, 2는 GUID, 1은 stickbit를 나타낸다.

4와 2는 알고있던 대로 권한을 파일을 사용하는 일반사용자에게 유저나 그룹의 권한을 양도하는 기능을 뜻한다.

1 스티키비트는 소유자인 자신과 root에게만 파일의 삭제/변경 권한을 주겠다는 뜻이다.

저기서 -4000인 이유는 setuid를 찾아야 하기 때문에고 '-'가 붙은 이유는 최소 4000, 즉 4000보다 큰 권한을 가지는 파일을 찾겠다는 뜻이다.


추가로 생각없이 쓰던 2>/dev/null에 관해서인데.

먼저 앞의 숫자의 2는 표준 에러를 나타낸다. fd관련해서 공부할때

0:표준입력

1:표준출력

2:표준에러

이런걸 공부했던 적이 있는데 아마 같은 의미일듯.

그리고 /dev/null은 이 파일에 쓰는 모든 출력들을 null로 바꿔주는 역할을 한다고 한다.

'>'를 통해서 표준에러인 2를 /dev/null로 보내준다는 것은 즉 에러메세지를 전부 화면에 표시하지 않고 넘어가겠다는 뜻이다.

그래서 그냥 찾으면 ~~~~ permission denied 처럼 찾았지만 권한이 없다고 출력하는 필요없는 에러메시지를 보지 않을 수 있다.


가볍게 하려고 시작한FTZ인데 첫문제부터 공부를 좀 설렁설렁 하고 넘어갔다는 생각이 들었다.




아무튼 위 명령어를 실행해서 찾아보니 파일이 하나 나왔다. 실행시켜보자.




해당파일을 실행시키니 my-pass와 chmod를 제외하고 명령어를 실행시켜주겠단다.

처음 풀때는 my-pass가 리눅스에서 기본으로 제공하는 프로그램인줄 알았다..; 알고보니 ftz에서 비밀번호를 알려주기 위해 따로 만들어 놓은 프로그램이었다...허허

아무튼 비밀번호를 알기 위해서는 my-pass가 필요한데 실행할 수 없으니 쉘을 여는 명령어인 sh를 입력하면 된다.

프로그램에서 열어준 쉘은 my-pass를 사용할 수 없지만 새로 열린 쉘은 그런 제약이 없으니 my-pass를 입력해주면 level2의 패스워드가 출력된다.

끝-



ps. chmod를 명령어에서 제외한 이유에 대해서 좀 생각해봤는데 예컨데 /tmp 밑에 system("my-pass");라는 명령어를 실행하는 파일을 만들어 놓고 이것을 chmod를 통해 권한상승을 할 수 있기 때문인것 같다. 문제의 의도가 쉘을 열수 있는가를 묻는 것이기 때문에 그런거는 같은데.. 조금 째째하다는 생각도 든다.



'해킹 > FTZ 1~10' 카테고리의 다른 글

FTZ_level6  (0) 2016.01.11
FTZ_level5  (0) 2016.01.11
FTZ_level4  (0) 2016.01.11
FTZ_level3  (0) 2016.01.11
FTZ_level2  (0) 2016.01.11
Tags
Social

했던거 진짜 없다....

정리/했던거 정리 2016. 1. 11. 14:56

CTF를 좀 활발히 나가고 예탈하더라도 순위정도는 적어놓으려고 했는데..

지난학기 참... 여러가지 일들을 겪으면서 막상 적어놓고 자랑할만한 일은 없었던듯..


---------------------------------------------------------------------------------------

hackerschool FTZ 클리어

LOB 클리어

pwnable.kr Toddler's Bottle 클리어

2015년 hust 참여.. 한문젠가 풀었나

2015년 hdcon... 허허 참여 그래 참여

---------------------------------------------------------------------------------------


우선은 여까지 쓰고.. 채워나가자 채워나가.

Tags
Social