728x90
반응형

해킹 81

OverTheWire [Bandit Level 27]

Bandit Level 27 입니다. 해당 git주소 저장소를 다운받아 password를 찾으라고 합니다. password는 bandit27의 password와 같습니다. 파일을 다운로드 받아야 하니, 먼저 /tmp 디렉터리에 우리가 작업할 개인 디렉터리를 생성해 줍시다. git clone ssh://bandit27-git@localhost:2220/home/bandit27-git/repo git clone : git저장소의 파일을 다운로드 하는 명령어 명령어를 입력하고 bandit27-git의 password를 입력해주면 repo 디렉터리가 생성됩니다! 그리고 접근 경로에 반드시 :2220 을 붙여줘야 합니다. 이건 포트번호를 의미하는데요, 붙이지 않으면 22번 포트 접근에 대한 에러가 자꾸 뜨면서 안..

OverTheWire [Bandit Level 25]

Bandit Level 25 bandit26에 로그인하는것은 꽤 쉬울 것이다. bandit26의 쉘은 /bin/bash가 아닌 다른 것이다... 라고 합니다. 무슨 의미일까요? 일단 bandit26의 쉘부터 확인해 보도록 합시다. cat /etc/passwd | grep bandit26 /etc/passwd : 시스템에 등록된 계정정보가 저장된 중요 파일, 각 내용은 :(콜론)으로 구분된다 bandit26의 쉘은 특이하게도 /usr/bin/showtext 로군요. 어떤 파일일까? bandit26이 사용중인 showtext 쉘의 내용입니다. more : 파일을 읽어오는 명령어, 한번에 불러오는 cat과는 다르게 한줄씩 넘기며 읽을 수 있다 more ~/text.txt 명령어로 text.txt 파일을 읽어온..

OverTheWire [Bandit Level 24]

Bandit Level 24 입니다. 이번에도 쉘 스크립트 코드를 짜야 합니다. 30002번 포트에서 listen중인 데몬에게, bandit24의 password와 4자리 숫자로 구성된 비밀번호를 전달하면 bandit25의 password를 획득할 수 있다고 합니다. 단, 획득할 수 있는 방법은 10000가지의 비밀번호를 전부 대입해 보는 방법밖에는 없다고 합니다. 전부 하나하나 손으로 입력해야 할까요? 아니죠. brute-force(무작위 대입) 공격을 사용해야 합니다. 일단 포트를 확인해 보도록 하죠. nc로 30002번 포트에 접속하여, 입력값을 전달해 보았습니다. 포트는 문제가 없어 보입니다. 입력도 잘 되고요. 이제, 30002번 포트에게 0000부터 9999까지 자동으로 입력해 줄 코드를 짜보..

OverTheWire [Bandit Level 23]

Bandit Level 23 입니다. 이번에도 cron 문제네요. cron에서 프로그램이 반복 실행되고 있고.. /etc/cron.d 디렉터리를 확인하라고 합니다. 이 문제를 해결하기 위해선 쉘 스크립트를 직접 작성해야 한다고 하네요! cat /usr/bin/cronjob_bandit24.sh 파일입니다. 중간에 힌트가 있네요. /var/spool/$myname/foo 디렉터리의 모든 것을 실행한 후 삭제한다. 라는 뜻 같은데요 그 밑에 코드는.. 그걸 실행시키는 코드 같습니다. 해당 디렉터리의 모든것을 bandit24의 권한으로 실행 후 삭제한다. 그럼 어떻게 해야 할까요. bandit24가 직접 자신의 password를 우리에게 전달하도록 하면 되겠는걸요? 간단한 프로그램을 만들어 봅시다. 아! 그 ..

OverTheWire [Bandit Level 22]

Bandit Level 22 입니다. 문제 자체는 이전 레벨과 같습니다. cron을 확인하라고 합니다. 아래엔 추가로, 쉘 스크립트를 보는 것은 좋은 기술이라고 하네요. /etc/cron.d 디렉터리입니다. 우리는 bandit23의 password가 필요하니, cronjob_bandit23 을 확인해 보도록 합시다. 매분마다 /usr/bin/cronjob_bandit23.sh 가 실행되고 있습니다. 해당 파일을 확인해 봅시다. 짧은 코드가 있는데요.. myname=$(whoami) : whoami의 결과값을 변수 myname에 저장한다 ( whoami : 현재 접속한 계정명을 알려주는 명령어 ) mytarget=$(echo I am user $myname | md5sum | cut -d ' ' -f 1)..

