The Blog를 눌러서 문제 서버에 접근해보면 기사들을 접할 수 있다. 소스를 확인해보면 여러 정보를 획득할 수 있다. 위 정보를 통해서 상위 경로로 올라가다보면 아래와 같이 디렉터리 인덱싱이 되는 것을 확인할 수 있고 flag/ 디렉터리가 있다는 것을 알 수 있다. 하지만, 해당 디렉터리에 접근해보면 Forbidden 메시지와 함께 접근할 수 없다. 다시 소스를 확인해보면 위와 같은 정보를 확인할 수 있고 LFI 취약점이 발생할 수 있다는 가정을 하고 아래와 같이 시도하였다.http://ctf.sharif.edu:31455/chal/technews/0ca1c5fd5d487c49/images.php?id=php://filter/convert.base64-encode/resource=files/image..
해당 내용은 CTF 종료 후 서버가 일부 동작하지 않아 정확하지 않은 부분이 있을 수 있습니다. 귀여운 고양이 두마리가 반겨주는 블로그아래쪽에는 글을 남길 수가 있다. 메인 페이지에서 다른 페이지가 직접적으로 나타난 부분은 없지만 많이 사용하는 페이지명을 입력해보면 아래와 같이 login.php 페이지가 존재하는 것을 확인할 수 있고, admin.php 페이지도 접근은 안되지만 접근 시도 시 login.php 페이지로 이동되는 것을 확인할 수 있다. 다시 메인 페이지로 돌아와서, 간단하게 alert 창을 띄우는 스크립트를 삽입해보았다.alert('xss'); 작성한 다음 다시 메인 페이지에 접근해보면 아래와 같이 창이 발생하여 삽입한 스크립트가 정상적으로 동작하는 것을 확인할 수 있다. 소스를 보면 삽입..
BurpSuite를 사용하다보면 보고 싶은 대상이 아닌 대상들도 다같이 보게 되는데, 특정 대상만 볼 수 있도록 설정하는 기능이 있다. Proxy > HTTP history에 보면 기록들을 볼 수 있는데, 여기에서 보고 싶은 대상을 선택하여 마우스 우클릭을 하면 아래 그림과 같이 세부메뉴를 볼 수 있다. 여기에서 Add to scope를 선택하여 추가해준다. 추가한 다음, Target > Scope로 이동해보면 추가된 대상을 확인할 수 있다. Proxy > Options로 이동해서 Intercept Client Requests와 Intercept Server Responses에 있는 Is in target scope 옵션을 활성화 시켜준다. (없을 경우 추가) HTTP history에서 찾기가 어려울 경..
Level Goal다음 레벨로 넘어가는데 필요한 패스워드를 얻기 위해서 다음 레벨로 접속은 SSH 키 값을 이용해서 할 수 있지만, bandit26 유저의 shell은 /bin/bash가 아니기 때문에 정상적으로 동작을 할 수가 없다. bandit26 유저의 shell을 확인해보면 /usr/bin/showtext로 되어있는 것을 확인할 수 있고, 내용을 살펴보면 more 명령어를 이용하여 ~/text.txt 파일을 읽고 종료하는 것을 볼 수 있다.$ cat /etc/passwd | grep bandit26$ cat /usr/bin/showtext bandit26.sshkey 파일을 이용해서 다음 레벨로 접속 시도 $ ssh -i bandit26.sshkey bandit26@localhost 터미널 창의 ..
Level Goal다음 레벨로 넘어가는데 필요한 패스워드는 30002 포트로 접속해서 4-digit pincode를 맞게 입력하면 확인할 수 있다. brute-forcing...$ mkdir -p /tmp/do9dark/$ cd /tmp/do9dark/$ cat > brute_forcing.sh#!/bin/bashpasswd="UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ" for pincode in {0..9}{0..9}{0..9}{0..9}do echo $passwd' '$pincode | nc localhost 30002 >> result & done(Ctrl+D)$ chmod 777 brute_forcing.sh$ ./brute_forcing.sh $ ls -al$ sort resul..
Level Goal다음 레벨로 넘어가는데 필요한 패스워드는 /etc/cron.d/에서 정보를 획득해서 확인할 수 있다. $ cd /etc/cron.d/$ cat cronjob_bandit24$ cat /usr/bin/cronjob_bandit24.sh cronjob_bandit24.sh을 보면 /var/spool/bandit24에 있는 스크립트를 실행하고 제거하는 것을 알 수 있고 이를 이용해서 다음 레벨의 패스워드를 획득할 수 있다.$ mkdir -p /tmp/do9dark/$ cd /tmp/do9dark/$ cat > dump.sh#!/bin/bashcat /etc/bandit_pass/bandit24 > /tmp/do9dark/bandit_pass(Ctrl+D)$ chmod 777 dump.sh$ ..
Level Goal다음 레벨로 넘어가는데 필요한 패스워드는 /etc/cron.d/에서 정보를 획득해서 확인할 수 있다. $ cd /etc/cron.d/$ cat cronjob_bandit23$ cat /usr/bin/cronjob_bandit23.sh$ echo I am user bandit23 | md5sum | cut -d ' ' -f 1$ cat /tmp/8ca319486bfbbc3663ea0fbe81326349 bandit23:jc1udXuA1tiHqjIsL8yaapX5XIAI6i0n
Level Goal다음 레벨로 넘어가는데 필요한 패스워드는 홈디렉터리에 있는 setuid가 설정되어 있는 바이너리 파일을 이용해서 획득할 수 있다. 파일을 확인해보면 포트를 지정해주고 실행해놓은 상태에서 다른 터미널 창에서 현재 레벨의 패스워드를 입력하면 다음 레벨의 패스워드를 획득할 수 있다고 되어있다.$ nc -l 9999$ ./suconnect 9999$ GbKksEFF4yrVs6il55v6gwY5aVje5f0j (입력) bandit21:gE269g2h3mw3pwgrj0Ha9Uoqen1c9DGr
Level Goal다음 레벨로 넘어가는데 필요한 패스워드는 31000부터 32000 포트 중에서 오직 1개의 포트만 SSL로 접속해서 현재 레벨의 패스워드를 입력하면 다음 레벨로 넘어가는데 필요한 credentials 내용을 얻을 수 있고, 다음 레벨로 접속해서 패스워드를 확인할 수 있다. 31000부터 32000 포트 중에서 접속이 가능한 포트를 nmap 명령어를 이용해서 확인한다.$ nmap -p 31000-32000 localhost 활성화되어 있는 포트를 대상으로 하나씩 SSL 접속을 시도하고 정상적으로 확인이 될 때, 현재 레벨의 패스워드를 입력하면 다음 레벨에 접근할 수 있는 키 값을 확인할 수 있다.$ openssl s_client -connect localhost:31790 -quietcl..
Level Goal다음 레벨로 넘어가는데 필요한 패스워드는 30001 포트에 SSL encryption를 이용해서 접속한 다음, 현재 레벨의 패스워드를 입력하면 알 수 있다. openssl s_client 명령어를 이용해서 30001 포트에 접속한 다음, 현재 레벨의 패스워드를 입력해주면 다음 레벨의 패스워드를 확인할 수 있다.아래와 같이 패스워드를 입력하지 않고 echo와 `(backtick)을 이용해서도 할 수 있다.$ echo `cat /etc/bandit_pass/bandit15` | openssl s_client -connect localhost:30001 -quiet bandit16:cluFn7wTiGryunymYOu4RcffSxQluehd
Level Goal다음 레벨로 넘어가는데 필요한 패스워드는 /etc/bandit_pass/bandit14에 저장되어 있으나, bandit14만 읽을 수 있도록 되어있다. 문제에 보면 다음 레벨에 접근할 수 있는 private SSH key가 있는 것을 알 수 있고, ls 명령어를 통해 파일을 볼 수 있다.$ ls$ file sshkey.private sshkey.private 파일을 이용해서 다음 레벨에 접근 시도한 결과, 정상적으로 접속이 된 것을 볼 수 있다. $ ssh -i sshkey.private bandit14@localhost bandit14의 권한을 통해 /etc/bandit_pass/bandit14 파일을 확인해보면 패스워드를 알 수 있다. $ cat /etc/bandit_pass/ban..
Level Goal다음 레벨로 넘어가는데 필요한 패스워드는 data.txt 파일에 hexdump 되어 저장되어 있다. 파일을 확인해보면 ASCII text로 hexdump된 형태로 되어있는 것을 확인할 수 있다.$ ls$ file data.txt$ cat data.txt 임시 디렉터리를 생성하여 이동한 다음, xxd 명령어를 이용해서 hexdump된 형태를 바이너리 형태로 변경해주고 바이너리 파일을 확인해서 알맞게 압축을 해제해주면 최종적으로 패스워드가 저장된 파일을 얻을 수 있다. $ mkdir /tmp/do9dark/$ cd /tmp/do9dark/$ xxd -r ~/data.txt > data1$ file data1 gzip compressed data $ zcat data1 > data2.bin$..
Level Goal다음 레벨로 넘어가는데 필요한 패스워드는 data.txt 파일에 ROT13(all lowercase (a-z) and uppercase (A-Z) letters have been rotated by 13 positions)가 적용되어 저장되어 있다. 파일을 확인해보면 문자가 뒤죽박죽 알아볼 수 없도록 되어있는 것을 볼 수 있다. 문제에서 13만큼 이동되어 있다고 했기 때문에 대소문자 각각 13만큼 tr 명령어를 이용하여 치환시켜주면 패스워드를 확인할 수 있다.$ ls$ cat data.txt$ cat data.txt | tr a-zA-Z n-za-mN-ZA-M bandit12:5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu
Level Goal다음 레벨로 넘어가는데 필요한 패스워드는 data.txt 파일에 사람이 읽을 수 있으면서, ‘=’ 문자로 시작하는 형태로 저장되어 있다. strings 명령어를 이용해서 사람이 읽을 수 있는 문자열들을 추출한 다음, grep 명령어를 이용하여 '='가 포함되어 있는 형태를 찾으면 패스워드를 확인할 수 있다.$ ls $ strings data.txt | grep '=' bandit10:truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk
Level Goal다음 레벨로 넘어가는데 필요한 패스워드는 아래 속성들을 모두 가지고 있는 파일에 저장되어 있다.- owned by user bandit7 - owned by group bandit6 - 33 bytes in size 문제에 주어진 속성들을 이용해서 서버 전체를 대상으로 find 명령어로 패스워드 파일을 찾을 수 있다.(에러 처리도 해주면 깔끔하게 결과를 볼 수 있다.)$ find / -user bandit7 -group bandit6 -size 33c 2>/dev/null$ cat /var/lib/dpkg/info/bandit7.password bandit7:HKBPTKQnIay4Fw76bEy8PVxKEDQRKTzs
Level Goal다음 레벨로 넘어가는데 필요한 패스워드는 inhere 디렉터리 안에 아래 속성들을 모두 가지고 있는 파일에 저장되어 있다.- human-readable - 1033 bytes in size - not executable cd 명령어를 이용하여 해당 디렉터리로 이동한다.$ cd inhere/ 디렉터리 안을 확인해보면 maybehere00 ~ maybehere19 까지 디렉터리가 있는 것을 볼 수 있다.$ ls -al 내부에 있는 디렉터리 중 하나를 살펴보면 다양한 형태의 파일들이 존재하는 것을 확인할 수 있다.$ cd maybehere00/$ ls -al 일일히 앞에서 했던 방법들을 이용해서 찾을 수도 있지만, 문제에서 주어진 속성 중에 1033 bytes 사이즈라는 속성을 이용하여 쉽게..
Level Goal다음 레벨로 넘어가는데 필요한 패스워드는 inhere 디렉터리 안에 사람이 읽을 수 있는(human-readable) 파일에 저장되어 있다. cd 명령어를 이용하여 해당 디렉터리로 이동한다.$ cd inhere/ 디렉터리 안에 있는 파일을 확인해보면 -file00 ~ -file09 까지 파일이 있는 것을 볼 수 있다.$ ls -l file 명령어를 이용하여 각 파일들을 조회해본다.$ file ./* 조회해보면 -file07만 ASCII text로 되어있고 나머진 data로 되어있는 것을 볼 수 있다.해당 파일을 cat 명령어를 이용하여 확인해보면 다음 레벨로 넘어가는데 필요한 패스워드를 알 수 있다.$ cat ./-file07 bandit5:koReBOKuIDDepwhWk7jZC0RTd..
Level Goal다음 레벨로 넘어가는데 필요한 패스워드는 inhere 디렉터리 안에 .hidden 파일에 있다. ls 명령어를 사용 시 -a 옵션을 입력해주면 숨겨진 파일도 확인할 수 있다.리눅스에서 파일명이 .으로 시작되면 숨김 파일로 된다.$ ls -al inhere/.hidden .hidden 파일을 cat 명령어로 확인해보면 패스워드를 알 수 있다.$ cat inhere/.hidden bandit4:pIwrPrtPN36QITSp3EQaw936yaFoFgAB
Level Goal다음 레벨로 넘어갈 수 있는 패스워드가 들어있는 파일의 이름에 spaces가 들어가 있을 경우에 접근하는 방법 ls 명령어를 이용해보면 파일 이름이 spaces in this filename인 파일이 있는 것을 볼 수 있다.$ ls -l앞에서 했던 것과 동일하게 cat 명령어를 이용해서 파일명을 그대로 입력해주면 공백에 의해서 각각 하나의 파일로 인식하게 되어 해당 파일을 정상적으로 처리할 수가 없게된다.$ cat spaces in this filename따라서, 공백을 구분자가 아니라 일반 문자의 공백으로 처리하기 위해서 \를 앞에 붙여주면 간단하게 처리할 수 있다.$ cat spaces\ in\ this\ filename 다른방법:$ cat s* bandit3:UmHadQclWmgd..
Level Goal다음 레벨로 넘어갈 수 있는 패스워드는 홈 디렉터리에 - 파일에 있다. - 파일을 보면 된다. ls 명령어를 이용해서 해당 디렉터리에 있는 파일들을 보면 - 로 된 파일을 확인할 수 있다.$ ls -l Level 0에서 했던 대로 cat - 를 하게 되면 정상적으로 되지 않는 것을 확인할 수 있다.문제 페이지에 보면 아래에 도움이 될만한 자료를 확인할 수 있으며, 해당 자료를 읽어보면 -(dash) 기호가 특수 문자로 사용되는 것을 볼 수 있다.redirection from/to stdin or stdout [dash].$ cat -DO (입력)DO (출력)Ctrl + D 특수 문자로 사용되지 않도록 우회하기 위해서 간단하게 경로를 이용해서 cat 명령어를 사용하면 - 파일의 내용을 확..
Level GoalSSH를 이용해서 bandit.labs.overthewire.org 서버로 접속하여 로그인한 다음, Level 1로 넘어갈 수 있는 정보 찾기계정과 패스워드는 bandit0/bandit0 문제에서 주어진 계정을 가지고 해당 호스트로 접속을 해보면 아래와 같이 This is the OverTheWire game server.라는 문구를 확인할 수 있고 패스워드를 검증한다.패스워드도 계정과 동일하게 문제에서 주어진대로 입력해준다.$ ssh bandit0@bandit.labs.overthewire.org 로그인을 하게 되면 아래와 같이 정보들을 확인할 수 있다. 접속에 성공하였기 때문에 이제 Level 0에서 Level 1로 넘어가는 문제를 확인해보면, 다음 레벨로 넘어가는데 필요한 패스워드..