
إطار قوي لاستطلاع الأهداف مدعوم بنظرية الرسوم البيانية.
تم نقل المشروع إلى مستودع واحد (monorepo). راجع https://github.com/pownjs/pown لمزيد من المعلومات.
Recon هو إطار عمل للاستطلاع على الأهداف مدعوم برسوم المعرفة. باستخدام رسوم المعرفة بدلاً من التمثيل الجدولي المسطح، يصبح من الأسهل العثور على العلاقات بين أنواع مختلفة من المعلومات، وهو ما يكون مفيدًا جدًا في العديد من المواقف. تساعد خوارزميات رسوم المعرفة أيضًا في المقارنة والبحث وإيجاد أقصر المسار والعديد من المهام المفيدة الأخرى للمساعدة في اكتشاف المعلومات وجمع الاستخبارات.
هذه الأداة هي جزء من مبادرة المصدر المفتوح secapps.com.```
/ | / | /_\ | _ \ _ / |
_ \ | ( / _ | / /_
|/__// __| || |___/
https://secapps.com
> **ملاحظة**: Recon هو نتيجة نسخة شبه مباشرة من أداة SecApps الممتازة [Recon](https://recon.secapps.com).
## بداية سريعة
هذه الأداة مخصصة للاستخدام كجزء من Pown.js ولكن يمكن استدعاؤها بشكل منفصل كأداة مستقلة.
قم بتثبيت 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
## Library Use
الوحدة هي أيضًا مكتبة. اطّلع على الكود والأمثلة للحصول على فكرة عن كيفية الاستخدام. قريبًا سيكون التوثيق متاحًا.
## Usage
> **تحذير**: هذا الأمر 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 مع بعض الاختلافات الطفيفة.
يعمل المحدد بشكل مشابه لمحدد CSS على عناصر DOM، لكن المحددات في 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 يطابق العنصر الذي له معرّف مطابق (مثال: #foo هو نفسه [id = 'foo']).[name] يطابق العناصر إذا كانت تحتوي على سمة البيانات المحددة، أي غير معرفة (مثال: [foo] لسمة باسم "foo"). هنا، تعتبر null قيمة معرفة.[^name] يطابق العناصر إذا كانت سمة البيانات المحددة غير معرفة، أي غير موجودة (مثال: [^foo]). هنا، تعتبر null قيمة معرفة.[?name] يطابق العناصر إذا كانت سمة البيانات المحددة ذات قيمة صحيحة منطقياً (truthy) (مثال: [?foo]).[!name] يطابق العناصر إذا كانت سمة البيانات المحددة ذات قيمة خاطئة منطقياً (falsey) (مثال: [!foo]).[name = value] يطابق العناصر إذا تطابقت سمة البيانات لديهم مع قيمة محددة (مثال: [foo = 'bar'] أو [num = 2]).> (محدد الطفل) يطابق الأطفال المباشرين للعقدة الأم (مثال: node > node). (محدد السليل) يطابق أحفاد العقدة الأم (مثال: node node).$ (محدد الموضوع) يحدد موضوع المحدد (مثال: $node > node لتحديد العقد الأم بدلاً من الأطفال).نوع معقد من التحديد يُعرف بالتنقل.
فيما يلي بعض التحويلات المتاحة في Recon. تتوفر تحويلات إضافية في وحدات pown الاختيارية.
لإظهار قوة Recon والاستخبارات مفتوحة المصدر القائمة على الرسوم البيانية (graph-based 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، فسيتم عرض هذا لك:```
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'] أو [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]] يطابق العناصر التي درجة اتصالها أكبر من 2). الخصائص المدعومة تشمل degree, indegree, و outdegree.