이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.
A7 - Host Header Attack (Cache Poisoning)
HTTP Host Header
HTTP 호스트 헤더는 HTTP/1.1부터 필수 요청 헤더입니다. 클라이언트가 액세스하려는 도메인 이름을 지정합니다. 예를 들어 사용자가 http://localhost/bWAPP/hostheader_1.php 사이트에 방문하게 되면 브라우저는 다음과 같이 Host 헤더가 포함된 요청을 작성합니다.
GET /bWAPP/hostheader_1.php HTTP/1.1
Host: localhost
웹 서버는 일반적으로 가상 호스트를 통해 각 애플리케이션을 참조하는 동일한 IP 주소에 여러 웹 애플리케이션을 호스팅합니다. 수신 HTTP 요청에서 웹 서버는 종종 호스트 헤더에 제공된 값을 기반으로 대상 가상 호스트로 요청을 발송합니다. 헤더 값의 유효성을 제대로 검사하지 않으면 공격자가 잘못된 입력을 제공하여 웹 서버를 다음과 같이 만들 수 있습니다.
- 목록의 첫 번째 가상 호스트로 요청을 발송합니다.
- 공격자가 제어하는 도메인으로 리디렉션을 수행합니다.
- 웹 캐시 중독을 수행합니다.
- 암호 재설정 기능을 조작합니다.
- 외부에서 액세스할 수 없도록 설정된 가상 호스트에 대한 액세스를 허용합니다.
Cache Poisoning
캐시 포이즈닝은 공격자가 사용자를 해칠 목적으로 DNS(Domain Name System) 캐시나 웹 캐시에 가짜 정보를 삽입하는 사이버 공격의 일종이다. DNS 캐시 중독 또는 DNS 스푸핑에서 공격자는 합법적인 서버에서 악의적인/위험한 서버로 트래픽을 우회시킵니다. 가해자는 조작된 웹 사이트 주소와 같은 잘못된 정보를 DNS 캐시에 입력하여 사용자가 잘못되거나 예기치 않거나 위험한 웹 사이트로 리디렉션됩니다. DNS 캐시 중독은 합법적인 웹 사이트에서 트래픽을 우회시킬 뿐만 아니라 악성 프로그램 감염 및 데이터 도난을 포함한 많은 위험에 사용자를 취약하게 만드는 매우 기만적인 공격입니다. 웹 캐시 중독에서 공격자는 웹 서버와 캐시를 이용하여 악의적인 HTTP(Hypertext Transfer Protocol) 응답을 사용자에게 제공합니다.
hostheader_1.php 페이지는 호스트 헤더 공격(캐시 포이즈닝)에 관한 내용이고 본문 내용에 보면 here이라는 문구가 보입니다. here 글씨를 누르게 되면 portal.php 페이지로 리다이렉션 되는 것을 알 수 있습니다. 해당 문제는 HTTP 요청 시 Host Header에 관한 문제로 버프 스위트 프락시 툴을 이용해 살펴보도록 하겠습니다.
버프스위트를 통하여 hostheader_1.php 페이지 호출 시 Host header를 조작한 후 Forward 버튼을 누른 후 다시 한번 살펴보도록 하겠습니다.
Forward 버튼을 누른후 값을 전달하면 이미지가 깨진 페이지를 확인할 수 있습니다.
here 버튼을 클릭하고 URL 부분을 살펴 보면 버프 스위트를 통하여 조작한 Host header 값이 넘어간다는 것을 알 수 있고, 버프 스위트 Repeater 기능을 사용하요 응답 값을 확인해 보겠습니다.
버프 스위트 Repeater 기능을 사용하여 요청 값을 보내고 응답 값을 확인해 보면 버프를 통하여 조작된 Host header 값이 삽입되는 것을 알 수 있습니다. 이미지 파일이나 페이지가 깨진 이유는 HTTP 요청 시 stylesheet.css, html5.js 파일들을 참조하여 페이지를 보여줘야 하지만 그렇지 못하여 페이지가 깨져서 보이는것입니다. 테스트를 해보시는 분든들 조작하기 전 값과 조작 후의 값을 확인해 보시기를 바랍니다.
Host: google.com#
Host: localhost"><iframe onload=alert(1)>
해당 페이지는 Cache Poisoning 공격보다 Host header 공격이라고 보기에 가까운것 같습니다. 실습을 하시는 분들은 요청 값을 보낸 후에 응답 값에 어떠한 변화 들이 생기는지 같이 살펴보시면 좋을 것 같습니다.
참고
https://portswigger.net/kb/papers/7q1e9u9a/web-cache-poisoning.pdf