해킹 동아리 I.Sly()/방학 스터디 활동 36

[bandit] level 22 -> level 23

해설) 내용은 전단계와 같다. 이번에는 bandit23을 알아보아야 한다. 저번 단계와 똑같다. cat을 이용해 읽어보자 명령어 내용) myname = whoami의 결과를 저장한다. mytarget = I am user [username]을 md5 암호화를 통해 나온 암호문을 cut 명령어를 이용해 각 필드를 띄어쓰기로 구분하며 그 중 첫 번째 필드의 값을 mytarget에 저장한다. 그 다음 myname 유저의 패스워드를 복사해서 /tmp/I am user [myname] 파일에 저장한다. echo I am user $myname | md5sum | cut -d ' ' -f 1 에다가 $myname 대신에 bandit23을 넣어주어 입력하였다. 그렇다면 출력된 결과값은 mytarget이다. 즉, /t..

[bandit] level 21 -> level 22

해설) 프로그램은 cron에 의해 정기적으로 실행되고, 이것은 시간기반 작업 스케쥴러이다. /etc/cron.d/를 들여다보고, 어떤 명령이 실행되는 지를 보아라. cron이란? Unix 운영체제에서 특정한 시간에 특정한 작업을 실행시키기 위한 데몬이다. 예를 들어 특정 서버에 가서 특정 데이터를 받아오는 등의 기능을 정해진 시간에 수행시킬 수 있다. 서버는 24시간 항상 돌아가는데, 이 점을 이용한 방법이다. 이러한 작업을 설정하는 파일을 Crontab 이라고 한다. 리눅스에서는 해당 파일이 /etc/cron.d 디렉토리에 저장되고, 해당 파일을 조작할 땐 crontab 명령어를 이용하면 된다. /etc/cron.d/로 이동해 파일들을 훑어보자. bandit22의 패스워드를 알아내는 것이 목표이기 때문..

[bandit] level 20 -> level 21

해설) 홈 디렉토리에는 setuid binary가 있다: 이것은 너가 집중하고자 하는 포트의 localhost와 명령어를 사용하는 것과 같이 연결을 해준다. 그러면 그것은 연결로부터 텍스트를 읽고 이것은 전단계(bandit20)의 패스워드와 비교한다. 만약 패스워드가 맞다면, 이것은 패스워드를 다음단계(bandit21)의 것으로 바꿔줄 것이다. NOTE: 너가 생각하는 대로 작동되는 지를 보려면 너의 네트워크로 연결을 시도해보아라. 저번에 배웠던 nc 명령어와 echo 명령어를 사용해 이번 단계의 패스워드를 전송시킨다. nc를 이용해 새롭게 포트를 열어줄 때엔 -l 옵션을 사용하며, 포트번호는 임의로 7777로 한다. 이를 백그라운드에서 실행하고자 할 때에는 뒤에 &를 붙인다. 7777포트를 열고 패스워..

[bandit] level 19 -> level 20

해설) 다음 레벨에 접근하기 위해서는, 너는 홈디렉토리에 있는 setuid 바이너리를 이용해야한다. 인자 없이 실행한 후에 사용법을 익히도록 하자. 이 레벨의 패스워드는 너가 setuid를 이용한 후의 공용공간(/etc/bandit_pass)에 있다. setuid란? 파일 실행 시 파일 소유자 권한으로 실행시키는 것을 말한다. ls -al 로 파일 목록을 확인한다. bandit20-do 라는 파일이 보인다. 띠용.... cat 쓰는 건 아닌가보다. 다시 보니 문제에서 우선 인자(명령어?) 없이 실행을 해보라고 나와있다. ./bandit20-do 를 입력하였더니, 다른 유저와 같이 명령어를 쓰라는 멘트가 나온다. 그래서 뒤에다가 인자를 넣어주었더니 패스워드가 나왔다. 성공은 했지만 무슨 소리인지는 아직 모..

[bandit] level 18 -> level 19

해설) 다음 레벨의 패스워드는 파일 readme에 저장되어있다. 불행하게도, 누군가가 .bashrc를 수정해 너가 SSH로 로그인하면 바로 로그아웃하게 만들었다. 저번 단계에서 진짜 로그인과 동시에 로그아웃이 되어 매우 당황했다. 파일 readme에 있으면 cat 명령어를 쓰면 되는데, 자동로그아웃이 되니 쓸 수가 없다. 이럴 땐, ssh 명령어의 뒷부분에 원하는 동작을 입력하면, 원격으로 실행이 가능하다. 저번시간에 알아놓았던 bandit18의 패스워드를 입력하면 bandit19의 패스워드가 출력된다.

[bandit] level 17 -> level 18

