
이동 중에 HTTP/HTTPS 트래픽을 캡처, 조작 및 재생할 수 있는 다재다능하고 휴대용 프록시.
기능 • 설치 • 사용법 • Proxify 실행 • SSL 인증서 설치 • Proxify 활용 사례 • Discord 참여
신속한 배포를 위한 스위스 아미 나이프 프록시. 요청/응답 덤프, DSL 언어를 통한 필터링 및 조작, 업스트림 HTTP/Socks5 프록시 등 여러 작업을 지원합니다. 또한 리플레이 유틸리티를 사용하여 덤프된 트래픽(올바른 도메인 이름이 포함된 요청/응답)을 업스트림 프록시를 proxify로 설정하기만 하면 BurpSuite나 다른 프록시로 가져올 수 있습니다.
즉시 실행 가능한 바이너리를 다운로드하거나 GO를 사용하여 설치/빌드
go install -v github.com/projectdiscovery/proxify/cmd/proxify@latest
proxify -h
이 명령어는 도구의 도움말을 표시합니다. 지원하는 모든 스위치는 다음과 같습니다.
Swiss Army Knife Proxy for rapid deployments. Supports multiple operations such as request/response dump,filtering and manipulation via DSL language, upstream HTTP/Socks5 proxy
사용법:
./proxify [flags]
플래그:
OUTPUT:
-sr, -store-response 원시 HTTP 요청/응답을 출력 디렉터리에 저장 (기본값 proxify_logs)
-o, -output proxify 로그를 저장할 출력 파일 (기본값 proxify_logs.jsonl)
-of, -output-format string 출력 형식 (jsonl/yaml) (기본값 "jsonl")
-dump-req HTTP 요청만 출력 파일에 덤프
-dump-resp HTTP 응답만 출력 파일에 덤프
-oca, -out-ca string CA 파일을 생성하여 파일 이름으로 저장
UPDATE:
-up, -update proxify를 최신 버전으로 업데이트
-duc, -disable-update-check 자동 proxify 업데이트 확인 비활성화
FILTER:
-req-fd, -request-dsl string[] 요청 필터 DSL
-resp-fd, -response-dsl string[] 응답 필터 DSL
-req-mrd, -request-match-replace-dsl string[] 요청 매치-대체 DSL
-resp-mrd, -response-match-replace-dsl string[] 응답 매치-대체 DSL
NETWORK:
-ha, -http-addr string 수신 HTTP IP 및 포트 주소 (ip:port) (기본값 "127.0.0.1:8888")
-sa, -socks-addr 수신 SOCKS IP 및 포트 주소 (ip:port) (기본값 127.0.0.1:10080)
-da, -dns-addr string 수신 DNS IP 및 포트 주소 (ip:port)
-dm, -dns-mapping string 도메인을 IP로 DNS 매핑 (예 domain:ip,domain:ip,..)
-r, -resolver string 사용할 사용자 정의 DNS 해석기 (ip:port)
PROXY:
-hp, -http-proxy string[] 업스트림 HTTP 프록시 (예 http://proxy-ip:proxy-port)
-sp, -socks5-proxy string[] 업스트림 SOCKS5 프록시 (예 socks5://proxy-ip:proxy-port)
-c int 다음 업스트림 프록시로 전환하기 전 요청 수 (기본값 1)
EXPORT:
-max-size int 최대 내보내기 데이터 크기 (요청/응답은 잘림) (기본값 9223372036854775807)
CONFIGURATION:
-config string proxify 설정 파일 경로
-ec, -export-config string proxify 내보내기 모듈 설정 파일 (기본값 "$CONFIG/export-config.yaml")
-config-directory string 기본 설정 경로 재정의 (기본값 "$CONFIG/proxify")
-cert-cache-size int 캐시할 인증서 수 (기본값 256)
-a, -allow string[] 허용된 프록시 IP/CIDR 목록
-d, -deny string[] 거부된 프록시 IP/CIDR 목록
-pt, -passthrough string[] 패스스루 도메인 목록
DEBUG:
-nc, -no-color 색상 없음
-version 버전
-silent 조용히
-v, -verbose 상세
-vv, -very-verbose 매우 상세
포트 8888에서 HTTP 프록시 실행:
proxify
사용자 지정 포트 1111에서 HTTP 프록시 실행:
proxify -http-addr ":1111"
-pt 플래그를 사용하면 TLS 연결을 종료하지 않고 암호화된 트래픽을 패스스루(건너뛰기)할 수 있습니다.
proxify -pt '(.*\.)?google\.co.in.*'
포트 8888에서 HTTP 프록시를 실행하고 트래픽을 포트 8080의 burp로 전달:
proxify -http-proxy http://127.0.0.1:8080
포트 8888에서 HTTP 프록시를 실행하고 트래픽을 TOR 네트워크로 전달:
proxify -socks5-proxy 127.0.0.1:9050
Proxify는 JSONL, YAML 및 파일 세 가지 출력 형식을 지원합니다.
JSONL (기본값):
Json Lines 형식에서는 각 HTTP 요청/응답 쌍이 한 줄에 JSON 객체로 저장됩니다.
{"timestamp":"2024-02-20T01:56:49+05:30","url":"https://scanme.sh:443","request":{"header":{"Connection":"close","User-Agent":"curl/8.1.2","host":"scanme.sh:443","method":"CONNECT","path":"","scheme":"https"},"raw":"CONNECT scanme.sh:443 HTTP/1.1\r\nHost: scanme.sh:443\r\nConnection: close\r\nUser-Agent: curl/8.1.2\r\n\r\n"},"response":{"header":{"Content-Length":"0"},"raw":"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"}}
{"timestamp":"2024-02-20T01:56:49+05:30","url":"https://scanme.sh/","request":{"header":{"Accept":"*/*","Connection":"close","User-Agent":"curl/8.1.2","host":"scanme.sh","method":"GET","path":"/","scheme":"https"},"raw":"GET / HTTP/1.1\r\nHost: scanme.sh\r\nAccept: */*\r\nConnection: close\r\nUser-Agent: curl/8.1.2\r\n\r\n"},"response":{"header":{"Content-Type":"text/plain; charset=utf-8","Date":"Mon, 19 Feb 2024 20:26:49 GMT"},"body":"ok","raw":"HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Type: text/plain; charset=utf-8\r\nDate: Mon, 19 Feb 2024 20:26:49 GMT\r\n\r\n"}}
Yaml MultiDoc:
YAML MultiDoc 형식에서는 각 HTTP 요청 및 응답 쌍이 별도의 문서로 캡슐화됩니다. 출력 yaml 파일의 모든 문서는 스트림 구문 분석 및 소비를 위해 ---로 구분됩니다.
proxify -output-format yaml
timestamp: "2024-02-20T01:40:40+05:30"
url: https://scanme.sh:443
request:
header:
Connection: close
User-Agent: curl/8.1.2
host: scanme.sh:443
method: CONNECT
path: ""
scheme: https
body: ""
raw: "CONNECT scanme.sh:443 HTTP/1.1\r\nHost: scanme.sh:443\r\nConnection: close\r\nUser-Agent: curl/8.1.2\r\n\r\n"
response:
header:
Content-Length: "0"
body: ""
raw: "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"
---
timestamp: "2024-02-20T01:40:40+05:30"
...
파일:
파일 형식에서는 각 HTTP 요청 및 응답 쌍이 별도의 파일에 요청 다음에 응답 순서로 저장됩니다. 파일 이름은 {{Host}}-{{randstr}}.txt 형식입니다. 또한 dump-req 또는 dump-resp 플래그를 사용하여 요청의 특정 부분만 파일에 저장할 수 있습니다.
proxify -store-response
참고:
-store-response를 사용하면 jsonl과 파일이 모두 생성됩니다.
Proxify는 DNS 해석기를 내장하여 호스트 이름을 특정 주소에 매핑하고 다른 도메인 이름에 대한 업스트림 DNS 서버를 정의할 수 있습니다.
포트 53에서 수신 대기하는 내장 DNS 서버를 사용하여 www.google.it를 192.168.1.1로 해석하고 다른 모든 fqdn은 1.1.1.1로 업스트림 전달하는 HTTP 프록시를 포트 8888에서 실행:
proxify -dns-addr ":53" -dns-mapping "www.google.it:192.168.1.1" -dns-resolver "1.1.1.1:53"
이 기능은 예를 들어 replay 유틸리티에서 연결을 가로채고 응답을 시뮬레이션하는 데 사용됩니다. 개인 DNS 서버를 사용하는 내부 평가 중에 유용할 수 있습니다. 도메인 이름으로 *를 사용하면 모든 DNS 요청과 일치합니다.
요청 또는 응답이 필터와 일치하면 덤프에 .match.txt 접미사가 태그됩니다:
proxify -request-dsl "contains(request,'firefox')" -response-dsl "contains(response, md5('test'))"
Proxify는 DSL 언어를 사용하여 요청 및 응답을 실시간으로 수정하는 것을 지원합니다.
다음은 요청에서 firefox 단어를 chrome으로 대체하는 예입니다:
proxify -request-match-replace-dsl "replace(request,'firefox','chrome')"
정규 표현식 기반 응답 대체의 또 다른 예:
proxify -response-match-replace-dsl "replace_regex(response, '^authentication failed$', 'authentication ok')"
덤프된 모든 요청/응답을 지정된 대상 URL(http://127.0.0.1:8080)로 리플레이합니다(지정하지 않으면 기본값). 이 기능을 사용하려면 burp이 업스트림 프록시로 proxify를 사용하도록 구성해야 합니다. proxify는 DNS 해석을 가로채고 덤프된 요청으로 원격 서버를 시뮬레이션합니다. 이를 통해 burp 기록에 모든 요청/응답이 원래 burp을 통해 전송된 것처럼 정확하게 표시되어, 예를 들어 클라우드에서 원격 인터셉션을 수행하고 모든 결과를 로컬 burp 내에서 병합할 수 있습니다.
replay -output "logs/"
proxify에 대한 인증 기관이 생성되며 기본적으로 ~/.config/proxify/ 폴더에 저장됩니다. -config 플래그로 수동으로 지정할 수 있습니다. 생성된 인증서는 proxify에 연결된 브라우저에서 http://proxify/cacert를 방문하여 가져올 수 있습니다.
루트 인증서의 설치 단계는 다른 프록시 도구와 유사하며, 시스템 신뢰할 수 있는 루트 저장소에 인증서를 추가하는 것을 포함합니다.
Proxify는 여러 곳에서 사용될 수 있습니다. 다음은 Proxify가 유용한 일반적인 예입니다:
포트 8888에서 HTTP 프록시를 실행하고 트래픽을 포트 8080의 burp으로 전달:
proxify -http-proxy http://127.0.0.1:8080
BurpSuite에서 업스트림 프록시를 설정하여 모든 트래픽을 다시 proxify로 전달:
User Options > Upstream Proxy > Proxy & Port > 127.0.0.1 & 8888
이제 모든 요청/응답 기록이 logs 폴더에 저장되어 나중에 후처리에 사용할 수 있습니다.
애플리케이션을 탐색하는 동안 브라우저를 proxify로 지정하여 모든 HTTP 요청/응답을 파일에 저장할 수 있습니다.
proxify를 기본 포트 또는 원하는 포트에서 시작하십시오.
proxify -output chrome-logs
macOS에서 Chrome 브라우저 시작:
/Applications/Chromium.app/Contents/MacOS/Chromium --ignore-certificate-errors --proxy-server=http://127.0.0.1:8888 &
proxify를 기본 포트 또는 원하는 포트에서 시작하십시오:
proxify -output ffuf-logs
FFuF를 프록시가 proxify를 가리키도록 실행:
ffuf -x http://127.0.0.1:8888 FFUF_CMD_HERE
Proxify는 projectdiscovery 팀이 🖤로 만들었습니다. 커뮤니티의 기여가 프로젝트를 지금의 모습으로 만들었습니다. 자세한 내용은 Thanks.md 파일을 참조하세요.