-
bandit 21 → 22
https://overthewire.org/wargames/bandit/bandit22.html 이번엔 cron이 작동 중이니 /etc/cron.d에서 살펴보라한다. cron은 일정 시간, 일정 주기마다 특정 동작을 설정하여 실행하는 스케줄러이다. 문제의 내용대로 cron 파일들을 확인한다. bandit22에 대한 정보가 필요하니 cronjob_bandit22를 확인한다. 권한 중 others가 read 허용이니 읽을 수 있다. 해당 스케줄러는 매 분마다, 그리고 재부팅 시 bandit22 계정으로 /usr/bin/cronjob_bandit22.sh를 실행하고 출력 값을 버리는 동작을 한다. 그렇다면 해당 쉘…
-
LEVEL 1: XSS Filtering Bypass
https://dreamhack.io/wargame/challenges/433 소스 코드 분석 내가 생성한 XSS 페이로드를 봇이 실행할 수 있도록 만들어주는 함수다. /vuln 페이지에서 페이로드를 필터링한다. /flag 페이지에서 적용한 페이로드가 /vuln에서 실행되므로 /flag 페이지까지 필터링한다고 볼 수 있다. XSS 취약점이 발생하는 페이지다. /flag 페이지에서 전달한 페이로드가 이 페이지에서 실행된다. 값을 입력하여 전송하면 웹 서버의 봇이 페이로드를 받아서 /vuln 페이지에 방문한다. memo로 받은 값을…
-
bandit 13 → 14
https://overthewire.org/wargames/bandit/bandit14.html 이번은 홈 디렉터리에 있는 sshkey.private 파일로 bandit14에 로그인하는 것이다. 홈 디렉터리에 개인키 파일이 있다. 이 파일을 ssh 커맨드의 -i 옵션으로 bandit14에 로그인 할 것이다. 그런데 개인키 파일을 이용해 로그인 하려면 해당 파일의 권한은 소유자만 읽을 수 있어야 한다. Windows는 권한 설정이 귀찮으니 리눅스에서 진행한다. 우선 개인키 파일의 내용을 복사한다. 리눅스에서 nano 편집기로 키를 저장한다.…
-
bandit 12 → 13
https://overthewire.org/wargames/bandit/bandit13.html 이번 목표는 헥스덤프 파일인 data.txt을 반복적으로 압축 해제하면 된다. 우선 mktemp -d으로 내가 사용할 임시 디렉터리를 생성한다. 그 이유는 아래 사진과 같이 홈 디렉터리의 소유자는 root이며 others의 권한에 write가 없다. 그러므로 소유자가 ‘나’인 임시 디렉터리를 생성하는 것이다. data.txt 파일을 임시 디렉터리로 copy해서 작업을 한다. data.txt는 헥스덤프 파일이므로 xxd 명령으로 이를 이진 파일로 바꾼다. xxd는…
-
bandit 14 → 15
https://overthewire.org/wargames/bandit/bandit15.html 이번은 로컬호스트의 30000번 포트로 bandit14의 패스워드를 제출하면 된다. 우선 bandit14의 패스워드를 획득해야 한다. 우리는 개인 키로 로그인을 했기 때문에 현재는 bandit14의 패스워드를 모르는 상태다. 패스워드는 /etc/bandit_pass 디렉터리에 들어있다. 해당 디렉터리에서 bandit14의 패스워드 파일을 read 한다. bandit14의 크리덴셜을 확보했으니 localhost의 30000번 포트로 접속한다. 이번엔 원격 접속이 아닌 단순 접속이므로 nc를 이용한다. nc(netcat)는 TCP와 UDP로 connect…
-
bandit 15 → 16
https://overthewire.org/wargames/bandit/bandit16.html 이번엔 SSL/TLS 통신으로 로컬호스트의 30001번 포트로 연결하여 bandit15의 패스워드를 제출하면 된다. SSL/TLS 통신을 해야하므로 openssl s_client 커맨드로 로컬호스트에 접속한다. SSL/TLS은 보안을 제공하고 무결성을 확보하는 보안 통신이다. 연결이 되고 아래와 같이 멈추면 bandit15의 패스워드를 입력하고 전송하면 bandit16의 패스워드로 응답해준다. 크리덴셜 획득
-
bandit 16 → 17
https://overthewire.org/wargames/bandit/bandit17.html 이번엔 SSL/TLS 통신으로 로컬호스트의 31000~32000번 포트에 연결하고 bandit16의 패스워드를 제출하면 된다. 포트의 수가 1001개이므로 하나씩 연결하기엔 오래 걸린다. 그러므로 포트 스캔을 통해 열려있는 포트를 찾아서 경우의 수를 줄여야 한다. 포트 스캔이 싫다면 하나씩 해도 된다. 이번에 사용할 nmap은 포트 스캐너이다. 오픈된 포트를 스캔할 뿐만 아니라 동작 중인 서비스도 스캔이 가능하다. SSL/TLS 통신을 해야 하기…
-
XSS 필터 우회 실습 – 자바스크립트 함수 및 키워드 필터링
https://learn.dreamhack.io/labs/94a55b53-e43a-43c5-b0f0-efd5f99bcf5f 목표 – 1단계: 주요 함수 및 키워드 탐지 필터링 규칙은 alert, window, document 문자열이 존재할 경우 실행을 거부한다. 목표는 alert(document.cookie)를 실행하면 된다. 그렇다면 유니코드 이스케이프 시퀀스를 사용하여 해당 필터링을 우회한다. 문자를 유니코드로 표현할 수 있다. 해당 페이로드의 유니코드를 해석하면 가 된다. 최종적으로 window.alert(document.cookie)가 실행된다. 이 밖에도 Computed member access를 이용하여 속성 이름을 이어 붙여…
-
bandit 11 → 12
https://overthewire.org/wargames/bandit/bandit12.html 이번 문제는 data.txt 파일의 내용을 13번 움직이면 크리덴셜을 획득할 수 있다. 문자를 치환하는 것은 카이사르 암호가 있다. key value를 13으로 설정하면 A가 우측으로 13번 이동하여 N이 된다. B는 O가 된다. 이렇게 문자를 치환하는 암호인데, 이 문제에서 사용할 tr 명령은 치환하는 명령어이므로 이를 구현할 수 있다. tr [원본] [변경] 이러한 형식으로 문자를 치환할 수 있다.…
-
bandit 10 → 11
https://overthewire.org/wargames/bandit/bandit11.html 이번 문제는 data.txt 파일이 base64로 인코딩되어 있으니 디코딩하여 크리덴셜을 획득하면 된다. 우선 data.txt를 read 해본다. base64로 인코딩되어있어 사람이 읽는 데에는 무리가 있다. data.txt 파일을 base64 명령어로 디코딩한다. -d 옵션을 지정하지 않을 경우 인코딩을 수행하니 옵션을 설정한다. 크리덴셜 획득