해설) 홈 디렉토리에 2개의 파일이 있다: passwords.old 와 passwords.new 다음 레벨의 패스워드는 passwords.new에 있고, passwords.old 와 passwords.new의 유일하게 다른 행이다. NOTE: 만약 너가 이 레벨을 해결하고 bandit18에 로그인하려 할 때에 'ByeBye!'를 본다면, 이것은 다음레벨 bandit19와 관련되어있다. 진짜로 두 파일이 있다. 두 파일을 비교해 유일하게 다른 행을 찾으면 그게 패스워드라는 뜻이겠지? diff 명령어를 쓴다. 두 파일의 다른 부분을 출력해준다. 사용법은 다음과 같다. diff [파일1] [파일2] 위의 kfBf... 가 패스워드이다. (???) 성공!은 개뿔이고 진짜 저걸 입력해주었더니 18단계 로그인과 동..

[bandit] level 16 -> level 17

해설) 다음 레벨에 로그인할 자격은 현재 레벨의 패스워드를 localhost 의 포트 31000과 32000 사이에 보내면 얻을 수 있다. 우선 이 포트들에 어떤 서버가 반응해주는 지에 대해 알아내라. 그리고 어떤 것이 SSL을 말하고 어떤 것이 그렇지 않는 지를 찾아내라. 다음 자격을 주는 서버는 오직 1개이고, 다른 것들은 단순히 너가 입력한 것을 출력할 것이다. 상식적으로 포트 31000부터 32000까지 하나하나 다 치는 것은 아닌 걸 알 수 있다.. 포트 번호를 검색하기 위해 nmap 명령어를 사용한다. 사용법은 다음과 같다. nmap -p [포트번호] [서버이름] 범위 안의 포트를 찾고 싶다면, 하이픈(-)을 이용해 범위를 표현할 수 있다. 총 다섯개의 포트가 검색되었다! 다섯개니까 opens..

[bandit] level 15 -> level 16

해설) 다음 레벨의 패스워드는 현 레벨의 패스워드를 SSL 암호화를 이용해 localhost의 포트 30001에 전송함으로써 얻을 수 있다. 도움말: "HEARTBEATING" 과 "Read R BLOCK" 를 얻는 것? -ign_eof를 이용하고 manpage 섹션의 "CONNECTED COMMANDS"를 읽어라. 'R' 와 'Q' 옆에, 'B'명령어 또한 이 버전에서 작동한다... 도움말 때문에 더 뭔 소리인지 모르겠지만 도움이 되니까 도움말이겠지? 일단 SSL에 대해 알아보자. SSL (Secure Socket Layer) 보안 소켓 레이어라고도 하며, 전자상거래 등의 보안을 목적으로 넷스케이프사에서 개발한 규약이다. 이후에 TLS (Transport Layer Security)라는 이름으로 바뀌었..

[bandit] level 14 -> level 15

해설) 다음 레벨의 패스워드는 현재 레벨의 패스워드를 localhost의 포트 30000에 전송해서 얻을 수 있다. 현재 레벨의 패스워드가 뭐였더라? 하고 생각해보니... 레벨 13 -> 14 에서 언급이 되어있었다. /etc/bandit_pass/bandit14에 저장되어있다고 나와있다. ssh통신을 쓰는 건 답이 아닌 것 같다. 그럼 nc를 써보도록 하자. NetCat 이란? TCP, UDP를 사용해서 네트워크에 연결해서 데이터를 읽고 쓸 때 사용되는 유틸리티이다. network cat의 줄임말로 네트워크의 연결상태를 읽거나 쓸 때 주로 사용되며, 네트워크에 대한 디버깅, 네트워크 테스트 등을 할 때 주로 사용된다. 기본 사용법은 다음과 같다. $ nc [서버이름] [포트번호] nc를 이용해 서버에 ..

[bandit] level 13 -> level 14

해설) 다음 레벨의 패스워드는 /etc/bandit_pass/bandit14 에 저장되어있고 오직 유저 bandit14에 의해서만 읽어질 수 있다. 이 레벨을 위해서, 너는 다음 패스워드를 얻지는 못하지만, 다음 레벨로 로그인할 때에 쓰일 사적인 SSH를 얻을 것이다. Note: localhost는 너가 작업하고 있는 가상머신에 관련된 호스트이름이다. 뭔가 쓰이는 명령어 또한 달라졌을 것 같아 확인해 보았다. 역시 초면이네요. 흐음... ssh를 쓰는가보다. ssh-key 란? ssh 접속을 할 땐 비밀번호가 아닌 sshkey를 넘겨 로그인하는 방법이 있다. sshkey는 ssh-keygen 명령어를 이용해 만들 수 있는데, public key와 private key가 생성된다. public key는 서..