mitmproxy 사용법

김신영·2023년 5월 22일
0

DevTool

목록 보기
4/4
post-thumbnail

mitmproxy 설치

$ brew install mitmproxy

스마트폰 Wifi 설정

  • wifi 설정

프록시 서버 IP 주소 파악

  • wifi가 맥북에 할당한 IP 주소 확인

스마트폰 wifi 프록시 서버 설정

  • mitm 사용시 8080
  • mitmWeb의 경우에는 8090

스마트폰에 인증서 설치

  • mitmproxy가 만든 인증서를 설치해야 https 로 통신한 내용도 확인이 가능하다.
  • mitm.it 에서 인증서 다운로드 (프로파일 다운로드)
  • 테스트폰에서 프록시 설정 후 mitm.it 로 들어간 다음 해당 플랫폼에 맞는 링크를 클릭하여 설치한다.
    • iOS의 경우 (10.3 이후)
      1. 일반 → VPN 및 기기관리
      2. mitmproxy 프로파일 설치
      3. 설정 → 일반 → 정보 → 인증서 신뢰 설정
      4. 루트 인증서 전체 신뢰 활성화에 mitmproxy 인증서 ✅
    • Android의 경우 (삼성 android 7 이후의 설정 앱 기준으로 설명)
      1. 설정 → 잠금화면 및 보안 → 기타 보안 설정 → 디바이스에 저장된 인증서 설치
      2. 파일 선택 후 패턴이나 추가 보안 매체로 확인 후, 인증서 이름을 기입하고, VPN 및 앱 선택
      3. 안드로이드 7 (누가) 이상에서 안되는 이슈가 있음 링크

mitmproxy 실행

1. Console Interface

$ mitmproxy

2. Web Interface

$ mitmweb

Advanced Usages

1. Add-on을 이용하여 호스트 변경

from mitmproxy import http
from urllib.parse import urlparse

mapping = {
    "https://server-api.com": "http://localhost:8080"
}

def request(flow: http.HTTPFlow) -> None:
    # pretty_host takes the "Host" header of the request into account,
    # which is useful in transparent mode where we usually only have the IP
    # otherwise.

    for org_url, redirect_url in mapping.items():
        org_parsed = urlparse(org_url)
        if flow.request.pretty_host == org_parsed.hostname:
            redirect_parsed = urlparse(redirect_url)
            flow.request.host = redirect_parsed.hostname
            if redirect_parsed.port is not None:
                flow.request.port = redirect_parsed.port
            else:
                if redirect_parsed.scheme == "https":
                    flow.request.port = 443
                else:
                    flow.request.port = 80
            flow.request.scheme = redirect_parsed.scheme

redirect.py를 위 코드처럼 작성하여 ~/.mitmproxy 폴더 안에 저장하고 mapping 부분을 적절히 변경합니다.

  • 저장 시 숨김 폴더를 보고 싶으면 cmd + shift + .
mapping = {
    "https://server-api.com": "http://127.0.0.1:8080",
}
mapping = {
    "https://server-api.com": "http://127.0.0.1:8080",
}
mapping = {
    "https://server-api.com": "http://localhost:8083",
}
  • Web Interface 이용하여 실행 (포트 8090)
$ mitmweb -s ~/.mitmproxy/redirect.py --no-http2 -p 8090 --ssl-insecure

2. 옵션을 파일로 관리하여 실행

  • mitmproxy는 기본적으로 ~/.mitmproxy/config.yaml 파일을 오버라이딩 하고 있어 항상 붙어서 쓸 옵션이 있다면 아래와 같이 config.yaml 파일을 생성하면 된다.
    • 실행은 mitmproxy 또는 mitmweb만 실행하면 된다.
# example
scripts: ["~/Downloads/redirect.py"]
http2: false
listen_port: 8090
  • Web Interface 이용하여 실행 (포트 8090)
mitmweb --no-http2 -p 8090 --ssl-insecure
profile
Hello velog!

1개의 댓글

comment-user-thumbnail
2023년 6월 5일
답글 달기