김승현

Bugbounty Boot Camp Chap.7 OPEN REDIRECTS 본문

book_summary

Bugbounty Boot Camp Chap.7 OPEN REDIRECTS

kshind 2024. 7. 25. 18:23

Open Redirect는 사용자가 기존의 사이트가 아닌 외부의 url에 접근하게 속이는 공격 유형임

https://www.naver.com/login?redirect=https://attacker.com

위와 같이 네이버의 주소로 시작한다면 사용자들은 안심하고 클릭할 가능성  ↑

 

방지법

  • 리다이렉션을 할 때 악의적인 주소로 접근하는지 확인하도록 해야 함
  • 미리 작성된 피해야 할 목록을 확인하여 접근을 방지
  • 제공된 URL이 기존의 호스트와 동일한지 확인

 

Open Redirects 찾는 법

Step 1: Look for Redirect Parameters

- 리다이렉션에 사용된 파라미터들 확인하기 

Step 2: Use Google Dorks to Find Additional Redirect Parameters

- 구글 검색을 통해 추가적인 파라미터 검색하기 ex) inurl:%3Dhttp site:example.com

Step 3: Test for Parameter-Based Open Redirects

- 파라미터를 기반으로 테스트하기 

Step 4: Test for Referer-Based Open Redirects

- referer를 기반으로 테스트하기

 

우회법

 

  • 혼합 URL 사용
    • URL 구성 요소를 섞어서 우회
  • URL 인코딩 사용
    •  URL 내의 특정 문자를 인코딩하여  우회
  • 잘못된 URL 구조 사용
    • 잘못된 구조의 URL을 사용하여 우회
  • 변칙적인 포트 사용:
    • 비표준 포트를 사용하여 우회

 

우회법에 대한 방지법

엄격한 URL 검증, 화이트리스트, 상대경로 사용

 

 

+ 브라우저 자동 수정 기능을 활용한 우회법

 

  • https:attacker.com
  • https;attacker.com
  • https:\/\/attacker.com
  • https:/\/\attacker.com

위의 방법 모두 브라우저가 https://attacker.com으로 인식하는 주소들 

 

https://attacker.com\@example.com

아래 설명에 대한 예시 주소

대부분의 브라우저는 \를 /로 자동 수정한다.

이런 경우,

사용자를 attacker.com으로 리다이렉트하고, @example.com을 URL의 경로 부분으로 간주하여 아래와 같은 주소로 만듦

https://attacker.com/@example.com

그러나 그렇지 않은 경우,

example.com을 호스트 이름으로 해석하고, attacker.com\를 URL의 사용자 이름 부분으로 간주하게 됨

 

+ 데이터 URL 사용

data:text/plain,hello!

data 스키마를 사용하면 위를 통해 hello!라는 평문을 보낼 수 있다.

data:text/html;base64,PHNjcmlwdD5sb2NhdGlvbj0iaHR0cHM6Ly9leGFtcGxlLmNvbSI8L3NjcmlwdD4=

 

base64를 활용하면 인코딩 또한 적용한 상태로 보낼 수 있게 된다

https://example.com/login?redir=data:text/html;base64,PHNjcmlwdD5sb2NhdGlvbj0iaHR0cHM6Ly9leGFtcGxlLmNvbSI8L3NjcmlwdD4=

최종적으로 redirect되는 주소에 data 스키마를 통해 원하는 곳으로 리다이렉션 되도록 만들 수 있음

 

이외 추가적인 방법들

  • 잘못된 논리 검증 부분 우회
    • https://example.com/login?redir=http://example.com.attacker.com
  • url 디코딩 이용하기
    • 더블인코딩
      • https://example.com%252f@attacker.com
    • 비ASCII 문자 
      • https://attacker.com?.example.com
      • https://attacker.com/.example.com