Chisel
Chisel은 HTTP를 통해 전송되고 SSH를 통해 보호되는 빠른 TCP/UDP 터널입니다. 클라이언트와 서버를 모두 포함하는 단일 실행 파일입니다. Go(golang)로 작성되었습니다. Chisel은 주로 방화벽을 통과하는 데 유용하지만 네트워크에 보안 엔드포인트를 제공하는 데에도 사용할 수 있습니다.
목차
기능
- 사용하기 쉬운
- 성능 *
- 암호화된 연결 SSH 프로토콜 사용(
crypto/ssh
를 통해 ) - 인증된 연결 ; 사용자 구성 파일과의 인증된 클라이언트 연결, 지문 일치를 통한 인증된 서버 연결.
- 클라이언트는 지수 백오프 로 자동 재연결됩니다.
- 클라이언트는 하나의 TCP 연결을 통해 여러 터널 끝점을 만들 수 있습니다.
- 클라이언트는 선택적으로 SOCKS 또는 HTTP CONNECT 프록시를 통과할 수 있습니다.
- 역방향 포트 포워딩(연결은 서버를 통해 클라이언트로 이동)
- 서버는 선택적으로 리버스 프록시
- 서버는 선택적으로 SOCKS5 연결을 허용합니다( 아래 가이드 참조 ).
- 클라이언트는 역방향 포트 전달에서 SOCKS5 연결을 선택적으로 허용합니다.
- HTTP를 통해 SSH를 제공하는
ssh -o ProxyCommand
를 지원하는 stdio를 통한 클라이언트 연결
설치
바이너리
![ 릴리스 ](https: //img.shields.io/github/downloads/jpillora/chisel/total.svg)
최신 릴리스 를 참조하거나 curl https://i.jpillora.com/chisel! | 강타
도커
도커 실행 --rm -it jpillora/chisel --help
페도라
패키지는 Fedora 커뮤니티에서 관리합니다. RPM 사용과 관련된 문제가 발생하면 이 issue tracker 를 사용하십시오. 20EPEL).
sudo dnf -y 설치 치즐
소스
$ github.com/jpillora/chisel@latest 설치하러 가기
데모
Heroku의 데모 앱 이 다음 치즐 서버
를 실행하고 있습니다 .
$ chisel 서버 --port $PORT --proxy http://example.com
# $PORT에서 수신, http://example.com에 대한 프록시 웹 요청
이 데모 앱은 또한 :3000
에서 단순 파일 서버 를 실행하고 있는데 , 이는 일반적으로 Heroku의 방화벽으로 인해 액세스할 수 없습니다. 그러나 다음과 같이 터널링하면
$ 치즐 클라이언트 https://chisel-demo.herokuapp.com 3000
# https://chisel-demo.herokuapp.com에서 치즐 서버에 연결합니다.
# localhost:3000을 서버의 localhost:3000으로 터널링합니다.
그런 다음 localhost:3000 을 방문하면 디렉토리 목록이 표시됩니다. 또한 브라우저에서 데모 앱 을 방문하면 서버의 기본 프록시에 도달하고 example.com 의 복사본을 볼 수 있습니다. com).
사용법
$ 끌 --도움말
사용법: chisel [명령어] [--도움말]
버전: XYZ
명령:
서버 - 서버 모드에서 치즐 실행
클라이언트 - 클라이언트 모드에서 치즐 실행
더 읽어보기:
https://github.com/jpillora/chisel
$ 치즐 서버 --도움말
사용법: 치즐 서버 [옵션]
옵션:
--host, HTTP 수신 호스트(네트워크 인터페이스)를 정의합니다.
(기본값은 환경 변수 HOST이고 0.0.0.0으로 대체됩니다).
--port, -p, HTTP 수신 포트를 정의합니다(기본값은 환경
변수 PORT 및 폴백 포트 8080).
--key, ECDSA 공개 생성을 시드하는 선택적 문자열
및 개인 키 쌍. 모든 통신은 다음을 사용하여 보안됩니다.
키 쌍. 클라이언트와 후속 지문을 공유하여 감지 가능
중간자 공격(기본값은 CHISEL_KEY 환경)
그렇지 않으면 새 키가 실행될 때마다 생성됩니다).
--authfile, users.json 파일에 대한 선택적 경로입니다. 이 파일은
다음과 같이 정의된 사용자가 있는 개체여야 합니다.
{
"<user:pass>": ["<addr-regex>","<addr-regex>"]
}
<user>가 연결되면 <pass>가 확인된 다음
각 원격 주소는 목록과 비교됩니다.
일치에 대한 주소 정규 표현식. 주소는
일반 원격의 경우 항상 "<remote-host>:<remote-port>" 형식으로 제공됩니다.
및 "R:<local-interface>:<local-port>" 역방향 포트 포워딩
리모컨. 이 파일은 변경 시 자동으로 다시 로드됩니다.
--auth, 완전한 단일 사용자를 나타내는 선택적 문자열
<user:pass> 형식의 액세스. 생성하는 것과 같습니다.
{"<user:pass>": [""]}가 있는 인증 파일. 설정하지 않으면 다음을 사용합니다.
환경 변수 AUTH.
--keepalive, 선택적 keepalive 간격입니다. 기본 이후
전송은 HTTP이며 많은 경우에 우리는
프록시, 종종 이러한 프록시는 유휴 연결을 닫습니다. 당신은해야합니다
예를 들어 '5s' 또는 '2m'과 같은 단위로 시간을 지정하십시오. 기본값
'25s'로 설정합니다(비활성화하려면 0s로 설정).
--backend, 요청을 프록시할 다른 HTTP 서버를 지정합니다.
chisel은 정상적인 HTTP 요청을 받습니다. 끌을 숨길 때 유용합니다.
평범한 광경.
--socks5, 클라이언트가 내부 SOCKS5 프록시에 액세스하도록 허용합니다. 보다
자세한 내용은 끌 클라이언트 --help를 참조하십시오.
--reverse, 클라이언트가 원격 포트 포워딩을 지정하도록 허용
일반 리모컨 외에도.
--tls-key, TLS를 활성화하고 PEM 인코딩에 대한 선택적 경로를 제공합니다.
TLS 개인 키. 이 플래그가 설정되면 --tls-cert도 설정해야 합니다.
--tls-domain을 설정할 수 없습니다.
--tls-cert, TLS를 활성화하고 PEM 인코딩에 대한 선택적 경로를 제공합니다.
TLS 인증서. 이 플래그가 설정되면 --tls-key도 설정해야 합니다.
--tls-domain을 설정할 수 없습니다.
--tls-domain, TLS를 활성화하고 자동으로 TLS 키를 획득하고
LetsEncrypt를 사용하는 인증서. --tls-domain을 설정하려면 포트 443이 필요합니다.
여러 도메인에 서비스를 제공하기 위해 여러 --tls-domain 플래그를 지정할 수 있습니다.
결과 파일은 "$HOME/.cache/chisel" 디렉토리에 캐시됩니다.
CHISEL_LE_CACHE 변수를 설정하여 이 경로를 수정할 수 있습니다.
또는 이 변수를 "-"로 설정하여 캐싱을 비활성화합니다. 선택적으로
CHISEL_LE_EMAIL을 설정하여 인증서 알림 이메일을 제공합니다.
--tls-ca, PEM으로 인코딩된 CA 인증서 번들 또는 디렉토리의 경로
여러 PEM 인코딩 CA 인증서 번들 파일 보유
클라이언트 연결을 확인합니다. 제공된 CA 인증서가 사용됩니다.
시스템 루트 대신. 이것은 일반적으로 상호 TLS를 구현하는 데 사용됩니다.
--pid 현재 작업 디렉토리에 pid 파일 생성
-v, 상세 로깅 활성화
--help, 이 도움말 텍스트
신호:
끌 프로세스는 다음을 수신합니다.
프로세스 통계를 인쇄하는 SIGUSR2 및
클라이언트 재연결 타이머를 단락시키는 SIGHUP
버전:
XYZ
더 읽어보기:
https://github.com/jpillora/chisel
$ 치즐 클라이언트 --help
사용법: 끌 클라이언트 [옵션] <서버> <원격> [원격] [원격] ...
<서버>는 치즐 서버의 URL입니다.
<remote>는 서버를 통해 터널링된 원격 연결입니다.
형식은 다음과 같습니다.
<로컬 호스트>:<로컬 포트>:<원격 호스트>:<원격 포트>/<프로토콜>
■ local-host는 기본적으로 0.0.0.0(모든 인터페이스)입니다.
■ 로컬 포트는 기본적으로 원격 포트입니다.
■ 원격 포트는 필수입니다*.
■ 원격 호스트의 기본값은 0.0.0.0(서버 로컬 호스트)입니다.
■ 프로토콜 기본값은 tcp입니다.
서버에서 클라이언트로 <remote-host>:<remote-port> 공유
<로컬 호스트>:<로컬 포트>로, 또는:
R:<로컬 인터페이스>:<로컬 포트>:<원격 호스트>:<원격 포트>/<프로토콜>
<remote-host>:<remote-port>를 공유하여 역방향 포트 포워딩을 수행합니다.
클라이언트에서 서버의 <local-interface>:<local-port>로.
예제 리모컨
3000
example.com:3000
3000:google.com:80
192.168.0.5:3000:google.com:80
양말
5000:양말
R:2222:로컬 호스트:22
R:양말
R:5000:양말
stdio:example.com:22
1.1.1.1:53/udp
chisel 서버에 --socks5가 활성화되어 있으면 리모트는 다음을 수행할 수 있습니다.
remote-host 및 remote-port 대신 "socks"를 지정하십시오.
"socks" 리모트의 기본 로컬 호스트 및 포트는 다음과 같습니다.
127.0.0.1:1080. 이 리모컨에 대한 연결이 종료됩니다.
서버의 내부 SOCKS5 프록시에서.
chisel 서버에 --reverse가 활성화되어 있으면 리모트는 다음을 수행할 수 있습니다.
역방향임을 나타내기 위해 R 접두사를 붙입니다. 저것
즉, 서버는 연결을 수신하고 수락하며
원격을 지정한 클라이언트를 통해 프록시됩니다.
"R:socks"를 지정하는 리버스 리모트는 서버의
기본 양말 포트(1080)에서 연결을 종료합니다.
클라이언트의 내부 SOCKS5 프록시.
stdio가 로컬 호스트로 사용되면 터널이 표준에 연결됩니다.
리모컨으로 이 프로그램의 입/출력. 이것은 다음과 같은 경우에 유용합니다.
ssh ProxyCommand와 결합. 당신이 사용할 수있는
ssh -o ProxyCommand='클라이언트 끌 서버 stdio:%h:%p' \
사용자@example.com
터널을 통해 SSH 서버에 연결합니다.
옵션:
--fingerprint, *강력히 권장되는* 지문 문자열
서버의 공개 키에 대해 호스트 키 유효성 검사를 수행합니다.
지문이 일치하지 않으면 연결이 종료됩니다.
지문은 다음을 사용하여 ECDSA 공개 키를 해싱하여 생성됩니다.
SHA256 및 결과를 base64로 인코딩합니다.
지문은 후행 등호(=)를 포함하는 44자여야 합니다.
--auth, 선택적 사용자 이름 및 암호(클라이언트 인증)
형식: "<사용자>:<패스>". 이러한 자격 증명은 다음과 비교됩니다.
서버의 --authfile 내부의 자격 증명. 기본값은
AUTH 환경 변수.
--keepalive, 선택적 keepalive 간격입니다. 기본 이후
전송은 HTTP이며 많은 경우에 우리는
프록시, 종종 이러한 프록시는 유휴 연결을 닫습니다. 당신은해야합니다
예를 들어 '5s' 또는 '2m'과 같은 단위로 시간을 지정하십시오. 기본값
'25s'로 설정합니다(비활성화하려면 0s로 설정).
--max-retry-count, 종료하기 전에 재시도할 최대 횟수.
기본값은 무제한입니다.
--max-retry-interval, a 후 재시도하기 전 최대 대기 시간
단절. 기본값은 5분입니다.
--proxy, 선택적 HTTP CONNECT 또는 SOCKS5 프록시는
치즐 서버에 도달하는 데 사용됩니다. 인증 지정 가능
URL 내부.
예: http://admin:password@my-server.com:8081
또는: socks://admin:password@my-server.com:1080
--header, "HeaderName: HeaderContent" 형식으로 사용자 지정 헤더를 설정합니다.
여러 번 사용할 수 있습니다. (예: --header "Foo: Bar" --header "Hello: World")
--hostname, 선택적으로 'Host' 헤더를 설정합니다(기본값은 호스트
서버 URL에서 찾을 수 있음).
--tls-ca, 다음을 확인하는 데 사용되는 선택적 루트 인증서 번들
치즐 서버. 다음을 사용하여 서버에 연결할 때만 유효합니다.
"https" 또는 "wss". 기본적으로 운영 체제 CA가 사용됩니다.
--tls-skip-verify, 서버 TLS 인증서 확인 건너뛰기
체인 및 호스트 이름(TLS가
섬기는 사람). 설정된 경우 클라이언트는 다음에서 제시한 모든 TLS 인증서를 수락합니다.
해당 인증서의 서버 및 호스트 이름. 이것은 단지 영향을 미칩니다
전송 https(wss) 연결. 치즐 서버의 공개키
내부 연결 후에도 여전히 확인될 수 있습니다(--fingerprint 참조).
설립되었습니다.
--tls-key, 클라이언트에 사용되는 PEM 인코딩 개인 키의 경로
인증(상호 TLS).
--tls-cert, 제공된 것과 일치하는 PEM 인코딩 인증서의 경로
개인 키. 인증서에 클라이언트 인증이 있어야 합니다.
활성화(상호 TLS).
--pid 현재 작업 디렉토리에 pid 파일 생성
-v, 상세 로깅 활성화
--help, 이 도움말 텍스트
신호:
끌 프로세스는 다음을 수신합니다.
프로세스 통계를 인쇄하는 SIGUSR2 및
클라이언트 재연결 타이머를 단락시키는 SIGHUP
버전:
XYZ
더 읽어보기:
https://github.com/jpillora/chisel
보안
암호화는 항상 활성화되어 있습니다. 치즐 서버를 시작하면 메모리 내 ECDSA 공개/개인 키 쌍이 생성됩니다. 서버가 시작되면 공개 키 지문(base64 인코딩 SHA256)이 표시됩니다. 임의의 키를 생성하는 대신 서버는 키 생성을 시드하는 데 사용되는 --key
옵션을 사용하여 선택적으로 키 시드를 지정할 수 있습니다. 클라이언트가 연결되면 서버의 공개 키 지문도 표시됩니다. 클라이언트는 --fingerprint
옵션을 사용하여 특정 지문을 강제할 수 있습니다 . 자세한 내용은 위의 --help
를 참조하십시오 .
인증
--authfile
옵션을 사용하여 서버는 허용된 사용자 목록을 생성하기 위해 user.json
구성 파일을 선택적으로 제공할 수 있습니다. 그런 다음 클라이언트는 --auth
옵션을 사용하여 인증합니다. 인증 구성 파일의 예는 users.json 을 참조하십시오. 자세한 내용은 위의 --help
를 참조하십시오 .
내부적으로 이것은 SSH에서 제공하는 Password 인증 방법을 사용하여 수행됩니다 . http://blog.gopheracademy.com/go-and-ssh/에서 crypto/ssh
에 대해 자세히 알아보세요 .
SOCKS5 가이드
- 치즐 서버 시작
도커 실행 \
--name chisel -p 9312:9312 \
-d --항상 재시작 \
jpillora/chisel 서버 -p 9312 --socks5 --key 초비밀
- 치즐 클라이언트 연결(서버의 지문 사용)
끌 클라이언트 --fingerprint ' rHb55mcxf6vSckL2AezFV09rLs7pfPpavVu++MF7AhQ= ' < 서버 주소 > :9312 양말
- SOCKS5 클라이언트(예: OS/브라우저)를 다음으로 지정합니다.
<클라이언트 주소>:1080
- 이제 HTTP를 통한 암호화되고 인증된 SOCKS5 연결이 있습니다.
주의 사항
WebSockets 지원이 필요하므로:
- IaaS 공급자는 모두 WebSocket을 지원합니다(지원하지 않는 HTTP 프록시가 강제로 실행되지 않는 한, 이 경우 PaaS로 다운그레이드되었다고 주장할 수 있음).
- PaaS 공급자는 WebSocket에 대한 지원이 다양합니다.
- Heroku는 전폭적인 지원을 제공합니다.
- Openshift는 포트 8443 및 8080에서만 연결이 허용되지만 전체 지원을 제공합니다.
- Google App Engine에는 지원이 없습니다 ( 저장소 에서 추적 )
기여
- http://golang.org/doc/code.html
- http://golang.org/doc/effective_go.html
github.com/jpillora/chisel/share
에는 공유 패키지가 포함되어 있습니다.github.com/jpillora/chisel/server
에는 서버 패키지가 포함되어 있습니다.github.com/jpillora/chisel/client
에는 클라이언트 패키지가 포함되어 있습니다.
변경내역
1.0
- 최초 출시1.1
- ECDSA SSH용 단순 대칭 암호화 대체1.2
- SOCKS5(서버) 및 HTTP CONNECT(클라이언트) 지원 추가1.3
- 역방향 터널링 지원 추가1.4
- 임의 HTTP 헤더 지원 추가1.5
- 역방향 SOCKS 지원 추가(by @ aus )1.6
- 클라이언트 stdio 지원 추가(by @ BoleynSu )1.7
- UDP 지원 추가
라이선스
MIT © Jaime Pillora
'OSCP > 기초' 카테고리의 다른 글
[OSCP] 명령어 - 정보 수집 단계 (0) | 2023.04.21 |
---|---|
[OSCP] 명령어 - 기본 (0) | 2023.04.21 |
[OSCP] Swaks - 스와크 (0) | 2023.04.21 |
[OSCP] CyberChef (암호화, 인코딩, 압축 및 데이터 분석을 위한 웹 앱) (0) | 2023.04.21 |