OverTheWire [Bandit Level 21]

Bandit Level 21 입니다. /etc/crond.d 디렉터리에서 진행되고 있는 작업을 확인하라고 합니다. cron은 예약 스케줄러로써, 원하는 작업을 원하는 시간마다 자동으로 실행시킬 수 있는 데몬입니다. 여러 작업들이 등록되어 있습니다. 우리는 bandit22의 password가 필요하니, cronjob_bandit22 를 우선적으로 확인해 봅시다. * * * * * bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null cronjob_bandit22.sh 프로그램이 bandit22 계정의 권한으로 매일 매 시간 매 분마다 실행되고 있습니다. 표준출력/에러는 버리고 있구요. ( 출력만 버리는 것이지 프로그램은 제대로 실행됩니다 ) * * * * * : 분 시..

OverTheWire [Bandit Level 20]

Level 20 입니다. 이전 레벨과 같이 홈디렉터리에 setuid 파일이 있는데, 해당 프로그램은 지정한 포트의 localhost에 연결하는 프로그램 이라고 합니다. 이후, 상대방으로부터 bandit20의 password를 받게 되면 bandit21의 password를 반환한다고 합니다. 일단 해당 문제를 풀기 위해선, 하나의 시스템이 더 필요합니다. putty를 하나 더 켜서 bandit20 계정에 접속해 줍시다. 총 2개의 bandit20 계정을 켜두는 겁니다. nc -l 33333 -l 33333 : listen 33333, 33333포트를 수신대기 상태로 만듦 첫번째 시스템에서, setuid 프로그램이 접속하기 위한 포트를 열어줍시다. 포트번호는 다른 응용 프로그램과 겹치치 않게 아무 번호나 입..

OverTheWire [Bandit Level 19]

Bandit Level 19 입니다. password를 획득하려면, setuid binary 를 사용해야 한다고 합니다. 일단 홈 디렉터리를 확인해 볼까요? bandit20-do 파일을 발견하였습니다. 특이하게도 SetUID 권한이 적용되어 있네요. SetUID : 프로그램을 실행하는 동안, 실행한 계정이 누구든 파일 소유자의 권한을 얻게 됨 user(소유자)권한의 실행권한 부분에 s 또는 S가 있다면 SetUID가 부여된 파일입니다. ( 소문자 s는 x(실행권한) 도 함께 부여되어 있는 상태, 대문자 S는 x(실행권한)은 없는 상태 해당 파일은 소유자가 bandit20 이기 때문에, 실행하는 동안 bandit20의 권한을 얻게 되겠죠. 파일을 한번 실행해 봅시다. ./bandit20-do 실행은 실패했..

OverTheWire [Bandit Level 18]

Bandit Level 18 입니다. password는 readme 파일에 저장되지만, SSH로 로그인하면 바로 로그아웃되도록 누군가가 .bashrc 파일을 수정했다고 합니다. 접속 시도하면 화면을 볼 새도 없이 바로 튕겨버립니다. 어떻게 해야 할까? 어찌되었든 "접속 후에" 튕기는 것이기 때문에, 접속 명령과 동시에 명령어를 전달하면 됩니다. ssh bandit18@bandit.labs.overthewire.org -p 2220 cat readme ssh 연결 명령어 뒤에 바로 이어서 cat readme 를 붙여 주시면 됩니다. 이후 password 입력 후, readme 파일이 출력됩니다. =============================================== putty에서 bandit..

OverTheWire [Bandit Level 17]

Bandit Level 17 입니다. password는 passwords.new 파일에 저장되어 있다고 합니다. 그리고, passwords.old 와 passwords.new 파일의 내용 중 유일하게 변경된 내용이 password 라고 합니다. diff 명령어를 사용하면 쉽게 찾을 수 있을 것 같습니다. diff passwords.old passwords.new diff : 파일의 차이점을 찾는 명령어 위쪽이 old 파일의 내용이고, 아래쪽이 new 파일의 내용입니다. 문제에선 new에 있는 내용이 password라고 하였으니, 아래쪽 값이 bandit18의 password 되겠습니다.

728x90
반응형