
자산 탐지 및 식별 도구 - 웹 지문 정보를 빠르게 식별하고 자산 유형을 파악합니다. 레드팀이 대상 자산 정보를 신속하게 파악하고 블루팀이 의심스러운 취약점을 발견하는 데 도움을 줍니다.
[中文 Readme]
Dismap의 위치는 자산 발견 및 식별 도구입니다. 웹/tcp/udp와 같은 프로토콜 및 핑거프린트 정보를 신속하게 식별하고, 자산 유형을 파악할 수 있으며, 내부 및 외부 네트워크 모두에 적합합니다. 이는 레드팀 구성원이 잠재적 위험 자산 정보를 신속하게 파악하고, 블루팀 구성원이 의심스러운 취약 자산을 탐지하는 데 도움을 줍니다.
Dismap은 완전한 핑거프린트 규칙 베이스를 갖추고 있으며, 현재 tcp/udp/tls 프로토콜 핑거프린트 및 4500개 이상의 웹 핑거프린트 규칙을 포함하여 favicon, body, header 등을 식별할 수 있습니다. 규칙 베이스에 대한 소개는 RuleLab에 있습니다.
스캔 결과를 vulmap(>=0.8)에 직접 보내 취약점 스캔을 수행할 수 있습니다. 0.3 버전에서 텍스트 결과가 변경되었고, json 파일 결과가 추가되었으며, vulmap은 >= 1.0에서 연동을 지원할 예정입니다.
Dismap은 Linux, MacOS, Windows용 바이너리 파일입니다. Release에서 해당 버전을 다운로드하여 실행하세요:
# Linux 또는 MacOS
zhzyker@debian:~$ chmod +x dismap-0.3-linux-amd64
zhzyker@debian:~$ ./dismap-0.3-linux-amd64 -h
# Windows
C:\Users\zhzyker\Desktop> dismap-0.3-windows-amd64.exe -h
-f, --file string 지정된 파일에서 대상을 파싱하여 배치 인식 수행
-h, --help 도움말 표시
-i, --ip string 네트워크 세그먼트 [예: -i 192.168.1.0/24 또는 -i 192.168.1.1-10]
-j, --json string JSON 형식의 스캔 결과 [예: -j r.json]
-l, --level int 로그 수준 지정 (0:Fatal 1:Error 2:Info 3:Warning 4:Debug 5:Verbose) (기본값 3)
-m, --mode string 프로토콜 지정 [예: -m mysql/-m http]
--nc 문자 색상 출력 안 함
--np ICMP/PING을 사용하여 활성 호스트 감지 안 함
-o, --output string 스캔 결과를 지정된 파일에 저장 (기본값 "output.txt")
-p, --port string 사용자 정의 스캔 포트 [예: -p 80,443 또는 -p 1-65535]
--proxy string 프록시 스캔 사용, http/socks5 프로토콜 지원 [예: --proxy socks5://127.0.0.1:1080]
-t, --thread int 동시 스레드 수 (기본값 500)
--timeout int 응답 시간 제한, 기본값 5초 (기본값 5)
--type string 유형 지정 [예: --type tcp/--type udp]
-u, --uri string 대상 URI 지정 [예: -u https://example.com]
zhzyker@debian:~$ ./dismap -i 192.168.1.1/24
zhzyker@debian:~$ ./dismap -i 192.168.1.1/24 -o result.txt -j result.json
zhzyker@debian:~$ ./dismap -i 192.168.1.1/24 --np --timeout 10
zhzyker@debian:~$ ./dismap -i 192.168.1.1/24 -t 1000
zhzyker@debian:~$ ./dismap -u https://github.com/zhzyker/dismap
zhzyker@debian:~$ ./dismap -u mysql://192.168.1.1:3306
zhzyker@debian:~$ ./dismap -i 192.168.1.1/24 -p 1-65535
전체 규칙 베이스는 rule.go에 있는 구조체입니다. 대략적인 형식:
Rule:
Name: name /* 규칙 이름 정의 */
Type: header|body|ico /* 지원되는 인식 유형, header, body, ico는 논리적으로 조합 가능, ico는 favicon.ico를 별도로 요청하고 MD5 계산 */
Mode: and|or /* 유형 판단 논리 */
Rule
InBody: str /* 응답 본문에 특정 str이 존재하는지 지정 */
InHeader: str /* 응답 헤더에 특정 str이 존재하는지 지정 */
InIcoMd5: str_md5 /* favicon.ico의 MD5 */
Http:
ReqMethod: GET|POST /* 사용자 정의 요청 메서드, 현재 GET과 POST 지원 */
ReqPath: str /* 사용자 정의 요청 웹 경로 */
ReqHeader: []str /* Http 요청의 헤더 사용자 정의 */
ReqBody: str /* POST 요청의 본문 사용자 정의 */
예제1:
응답 본문에 <flink-root></flink-root> 문자가 존재하는지 여부
{"Apahce Flink", "body", "", InStr{"(<flink-root></flink-root>)", "", ""}, ReqHttp{"", "", nil, ""}},
예제2:
요청 경로 /myportal/control/main을 사용자 정의하고, 사용자 정의 요청의 결과에서 헤더 문자와 본문 문자가 있는지 확인합니다.
모든 정규 표현식을 지원함을 알 수 있습니다.
{"Apache OFBiz", "body|header", "or", InStr{"(Apache OFBiz|apache.ofbiz)", "(Set-Cookie: OFBiz.Visitor=(.*))", ""}, ReqHttp{"GET", "/myportal/control/main", nil, ""}},
header, body, ico의 논리 관계는 자유롭게 조합할 수 있지만, 반복적으로 조합할 수는 없습니다:
가능: "body|header|ico", "or" 또는 "body|header|ico", "or|and" 또는 "body|ico", "and"
불가능: "body|body", "or"
유형으로 반복 조합을 지정할 수 없지만, InBody를 통해 문자를 판단하여 구현할 수 있습니다: "body", "", InStr{"(str1|str2)"}