
그래프 이론으로 구동되는 강력한 타깃 정찰 프레임워크.
프로젝트가 모노레포로 이전되었습니다. 자세한 내용은 https://github.com/pownjs/pown를 참조하세요.
Recon은 지식 그래프로 구동되는 대상 정찰 프레임워크입니다. 평평한 테이블 표현 대신 지식 그래프를 사용하면 다양한 유형의 정보 간의 관계를 더 쉽게 찾을 수 있어 많은 상황에서 매우 유용합니다. 지식 그래프 알고리즘은 또한 차이 비교(diffing), 검색, 최단 경로 찾기 등 정보 발견 및 정보 수집을 지원하는 다양한 유용한 작업에 도움이 됩니다.
이 도구는 secapps.com 오픈소스 이니셔티브의 일부입니다.```
/ | / | /_\ | _ \ _ / |
_ \ | ( / _ | / /_
|/__// __| || |___/
https://secapps.com
> **참고**: Recon은 SecApps의 훌륭한 [Recon](https://recon.secapps.com) 도구를 거의 직접 복사한 결과물입니다.
## 빠른 시작
이 도구는 [Pown.js](https://github.com/pownjs/pown)의 일부로 사용되도록 설계되었지만, 독립적인 도구로 별도로 호출할 수도 있습니다.
평소와 같이 Pown을 먼저 설치하세요:```sh
$ npm install -g pown@latest
recon 설치:```sh $ pown modules install @pown/recon
Pown에서 직접 호출:```sh
$ pown recon
이 모듈을 프로젝트 루트에서 로컬로 설치하세요:```sh $ npm install @pown/recon --save
완료되면 pown cli를 호출하십시오:```sh
$ POWN_ROOT=. ./node_modules/.bin/pown-cli recon
로컬에서 전역 pown을 사용하여 도구를 호출할 수도 있습니다:```sh $ POWN_ROOT=. pown recon
## 라이브러리 사용
이 모듈은 라이브러리이기도 합니다. 사용 방법에 대한 아이디어를 얻으려면 코드와 예제를 확인하세요. 문서는 곧 제공될 예정입니다.
## 사용법
> **경고**: 이 pown 명령어는 현재 개발 중이며, 그 결과로 주요 변경 사항이 발생할 수 있습니다.```
pown-cli recon <command>
Target recon
Commands:
pown-cli recon transform <transform> Perform inline transformation [aliases: t]
pown-cli recon template <command> Recon template commands [aliases: p, templates]
pown-cli recon select <expressions...> Select nodes [aliases: s]
pown-cli recon traverse <expressions...> Traverse nodes [aliases: v]
pown-cli recon options <command> Manage options [aliases: option]
pown-cli recon cache <command> Manage cache
pown-cli recon add <nodes...> Add nodes [aliases: a]
pown-cli recon remove <expressions...> Remove nodes [aliases: r]
pown-cli recon edit <expressions...> Edit nodes [aliases: e]
pown-cli recon merge <files...> Perform a merge between at least two recon files [aliases: m]
pown-cli recon diff <fileA> <fileB> Perform a diff between two recon files [aliases: d]
pown-cli recon group <name> <expressions...> Group nodes [aliases: g]
pown-cli recon ungroup <expressions...> Ungroup nodes [aliases: u]
pown-cli recon load <file> Load a file [aliases: l]
pown-cli recon save <file> Save to file [aliases: o]
pown-cli recon import <file> Import file [aliases: i]
pown-cli recon export <file> Export to file [aliases: x]
pown-cli recon remote <command> Remote managment [aliases: remotes, f]
pown-cli recon layout <name> Layout the graph [aliases: k]
pown-cli recon summary [options] Create a summary [aliases: y]
pown-cli recon exec <files...> Execute js file [aliases: c]
Options:
--version Show version number [boolean]
--help Show help [boolean]
pown-cli recon transform <transform>
Perform inline transformation
Commands:
pown-cli recon transform bitbucketlistrepos [options] <nodes...> List Bitbucket repositories [aliases: bitbucket_list_repos, bblr]
pown-cli recon transform bitbucketlistsnippets [options] <nodes...> List Bitbucket snippets [aliases: bitbucket_list_snippets, bbls]
pown-cli recon transform bitbucketlistteamrepos [options] <nodes...> List Bitbucket team repos [aliases: bitbucket_list_team_repos, bbltr]
pown-cli recon transform bitbucketlistteammembers [options] <nodes...> List Bitbucket team members [aliases: bitbucket_list_team_members, bbltm]
pown-cli recon transform bufferoverrunsubdomainsearch [options] <nodes...> Obtain a list of subdomains using bufferover.run DNS service [aliases: bufferoverrun_subdomain_search, brss]
pown-cli recon transform certspotterissuances [options] <nodes...> Obtain issuances from Certspotter [aliases: certspotter_issuances, csi]
pown-cli recon transform cloudflarednsquery [options] <nodes...> Query CloudFlare DNS API [aliases: cloudflare_dns_query, cfdq]
pown-cli recon transform crtshcndomainreport [options] <nodes...> Obtain crt.sh domain report which helps enumerating potential target subdomains [aliases: crtsh_cn_domain_report, crtshcdr]
pown-cli recon transform crtshsandomainreport [options] <nodes...> Obtain crt.sh domain report which helps enumerating potential target subdomains [aliases: crtsh_san_domain_report, crtshsdr]
pown-cli recon transform dnsresolve [options] <nodes...> Performs DNS resolution [aliases: dns_resolve, dr, dns]
pown-cli recon transform dockerhublistrepos [options] <nodes...> List DockerHub repositories for a given member or org [aliases: dockerhub_list_repos, dhlr]
pown-cli recon transform gravatar [options] <nodes...> Get gravatar
pown-cli recon transform hackertargetreverseiplookup [options] <nodes...> Obtain reverse IP information from hackertarget.com [aliases: hackertarget_reverse_ip_lookup, htril]
pown-cli recon transform hackertargetonlineportscan [options] <nodes...> Obtain port information from hackertarget.com [aliases: hackertarget_online_port_scan, htps]
pown-cli recon transform httpfingerprint [options] <nodes...> Performs a fingerprint on the HTTP server and application [aliases: http_fingerprint, hf]
pown-cli recon transform ipinfoiowidgetsearch [options] <nodes...> Obtain ipinfo.io whois report via the web widget [aliases: ipinfoio_widget_search, iiiows]
pown-cli recon transform omnisintsubdomainreport [options] <nodes...> Obtain omnisint domain report which helps enumerating target subdomains [aliases: omnisint_subdomain_report]
pown-cli recon transform pkslookupkeys [options] <nodes...> Look the the PKS database at pool.sks-keyservers.net which pgp.mit.edu is part of [aliases: pks_lookup_keys, pkslk]
pown-cli recon transform pwndbsearch [options] <nodes...> Searching the PwnDB database [aliases: pwndb_search, pds]
pown-cli recon transform riddleripsearch [options] <nodes...> Searches for IP references using F-Secure riddler.io [aliases: riddler_ip_search, rdis]
pown-cli recon transform riddlerdomainsearch [options] <nodes...> Searches for Domain references using F-Secure riddler.io [aliases: riddler_domain_search, rdds]
pown-cli recon transform script [options] <nodes...> Perform transformation with external script [aliases: script]
pown-cli recon transform scyllasearch [options] <nodes...> Searching the Scylla database [aliases: scylla_search, scys]
pown-cli recon transform securitytrailssuggestions [options] <nodes...> Get a list of domain suggestions from securitytrails.com [aliases: securitytrails_domain_suggestions, stds]
pown-cli recon transform shodanorgsearch [options] <nodes...> Performs search using ORG filter [aliases: shodan_org_search, sos]
pown-cli recon transform shodansslsearch [options] <nodes...> Performs search using SSL filter [aliases: shodan_ssl_search, sss]
pown-cli recon transform spysesubdomains [options] <nodes...> Performs subdomain searching with Spyse [aliases: spyse_subdomains, ssds]
pown-cli recon transform tcpportscan [options] <nodes...> Simple, full-handshake TCP port scanner (very slow and sometimes inaccurate) [aliases: tcp_port_scan, tps]
pown-cli recon transform threatcrowddomainreport [options] <nodes...> Obtain threatcrowd domain report which helps enumerating potential target subdomains and email addresses [aliases: threatcrowd_domain_report, tcdr]
pown-cli recon transform threatcrowdipreport [options] <nodes...> Obtain threatcrowd ip report which helps enumerating virtual hosts [aliases: threatcrowd_ip_report, tcir]
pown-cli recon transform urlscanliveshot [options] <nodes...> Generates a liveshot of any public site via urlscan [aliases: urlscan_liveshot, usls]
pown-cli recon transform urlscansubdomains [options] <nodes...> Find subdomains via urlscan [aliases: urlscan_subdomains, uss]
pown-cli recon transform noop [options] <nodes...> Does not do anything [aliases: nop]
pown-cli recon transform sleep [options] <nodes...> Sleeps for predefined time [aliases: sleep, wait]
pown-cli recon transform duplicate [options] <nodes...> Duplicate node [aliases: dup]
pown-cli recon transform extract [options] <nodes...> Extract property [aliases: excavate]
pown-cli recon transform prefix [options] <nodes...> Creates a new node with a prefix [aliases: prepand]
pown-cli recon transform suffix [options] <nodes...> Creates a new node with a suffix [aliases: append]
pown-cli recon transform augment [options] <nodes...> Update node with prefix or suffix
pown-cli recon transform splitemail [options] <nodes...> Split email at the @ sign [aliases: split_email]
pown-cli recon transform buildemail [options] <nodes...> Build email from node label [aliases: build_email]
pown-cli recon transform splitdomain [options] <nodes...> Split domain at the first dot [aliases: split_domain]
pown-cli recon transform builddomain [options] <nodes...> Build domain from node label [aliases: build_domain]
pown-cli recon transform splituri [options] <nodes...> Split URI to corresponding parts [aliases: split_uri]
pown-cli recon transform builduri [options] <nodes...> Build URI from node label [aliases: build_uri]
pown-cli recon transform bakeimages [options] <nodes...> Convert external image into data URIs for self-embedding purposes [aliases: bake_images, bes]
pown-cli recon transform virustotalsubdomains [options] <nodes...> Obtain subdomains from Virustotal [aliases: virustotal_subdomains, vtsd]
pown-cli recon transform vulnerssearch [options] <nodes...> Obtain vulnerability information via vulners.com [aliases: vulners_search, vs]
pown-cli recon transform wappalyzerprofile [options] <nodes...> Enumerate technologies with api.wappalyzer.com [aliases: wappalyzer_profile, wzp]
pown-cli recon transform worker [options] <nodes...> Perform transformation with external worker [aliases: worker]
pown-cli recon transform zonecrunchersubdomains [options] <nodes...> Performs subdomain searching with Zonecruncher [aliases: zonecruncher_subdomains, zcss]
pown-cli recon transform auto [options] <nodes...> Select the most appropriate methods of transformation
Options:
--version Show version number [boolean]
--help Show help [boolean]
-r, --read Read file [string]
-w, --write Write file [string]
생성된 그래프는 편의를 위해 이 도구가 기반으로 하는 SecApps Recon에서 미리 볼 수 있습니다. 브라우저로 SecApps Recon에 접근할 수 있지만 명령줄에서도 호출할 수 있습니다.
먼저 @pown/apps가 설치되어 있어야 합니다:```sh
$ pown modules install @pown/apps
이 명령은 선택적 앱 패키지를 설치합니다.
쓰기 옵션을 사용하여 그래프를 생성하세요:```sh
$ pown recon transform auto -w path/to/file.network --node-type brand target
정찰이 완료되면 SecApps Recon에서 그래프를 미리 보기 위해 엽니다:```sh $ pown apps recon < path/to/file.network
## 스크립팅
Pown recon은 선호하는 쉘 환경, [Pown Script](https://github.com/pownjs/script), [Pown Engine Templates](https://github.com/pownjs/engine) 및 JavaScript를 통해 스크립팅할 수 있도록 설계되었습니다. 스크립트는 각 명령 실행 간에 컨텍스트가 유지된다는 이점이 있습니다. 즉, 중간 파일에 저장하고 복원할 필요 없이 그래프를 구축할 수 있습니다.
선호하는 편집기를 사용하여 `example.pown`이라는 파일을 만들고 다음 내용을 추가하십시오:```sh
echo This is script
recon add --node-type brand target
recon t auto
pown에서 스크립트를 실행하세요:```sh $ pown script path/to/example.pown
더 많은 정보를 원하시면 `./examples`를 참고하여 스크립트 사용에 대한 더 많은 아이디어를 얻으세요.
## 선택자
> 일부 명령은 그래프 선택자를 필요로 합니다. 나머지 문서는 cytoscape.js 선택자 매뉴얼을 약간의 차이점을 두고 복사한 것입니다.
선택자는 DOM 요소의 CSS 선택자와 유사하게 작동하지만, Recon의 선택자는 그래프 요소 컬렉션에 대해 작동합니다. 이 메커니즘은 강력한 cytoscape.js에 의해 제공됩니다.
선택자는 결합하여 강력한 쿼리를 만들 수 있습니다. 예를 들면:```
pown select 'node[weight >= 50][height < 180]'
선택자는 쉼표로 함께 연결될 수 있습니다(효과적으로 논리적 OR을 생성):``` pown select 'node#j, edge[source = "j"]'
문자열을 따옴표로 묶어야 한다는 점을 주의하는 것이 중요합니다:```
pown select 'node[type = "domain"]'
메타 문자 ( ^ $ \ / ( ) | ? + * [ ] { } , . )는 이스케이프해야 합니다:
pown select '#some\$funky\@id'
node, edge, 또는 * (그룹 선택자) 그룹을 기준으로 요소를 매칭합니다 (node는 노드, edge는 엣지, *는 전체)..className 지정된 클래스를 가진 요소를 매칭합니다 (예: foo 클래스에 대해 .foo 사용).#id 일치하는 ID를 가진 요소를 매칭합니다 (예: #foo는 [id = 'foo']와 동일).[name] 지정된 데이터 속성이 정의된(즉, undefined가 아닌) 요소를 매칭합니다 (예: 속성 이름이 "foo"인 경우 [foo]). 여기서 null은 정의된 값으로 간주합니다.[^name] 지정된 데이터 속성이 정의되지 않은(즉, undefined인) 요소를 매칭합니다 (예: [^foo]). 여기서 null은 정의된 값으로 간주합니다.[?name] 지정된 데이터 속성이 truthy 값인 요소를 매칭합니다 (예: [?foo]).[!name] 지정된 데이터 속성이 falsy 값인 요소를 매칭합니다 (예: [!foo]).[name = value] 데이터 속성이 지정된 값과 일치하는 요소를 매칭합니다 (예: [foo = 'bar'] 또는 [num = 2]).[name != value] 데이터 속성이 지정된 값과 일치하지 않는 요소를 매칭합니다 (예: [foo != 'bar'] 또는 [num != 2]).> (자식 선택자) 부모 노드의 직계 자식을 매칭합니다 (예: node > node). (후손 선택자) 부모 노드의 후손을 매칭합니다 (예: node node).$ (주제 선택자) 선택자의 주제를 설정합니다 (예: $node > node는 자식 대신 부모 노드를 선택).선택의 복잡한 유형을 탐색이라고 합니다.
다음은 Recon에서 사용할 수 있는 일부 변환입니다. 추가 변환은 선택적 pown 모듈을 통해 사용할 수 있습니다.
Recon과 그래프 기반 OSINT(오픈 소스 인텔리전스)의 강력함을 보여주기 위해 다음과 같은 간단한 예제를 살펴보겠습니다.
먼저, Google 엔지니어링 팀의 멤버이면서 GitHub 계정에 기여하는 모든 사람을 질의하는 것으로 시작해 보겠습니다.```sh pown recon t -w google.network ghlm google
이 명령은 다음과 유사한 테이블을 생성합니다:```
github:member
┌─────────────────────────────────────────────────────────┬─────────────────────────────────────────────────────────┬─────────────────────────────────────────────────────────┐
│ uri │ login │ avatar │
├─────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┤
│ https://github.com/3rf │ 3rf │ https://avatars1.githubusercontent.com/u/1242478?v=4 │
├─────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┤
│ https://github.com/aaroey │ aaroey │ https://avatars0.githubusercontent.com/u/31743510?v=4 │
├─────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┤
│ https://github.com/aarongable │ aarongable │ https://avatars3.githubusercontent.com/u/2474926?v=4 │
...
...
...
│ https://github.com/alexpennace │ alexpennace │ https://avatars1.githubusercontent.com/u/2506548?v=4 │
├─────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┤
│ https://github.com/alexv │ alexv │ https://avatars0.githubusercontent.com/u/30807372?v=4 │
├─────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┤
│ https://github.com/alexwhouse │ alexwhouse │ https://avatars3.githubusercontent.com/u/1448490?v=4 │
└─────────────────────────────────────────────────────────┴─────────────────────────────────────────────────────────┴─────────────────────────────────────────────────────────┘
방금 첫 번째 네트워크를 생성했습니다!
표현은 편의상 표 형식이지만, 그 아래에는 노드들이 엣지로 연결된 모델이 있습니다.
그것이 어떻게 생겼는지 궁금하다면 SecApps Recon을 사용할 수 있습니다. 명령줄은 그래프의 복잡성을 표현하는 데 필요한 수준의 상호작용성을 제공하지 않습니다.
-w google.network 명령줄 옵션은 네트워크를 파일로 내보냅니다. 파일 열기 기능을 사용하여 파일을 SecApps Recon에 직접 로드할 수 있습니다. 결과는 다음과 같습니다:
이제 이 Google 엔지니어들이 작업 중인 저장소를 쿼리하고 싶다고 상상해 보세요. 이는 쉽습니다. 먼저 그래프에서 노드를 선택한 다음 "GitHub List Repositories" 변환으로 변환해야 합니다. 명령줄에서 이렇게 수행합니다:```sh pown recon t ghlr -r google.network -w google2.nework -s 'node[type="github:member"]'
만약 GitHub API rate limits에 도달하지 않는다면, 다음과 같은 내용이 표시됩니다:```
github:repo
┌──────────────────────────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────────────────────────────┐
│ uri │ fullName │
├──────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────┤
│ https://github.com/3rf/2015-talks │ 3rf/2015-talks │
├──────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────┤
│ https://github.com/3rf/codecoroner │ 3rf/codecoroner │
├──────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────┤
│ https://github.com/3rf/DefinitelyTyped │ 3rf/DefinitelyTyped │
...
...
...
│ https://github.com/agau4779/ultimate-tic-tac-toe │ agau4779/ultimate-tic-tac-toe │
├──────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────┤
│ https://github.com/agau4779/worm_scraper │ agau4779/worm_scraper │
├──────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────┤
│ https://github.com/agau4779/zsearch │ agau4779/zsearch │
└──────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────┘
이제 두 개의 파일 google.network와 google2.network가 있으므로, 두 파일 간의 차이점이 무엇인지 궁금할 수 있습니다. 음, 바로 그 작업을 위한 도구가 있습니다.```sh
pown recon diff google.network google2.network
이제 알겠네요! 이 기능은 대규모 정찰 맵을 구축하고 주요 차이점을 알고 싶을 때 상당히 유용합니다. cron 작업이 매일 동일한 정찰을 수행하고, 추가로 탐색해볼 만한 새로운 것이 나타났는지 알고 싶은 상황을 상상해보세요. 안녕하세요, 버그 바운티 헌터 여러분!
[name > value] 데이터 속성이 지정된 값보다 큰 요소를 매칭합니다 (예: [foo > 'bar'] 또는 [num > 2]).[name >= value] 데이터 속성이 지정된 값보다 크거나 같은 요소를 매칭합니다 (예: [foo >= 'bar'] 또는 [num >= 2]).[name < value] 데이터 속성이 지정된 값보다 작은 요소를 매칭합니다 (예: [foo < 'bar'] 또는 [num < 2]).[name <= value] 데이터 속성이 지정된 값보다 작거나 같은 요소를 매칭합니다 (예: [foo <= 'bar'] 또는 [num <= 2]).[name *= value] 데이터 속성이 지정된 값을 부분 문자열로 포함하는 요소를 매칭합니다 (예: [foo *= 'bar']).[name ^= value] 데이터 속성이 지정된 값으로 시작하는 요소를 매칭합니다 (예: [foo ^= 'bar']).[name $= value] 데이터 속성이 지정된 값으로 끝나는 요소를 매칭합니다 (예: [foo $= 'bar']).@ (데이터 속성 연산자 수정자) 연산자 앞에 붙여 대소문자를 구분하지 않게 합니다 (예: [foo @$= 'ar'], [foo @>= 'a'], [foo @= 'bar']).! (데이터 속성 연산자 수정자) 연산자 앞에 붙여 부정합니다 (예: [foo !$= 'ar'], [foo !>= 'a']).[[]] (메타데이터 대괄호) 데이터 대신 메타데이터를 매칭하기 위해 대괄호 대신 이중 대괄호를 사용합니다 (예: [[degree > 2]]는 degree가 2보다 큰 요소를 매칭). 지원되는 속성에는 degree, indegree, outdegree가 있습니다.