Metasploit에서 HTTP Debug 하기

MSF를 사용하다 보면 실제로 공격 페이로드가 잘 전송되었는지 확인하고 싶을 때가 있습니다. 또 모듈을 이용해서 테스트했지만 개발자 등이 이해하기 쉽게 HTTP 요청으로 보여줘야할 때도 종종 생깁니다.

오늘은 이와 같이 Metasploit 모듈 테스트 중 HTTP 디버깅이 필요한 경우 사용할 수 있는 방법들에 대해 이야기하려고 합니다.

HttpTrace

HttpTrace는 MSF 모듈 중 HTTP 관련 모듈이 가지고 있는 기본 옵션 중 하나로 HTTP를 사용하는 모듈에서 지원하는 설정 값들을 확인해보면 HttpTrace가 있는 것을 볼 수 있습니다.

set <tab><tab> 으로 설정 가능한 값들을 볼 수 있어요 😃

먼저 간단하게 테스트하기 위해 scanner/http/title 모듈로 진행해보겠습니다. HTTPTrace를 따로 true로 설정한게 아니라면 아래와 같이 모듈 작성자가 의도한 결과만 노출됩니다.

여기서 HTTPTrace를 true로 주게 되면 Module 실행 시 HTTP Req/Res를 볼 수 있게 됩니다.

set HttpTrace true

HeadersOnly

만약 헤더 정보만 필요하다면 HttpTraceHeadersOnly 설정을 추가로 주어 헤더만 볼 수도 있습니다.

set HttpTraceHeadersOnly true

Interact Burp/ZAP

아래 두 설정을 사용하면 Metasploit 모듈에서 발생하는 Request가 Proxy를 경유하도록 할 수 있습니다.

set PROXIES HTTP:127.0.0.1:8090
set ReverseAllowProxy true

# 사실 위 두 옵션은 Pivoting 시 MSF가 원할하게 통신할 수 있도록
# 터널링하는데 많이 사용하긴 합니다 (Proxy Pivoting). 
# 다만 디버깅 때에도 충분히 쓸 수 있습니다 :D

Modify HTTP

각 모듈에서 전송하는 HTTP 요청 시 우리가 원하는 형태로 수정하여 전송하게 할 수도 있습니다. HTTP* 관련 옵션들이고 run HTTP<tab><tab> 으로 변경할 수 있는 옵션들을 한번에 볼 수 있습니다.

하나 예시로 HTTP::header_folding을 들어보면 명령으로 header_folding을 주게되면 헤더 이름과 값 사이에 여백이 들어가게 됩니다. 백엔드에서 허용하는 경우 WAF 등을 우회하는 방법으로도 쓰일 수 있습니다.

set HTTP::header_folding=true

Conclusion

중간에 보시면 아시겠지만 MSF는 충분히 Burp, ZAP 등과 Interaction을 맺을 수 있습니다. 이건 MSF가 본래 목적인 Pentest가 아닌 Application Security 영역에서도 충분히 쓰이고 Burp나 ZAP을 보조해 줄 수도 있다는 의미이기도 합니다.

한번 사용해 보시면서 새로운 형태의 테스팅 방법을 만들어보시는 것도 추천드려봐요!