
RevSuit는 침투 테스트 중 대상 호스트로부터 연결을 수신하도록 설계된 유연하고 강력한 리버스 커넥션 플랫폼입니다.
영어 |简体中文
RevSuit는 침투 테스트 시 대상 호스트로부터 연결을 수신하기 위해 설계된 유연하고 강력한 역방향 연결 플랫폼입니다. 현재 HTTP, DNS, RMI, LDAP, MySQL 및 FTP 프로토콜을 지원합니다.
유연함:
강력함:
최신 릴리스를 직접 다운로드하거나 다음 단계에 따라 빌드하세요:
git clone https://github.com/Li4n0/revsuit.git
cd revsuit/frontend && yarn install && yarn build
cd ../ && go build ./cmd/revsuit/revsuit.go
RevSuit는 첫 실행 시 기본 설정 파일을 생성합니다. 필요에 따라 설정 파일을 수정한 후 다시 실행하세요. 설정 파일에 대한 자세한 설명은 설정 노트에서 확인할 수 있습니다.
IP 위치를 확인하려면 IP 위치 데이터베이스를 사용해야 합니다. 기본적으로 QQwry가 데이터 소스로 사용되며, GeoIP를 사용하도록 설정을 수정할 수도 있습니다. 선택한 데이터베이스가 현재 디렉토리에 없거나 업데이트된 지 일주일이 넘으면 RevSuit가 자동으로 최신 데이터베이스를 다운로드합니다. 다운로드가 실패하면 IpArea 필드는 항상 null이 됩니다.
$ ./revsuit
2021/05/16 22:55:10 [ INFO] Downloading qqwry.dat...
____ _____ _ __
/ __ \___ _ __/ ___/__ __(_) /_
/ /_/ / _ \ | / /\__ \/ / / / / __/
/ _, _/ __/ |/ /___/ / /_/ / / /_
/_/ |_|\___/|___//____/\__,_/_/\__/
vBeta0.1
https://revsuit.pro
2021/05/16 22:55:22 [ INFO] Starting HTTP Server at :80, token:your_token
2021/05/16 22:55:22 [ INFO] Start to listen FTP PASV port at :2020, PasvIP is 10.9.8.7
2021/05/16 22:55:22 [ INFO] Starting FTP Server at :21
2021/05/16 22:55:22 [ INFO] Starting MySQL Server at :3306
2021/05/16 22:55:22 [ INFO] Starting RMI Server at :1099
2021/05/16 22:55:22 [ INFO] Starting DNS Server at :53
실행 후, HTTP 서버의 /revsuit/admin/ 경로에 접속하여 토큰을 입력하면 제어판에 액세스할 수 있습니다.
HTTP 규칙 생성을 예로 들어 설명합니다:
몇 가지 참고 사항은 다음과 같습니다:
name과 flagFormat은 고유합니다.FlagFormat은 정규 표현식 구문을 사용하며, 프로토콜에 따라 flagFormat이 일치하는 필드가 다릅니다. 규칙을 생성할 때 해당 힌트를 확인하여 세부 정보를 얻을 수 있습니다.flagFormat에서 정규 표현식의 명명된 그룹을 설정할 수 있으며, 일치하는 그룹의 결과도 템플릿 변수로 사용됩니다.아래와 같이 http 프로토콜의 내장 템플릿 변수와 사용자 정의 템플릿 변수를 사용하는 규칙을 생성하고 이름을 test_create_rule로 지정합니다:

그런 다음 규칙을 만족하는 요청을 보내고 응답을 확인합니다.

요청은 동시에 플랫폼에 기록됩니다.

업무용 소프트웨어에서 새 연결에 대한 알림을 받으려면 설정 파일에서 해당 소프트웨어의 웹후크 주소를 구성하고 해당 규칙의 Notice 스위치를 켜면 됩니다. 현재 4가지 소프트웨어 유형만 지원합니다: dingtalk, wechat, lark, slack. (Discord 및 Telegram 지원은 계획 중입니다.)
플랫폼을 마이그레이션하거나 데이터를 제거할 때 규칙을 다시 만드는 것이 번거로울 수 있습니다. 따라서 플랫폼은 규칙 가져오기 및 내보내기를 지원합니다.
이 기능의 진입점은 Settings > RULES에 있습니다.
규칙은 가져오기 및 내보내기를 위해 yaml 형식으로 저장되며, 다음과 같습니다:
http:
- name: test_create_rule
flag_format: (?P<what>\w+)\?
rank: 0
push_to_client: false
notice: false
response_status_code: "302"
response_headers:
Location: ${query.url}
response_body: ${header.say} ${what}
- name: other_rule
flag_format: other
rank: 1
push_to_client: false
notice: true
response_status_code: "200"
response_headers: { }
response_body: Hello Revsuit!
dns:
... ...
RevSuit는 제 스캐너 프로젝트에서 분리되었기 때문에 기본적으로 스캐너와 함께 작동합니다.
RevSuit의 관점에서 스캐너를 클라이언트라고 부릅니다.
RevSuit는 HTTP Server-sent Events (SSE)를 사용하여 클라이언트와 단방향 통신 채널을 설정합니다.
채널의 API는 /revsuit/api/events?message입니다. 클라이언트는 먼저 헤더에 Token: your token 헤더를 추가한 다음 API에 접근하여 채널을 설정해야 합니다. 플랫폼이 새 연결을 수신하면 규칙에 의해 캡처된 flag가 이 채널을 통해 클라이언트로 전달됩니다.

