[Dreamhack] Where-is-localhost

@app.route('/vuln', methods=['POST'])
def vuln():
name = request.form.get('vulntest')
try:
address = ipaddress.ip_address(name)
if address.version == 4:
return "no..."
url = urllib.parse.urlparse(f"http://[{address.exploded}]:5000/localonly")
if url.netloc != f'[{address.exploded}]:5000':
print(url.netloc, f'[{address.exploded}]')
return "no..."
req = urllib.request.Request(url.geturl())
return urllib.request.urlopen(req).read().decode('utf-8')
except ValueError:
return "no..."
except urllib.error.URLError:
return "connection refused"
@app.route('/localonly', methods=['GET'])
def localonly():
addr = ipaddress.ip_address(request.remote_addr)
if addr.is_loopback and addr.version == 4:
return flag
else:
return 'not loopback'
문제를 다운로드 받아서 코드를 보니 IPv4를 먼저 필터링 하지만 정작 flag를 얻기 위해서는 IPv4버전이 필요하다. 그래서 IPv6 형식이지만 IPv4로도 인식할 수 있는 형태로 입력을 해야했다.
https://m.blog.naver.com/bi1189/221247563106
IPv4 매핑 주소 : IPv6 프로그램에게 IPv4와의 호환성을 유지하기 위해 사용하는 다른 방법으로, 처음 80비트를 0으로 설정하고 다음 16비트를 1로 설정한 후, 나머지 32비트에 IPv4 주소를 기록하는 IPv4 매핑 주소가 존재한다. 이 주소공간에서는 마지막 32비트를 10진수로 표기할 수 있다. 따라서 192.0.2.52는 ::ffff:192.0.2.52와 같이 쓸 수 있다.
위의 내용에 따라 192.0.2.52는 ::ffff:192.0.2.52 처럼 사용할 수 있고 IPv6형식이다. 그렇기 때문에 첫 IPv4 필터링을 통과하고 IPv4버전의 localhost로 인식할 수 있어 해당 방식을 사용해야했다..
그래서 ::ffff:127.0.0.1을 입력하면 플래그를 얻을 수 있다.
[OverTheWire] Bandit
- 0단계 --> 1단계
다른 비밀번호를 찾아야 함.
-디렉토리에 있는 파일 나열하기
ls -alps
해봤더니 나에게 readme파일이 있음
--> readme 파일의 내용을 cat하고 다음 레벨의 비밀번호 얻어야 함
cat readme
했더니
The password you are looking for is: ZjLjTmM6FvvyRnrb2r?????어쩌구가 뜸
다음 레벨의 비밀번호가 될 플래그/문자열을 얻음

(복사 붙여넣기는 Shift + Insert하면 된다)
- 1단계 --> 2단계

2단계 --> 3단계에서의 비밀번호는 spaces라는 파일에 저장됨
파일 이름에 공백이 있는 파일같음
ls -alps 똑같이 하기
--> spaces in this filename가 보임. 아무래도 여기에 있을 듯
cat spaces in this filename을 해야함
모든 단어 앞에 백슬래시를 넣은 다음 공백을 사용하기(spaces\ in\ this\ filename처럼)
--> 리눅스에 이 파일 이름에 공백이 있다는 사실을 알림
- 3단계 --> 4단계


ls -alps 똑같이 하기
다음 레벨의 비밀번호는 inhere 디렉토리 의 숨겨진 파일에 저장되어 있음
--> inhere 디렉토리로 들어가서 모든 파일을 나열해보기
--> 숨겨진 파일이 있는걸 알 수 O(dot파일)
--> cat .hidden
- 4단계 --> 5단계

이 레벨의 비밀번호는 inhere 디렉토리의 유일하게 사람이 읽을 수 있는 파일에 저장됨
--> inhere 디렉토리로 이동
--> 파일 찾고 정렬하는 작업 처리하기
유일하게 사람이 읽을 수 있는 파일을 찾고 있기 때문에 find 사용하기
현재 작업 디렉토리 지정 가능하며 점을 지정하여 수행됨
find . -type f | xargs file
--> 오! 파일7에 아스키 코드가 있음
(man xargs 써서 봐도 됨)
cat하면 비밀번호 나옴
- 5단계 --> 6단계

이 레벨의 비밀번호는 inhere 디렉토리 아래 어딘가에 있는 파일에 저장되어 있으며 , 다음의 모든 속성을 가짐
>>인간이 읽을 수 있음, 크기는 1033바이트, 실행 불가
일단, 나열해서 inhere 디렉토리가 있음을 확인 --> 이 디렉토리 내에서 파일 찾기
디렉토리 대신 파일로 유형 지정, 크기부터 일단 시작
-size: 크기를 1033으로 지정하고 저장(find 명령에서 바이트는 c로 표현)
-파일이 실행 불가: ! 사용 후 실행 파일 플래그 사용
> 다음과 같이 실행하기
find . -type f -size 1033c ! -executable
cat ./maybehere07/.file2
--> 비밀번호 나옴
이렇게 Bandit level 0~6까지를 풀 수 있다.
[Dreamhack] Basic_Forensics_1
basic forensic_1
문제에서 이미지 파일 안에 메시지가 숨어있다고 제시하였다. 이미지등 안에 메시지를 삽입하는 스테가노그래피기법이라고 생각했다.
스테가노그래피는 정보를 다른 매체에 은닉해 그 존재 자체를 감추는 기술로, 암호화와 달리 메시지의 존재와 내용 모두를 숨긴다.
드림핵에서 제시한 파일에는 하얀곰 사진이 있었다
steganogragpy라는 앱에서 whitebear이라는 사진을 decode하였다.

flag의 형식이 DH{}이므로 hidden message를 보면 flag값을 알 수있다.
[Dreamhack] image-storage

서버 접속해서 Upload 탭 누르면 아래처럼 뜸

문제 파일 소스코드도 한번 확인해보자

따로 파일 확장자 등을 검사하지 않음
플래그가 있다고 한 /flag.txt 로 이동하는 php문을 메모장에 작성하고 확장자를 php로 저장해줌

Upload 탭에 가서 파일 upload 해주고 list 탭 누르면 내가 업로드 한 파일이 뜸

해당 파일 클릭하면 플래그가 뜸

'4-1. 2025-2 심화 스터디 > 워게임 도장 깨기' 카테고리의 다른 글
| [5주차] 25.11.22 워게임 도장 깨기 (0) | 2025.11.27 |
|---|---|
| [2주차] 25.10.04 워게임 도장 깨기 (0) | 2025.11.15 |
| [4주차] 25.11.15 워게임 도장 깨기 (0) | 2025.11.15 |
| [1주차] 25.09.27 워게임 도장 깨기 (0) | 2025.09.27 |