Alpacahack: I wanna be the Admin

2026. 1. 16. 14:38·Alpacahack
반응형

문제 설명

Topic: Authorization

분야: Web

난이도:Easy

But you start from a guest!


코드 분석

  • cookieParser와 express.urlencoded 등록
  • users를 new Map()으로 설정 
  • setInterval로 10분마다 초기화해 로그 출력

  • username 쿠키를 읽어서 users Map에서 사용자를 찾고 없으면 /login 리다이렉트
  • 있으면 req.user에 저장 후 next()
  • 서명/무결성 검증이 없음

  • 회원 가입 폼 HTML 반환. 입력 필드는 username, password, nickname

  • req.body를 user_data로 사용
  • username, password 존배 여부, username/nickname의 소문자+숫자 검증 후 진행
  • 중복 username 있으면 오류
  • 신규 유저를 role:"guest", ...user_data로 저장 후 username 쿠키 설정
  • /로 리다이렉트. 스프레드 덮어쓰기로 클라이언트 필드가 우선

  • 로그인 폼 HTML 반환

  • req.body에서 username/password 추출, Map에서 조회 후 평문 비교.
  • 실패 시 invalid credentials. 성공 시 username 쿠키 설정 후 / 리다이렉트

  • auth 미들웨어로 보호
  • req.user에서 username/role/nickname 출력
  • role === admin 이면 FLAG를 <b>로 표시 
  • /logout 링크 제공

  • username 쿠키 삭제 후 /login 리다이렉트

취약점 분석

  • 인증은 서명이나 토큰 없이 username 쿠키만 보고 Map에서 유저를 찾음
  • 가입 시 이미 username 쿠키를 설정해줌
  • 관리자 계정만 만들면 바로 관리자 권한이 됨 → 쿠키 위/변조나 도용을 막을 장치가 전혀 없음

  • username과 nickname만 검증
  • 나머지 필드 제한 없음 → 임의 필드 삽입이 가능

  • {role:"guest"} 위에 req.body(=user_data)를 스프레드로 덮어쓴다.
  • 스프레드 뒤에 오는 값이 앞을 overwrite 함
  • 클라이언트가 role=admin을 body에 넣어 보내면 role="guest"가 role="admin"으로 바뀜
    위에서 username과 nickname만 검증하고 role필드는 막지 않기에 가능

익스 플로잇

curl -i -c c.txt \ 
     -d "username=admin1&password=pass&nickname=aa&role=admin" \ 
     http://34.170.146.252:64344/register
  • -i : 응답의 헤더까지 같이 출력(리다이렉트, Set-Cookie 등을 보기 위해서)
  • -c c.txt: 서버가 내려주는 쿠키를 c.txt 파일에 저장
  • -d " ... " : POST 본문을 이렇게 보냄. 기본 폼 인코등(application/x-www-form-unlencoded)으로 전송되며, 여기서 role=admin을 끼워 넣어 관리자 계정을 만듦
  • http://~~~/register: 요청을 보낼 URL

이 명령으로 /register에 필요한 필드와 role=admin을 함께 보내 관리자 계정을 만들고, 응답으로 Set-Cookie:username=admin1

을 c.txt에 저장함 

그다음

curl -b c.txt http://34.170.146.252:64344/

curl -H "Cookie: username=admin1" http://34.170.146.252:64344/

 

curl -b c.txt http://~~~/

: 전에 -c c.txt로 저장한 쿠키 파일을 읽어 요청에 실음
  URL /에 GET 요청. 가입 때 받은 username 쿠키가 포함되므로 로그인된 상태로 접속하는 단계

 

curl -H "Cookie: username=admin1" http://~~~/

: -H "Cookie: ...": 쿠키 헤더를 직접 써서 보냄. 쿠키 파일 없이도 특장 값(username=admin1)을 실어 보냄

  역시 /에 GET 요청. 헤더에 넣은 username 기준으로 인증 시도


플래그 획득

반응형

'Alpacahack' 카테고리의 다른 글

Alpacahack: Stateless Auth  (0) 2026.01.25
Alpacahack: Animal Viewer  (0) 2026.01.22
Alpacahack: dice roll  (0) 2026.01.21
Alpacahack: secret-table  (0) 2026.01.20
Alpacahack: Fushigi Crawier  (0) 2026.01.19
'Alpacahack' 카테고리의 다른 글
  • Alpacahack: Animal Viewer
  • Alpacahack: dice roll
  • Alpacahack: secret-table
  • Alpacahack: Fushigi Crawier
y3onbug5
y3onbug5
y3onbug5 님의 블로그 입니다.
  • y3onbug5
    y3onbug5 님의 블로그
    y3onbug5
  • 전체
    오늘
    어제
    • 분류 전체보기 (167) N
      • Alpacahack (19) N
      • Dreamhack 워게임 (49)
        • Lv.1 (40)
        • Lv.0 (4)
        • LV.2 (3)
        • LV.3 (2)
      • [Dreamhack] Web Beginner (3)
      • [Dreamhack] Web Hacking (17)
        • 웹 기초 지식 (4)
        • Cookie & Session (2)
        • Cross-Site Scripting(XSS) (1)
        • Cross-Site Request Forgery (1)
        • SQL Injection (4)
        • NoSQL Injection (2)
        • Command Injection (1)
        • File Vulnerability (1)
        • Server-Side Request Forgery (1)
      • [Dreamhack] Web Hacking Client-Side (10)
        • XSS Filtering Bypass (2)
        • Content Security Policy (CSP) (2)
        • CSRF,CORS Bypass (2)
        • Client-Side Template Injection (CSTI) (1)
        • CSS Injection (1)
        • Relative Path Overwrite (RPO) (1)
        • DOM Vulnerability (1)
      • [Dreamhack] Web Hacking Server-Side (15)
        • SQL Injection Advanced (4)
        • SQL Injection Advanced - Fingerprinting (2)
        • NoSQL Injection Advanced (3)
        • Command Injection Advanced - Web Servers (3)
        • File Vulnerability Advanced - Web Server (3)
      • [Dreamhack]Black-Box Penetration Testing (15)
        • DreamCommunity Penetration Testing (11)
      • [Dreamhack] LLM (2)
        • [Dreamhack] LLM과 프롬프트 엔지니어링 (2)
      • Web 공부 (4)
      • Web Study (15)
      • JavaScript (17)
        • 기초 (12)
        • 중급 (4)
      • 웹 개발(Flask) (0)
      • [Security First] web 기초교육 (1) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DreamHack
    webstudy
    JS
    LLM
    hacking
    드림핵
    alpacahack
    web
    CSRF
    xss
    JavaScript
    webhacking
    cve
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
y3onbug5
Alpacahack: I wanna be the Admin
상단으로

티스토리툴바