다음은 Golang의 sse 라이브러리를 사용한 간단한 데모입니다.
위와 같이 RevSuit는 여러 클라이언트를 지원하며, 연결 상태에 있는 각 클라이언트는 flag 푸시를 수신하므로 분산 스캐닝을 지원할 수 있습니다.
모든 클라이언트가 모든 flag 푸시를 수신하지 않도록 하려면 sse 연결을 생성할 때 Flag-Filter 요청 헤더를 사용하여 해당 클라이언트가 수신할 flag의 형식(정규 표현식)을 설정할 수 있습니다:

RevSuit는 클라이언트 연결이 없을 때 flag를 큐에 임시로 저장하고 클라이언트가 연결되면 전송하므로, 클라이언트 연결이 끊어져 취약점을 놓칠 걱정이 없습니다. (이는 지연 트리거 취약점을 발견하는 데 특히 유용합니다.)
실제 취약점 스캐닝 시나리오에서는 단일 취약점 지점에 대해 많은 수의 다양한 페이로드를 보낼 수 있으며, 이들 모두 유효할 수 있으므로 역방향 연결 플랫폼이 많은 요청을 수신하게 되지만, 동일한 취약점으로 인해 발생합니다. 동일한 취약점에 대해 클라이언트가 너무 많은 flag를 수신하지 않도록 하려면 규칙 flagFormat의 flagGroup 기능을 활용할 수 있습니다.
FlagGroup은 규칙의 flagFormat 필드에서 익명 그룹이 일치하는 내용입니다. 플랫폼은 그룹에서 일치하는 내용을 확인하고, 해당 내용(flagGroup)이 처음 캡처될 때만 클라이언트로 플래그가 푸시됩니다.
예를 들어, SSRF 스캐닝.
먼저 다음과 같은 규칙을 생성합니다:
http:
- name: ssrf
flag_format: (ssrf[a-z0-9]{6})[0-9]{1,3}
rank: 0
push_to_client: false
notice: false
response_status_code: "200"
response_headers: { }
response_body: "Here is a SSRF!"
대상이 https://www.testvuln.com?url=api.com&p=useless이고 SSRF에 대해 5개의 페이로드가 있다고 가정합니다. 스캐너가 보내는 최종 요청은 ['https://www.testvuln.com?url=http://revsuit.com/ssrfa98oni1&p=useless','https://www.testvuln.com?url=http://revsuit.com/ssrfa98oni2&p=useless', ... ,'https://www.testvuln.com?url=//revsuit.com/ssrfa98oni5&p=useless']일 수 있습니다. 이들 모두 성공적으로 공격할 수 있습니다.
그러나 규칙의 flagFormat에 익명 그룹이 사용되었기 때문에 플랫폼은 연결된 flagGroup(이 경우 ssrfa98oni)을 쿼리하고, 처음 나타날 때만 클라이언트에 flag를 푸시하므로 클라이언트는 하나의 flag(ssrfa98oni1)만 수신합니다. 이는 이미 대상의 url 매개변수가 취약함을 증명합니다.
실제 침투 테스트 시나리오에서는 RevSuit의 다양한 모듈을 조합하여 특정 작업을 쉽고 빠르게 수행할 수 있습니다. 다음은 Java Web의 블라인드 XXE 예제로, RevSuit의 HTTP 및 FTP 모듈을 템플릿 변수와 함께 사용하여 포트 스캔을 빠르게 완료하는 방법을 보여줍니다.
먼저 evil.dtd를 반환하는 HTTP 규칙을 생성하고, DTD의 내용에 대한 응답을 사용자 정의하여 RevSuit의 FTP 서비스에 연결하도록 하고, 템플릿 변수를 사용하여 스캔할 호스트와 포트를 FTP의 사용자 및 비밀번호를 통해 FTP로 전달합니다.

그런 다음 사용자 및 비밀번호 템플릿 변수에서 스캔할 호스트와 포트를 수신하는 FTP 규칙을 생성하고, 이를 Pasv 주소로 설정합니다.

그런 다음 BurpSuit를 사용하여 스캔을 실행하고, evil.dtd URL에 호스트 및 포트 매개변수를 설정하여 포트 스캔의 대상을 설정합니다.

실행 결과는 다음과 같습니다:

이는 Passive Address에 접근할 수 없으면 FTP 연결이 중단되기 때문에, 연결이 정상적으로 종료되는지 여부를 통해 포트가 열려 있는지 확인할 수 있습니다. 이 예에서는 포트 8005와 8080이 열려 있음을 성공적으로 감지했습니다.
더 자세한 위키가 준비 중입니다. 그 전에 직접 탐색해 보세요.
이슈를 제출하거나 Weixin을 통해 연락해 주세요: TGk0bjA2Cg==
이 프로젝트는 다음 뛰어난 프로젝트의 코드를 참고했습니다:
이 프로젝트 개발 기간 동안 도움과 조언을 아낌없이 주신 친구 @E99p1ant님께 감사드립니다.
@Apache License 2.0