
오픈 포트에서 서비스 검색을 위한 독립 실행형 유틸리티!
기능 • 설치 • 사용법 • fingerprintx 실행 • 라이브러리로 사용 • 왜 nmap이 아닌가? • 참고사항 • 감사의 말
fingerprintx는 httpx와 유사한 유틸리티로, RDP, SSH, MySQL, PostgreSQL, Kafka 등과 같은 서비스의 핑거프린팅도 지원합니다. fingerprintx는 Naabu와 같은 포트 스캐너와 함께 사용되어 포트 스캔 중 발견된 포트 집합을 핑거프린트할 수 있습니다. 예를 들어, 엔지니어가 IP 범위를 스캔한 후 발견된 모든 포트에서 실행 중인 서비스를 신속하게 핑거프린트하려는 경우가 있습니다.



51개의 서비스 탐지 플러그인이 TCP 및 UDP 프로토콜을 지원합니다:
| 서비스 | 전송 프로토콜 |
|---|---|
| Cassandra | TCP |
| ChromaDB | TCP |
| CouchDB | TCP |
| DB2 | TCP |
| DHCP | UDP |
| Diameter | TCP |
| DNS | TCP/UDP |
| Echo | TCP |
| Elasticsearch | TCP |
| Firebird | TCP |
| FTP | TCP |
| HTTP/HTTPS | TCP |
| IMAP | TCP |
| InfluxDB | TCP |
| IPMI | TCP |
| IPSEC | UDP |
| Java RMI | TCP |
| JDWP | TCP |
| Kafka | TCP |
| LDAP | TCP |
| Linux RPC | TCP |
| Memcached | TCP |
| Milvus | TCP |
| Modbus | TCP |
| MongoDB | TCP |
| MQTT | TCP |
| MSSQL | TCP |
| MySQL | TCP |
| Neo4j | TCP |
| NetBIOS-NS | UDP |
| NTP | UDP |
| OpenVPN | UDP |
| OracleDB | TCP |
| Pinecone | TCP |
| POP3 | TCP |
| PostgreSQL | TCP |
| RDP | TCP |
| Redis | TCP |
| Rsync | TCP |
| RTSP | TCP |
| SMB | TCP |
| SMPP | TCP |
| SMTP | TCP |
| SNMP | UDP |
| SNPP | TCP |
| SSH | TCP |
| STUN | UDP |
| Sybase | TCP |
| Telnet | TCP |
| VNC | TCP |
Github를 통해
go install github.com/praetorian-inc/fingerprintx/cmd/fingerprintx@latest
소스에서 (go 버전 > 1.18)
$ git clone [email protected]:praetorian-inc/fingerprintx.git
$ cd fingerprintx
# go 버전 > 1.18인 경우
$ go build ./cmd/fingerprintx
$ ./fingerprintx -h
Docker
$ git clone [email protected]:praetorian-inc/fingerprintx.git
$ cd fingerprintx
# 빌드
docker build -t fingerprintx .
# 실행
docker run --rm fingerprintx -h
docker run --rm fingerprintx -t praetorian.com:80 --json
fingerprintx -h
-h 옵션은 fingerprintx가 지원하는 모든 플래그를 표시합니다.
사용법:
fingerprintx [flags]
대상 지정:
호스트와 포트 번호 또는 IP와 포트 번호가 필요합니다. 포트는 열려 있다고 가정합니다.
HOST:PORT 또는 IP:PORT
예제:
fingerprintx -t praetorian.com:80
fingerprintx -l input-file.txt
fingerprintx --json -t praetorian.com:80,127.0.0.1:8000
Flags:
--csv csv 형식 출력
-f, --fast 빠른 모드
-h, --help 도움말
--json json 형식 출력
-l, --list string 대상이 포함된 입력 파일
-o, --output string 출력 파일
-t, --targets strings 대상 또는 쉼표로 구분된 대상 목록
-w, --timeout int 타임아웃 (밀리초) (기본값 500)
-U, --udp UDP 플러그인 실행
-v, --verbose 상세 모드
fast 모드는 각 대상에 대해 해당 포트와 연관된 기본 서비스에 대해서만 핑거프린트를 시도합니다. 예를 들어, 입력이 praetorian.com:8443인 경우 https 플러그인만 실행됩니다. praetorian.com:8443에서 https가 실행 중이지 않으면 출력이 없습니다. 왜 이렇게 할까요? 대규모 호스트 목록에서 대부분의 서비스를 신속하게 핑거프린트하는 빠른 방법이기 때문입니다 (80/20 법칙 참고).
단일 대상:
$ fingerprintx -t 127.0.0.1:8000
http://127.0.0.1:8000
기본적으로 출력 형식은 SERVICE://HOST:PORT입니다. 더 자세한 서비스 출력을 보려면 --json 플래그로 JSON을 지정하세요:
$ fingerprintx -t 127.0.0.1:8000 --json
{"ip":"127.0.0.1","port":8000,"service":"http","transport":"tcp","metadata":{"responseHeaders":{"Content-Length":["1154"],"Content-Type":["text/html; charset=utf-8"],"Date":["Mon, 19 Sep 2022 18:23:18 GMT"],"Server":["SimpleHTTP/0.6 Python/3.10.6"]},"status":"200 OK","statusCode":200,"version":"SimpleHTTP/0.6 Python/3.10.6"}}
다른 프로그램(예: naabu)의 출력을 파이프로 전달:
$ naabu 127.0.0.1 -silent 2>/dev/null | fingerprintx
http://127.0.0.1:8000
ftp://127.0.0.1:21
입력 파일로 실행:
$ cat input.txt | fingerprintx
http://praetorian.com:80
telnet://telehack.com:23
# 또는 선호하는 방식
$ fingerprintx -l input.txt
http://praetorian.com:80
telnet://telehack.com:23
더 많은 메타데이터 출력:
$ cat input.txt | fingerprintx --json
{"host":"praetorian.com","ip":"146.148.61.165","port":80,"service":"http","transport":"tcp","metadata":{"responseHeaders":{"Connection":["keep-alive"],"Content-Type":["text/html"],"Date":["Mon, 19 Sep 2022 18:37:55 GMT"],"Etag":["W/\"5e3e263f-1703\""],"Keep-Alive":["timeout=20"],"Server":["nginx"],"Vary":["Accept-Encoding"]},"status":"404 Not Found","statusCode":404,"version":"nginx"}}
{"host":"telehack.com","ip":"64.13.139.230","port":23,"service":"telnet","transport":"tcp","metadata":{"serverData":"fffb03"}}
fingerprintx는 프로젝트에 임포트하여 열린 포트에서 서비스를 스캔하는 데 사용할 수 있습니다. 사용 방법에 대한 예제 코드는 여기 examples 디렉토리에 제공되어 있습니다. go build scan.go로 빌드하세요. fingerprintx를 자신의 프로젝트에 임포트할 때 참고할 수 있는 또 다른 파일로는 명령줄 실행기가 있습니다.
Nmap은 네트워크 스캐닝의 표준입니다. 왜 nmap 대신 fingerprintx를 사용해야 할까요? 주요 이유는 두 가지입니다: