[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71FCRFXHNFMTGYAJ71MQM55":3,"skill-same:01M71FCRFXHNFMTGYAJ71MQM55":55},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":23,"linkOnly":24,"markdownContent":25,"markdownBody":26,"frontMatter":27,"refName":28,"commitSha":29,"skillDirectory":30,"forksCount":14,"repositoryHtmlUrl":31,"repositoryHomepageUrl":6,"ownerHtmlUrl":32,"ownerBlogUrl":6,"ownerDescription":33,"updatedAt":34,"install":35,"resources":48},"01M71FCRFXHNFMTGYAJ71MQM55","net-dns-dnstwist",null,"Net Dns Dnstwist.","DCx7C5\u002Fai-marketplace","DCx7C5","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F42419559?v=4","01M71C01G2AZV3NTNGWAWSHJPP","DC","01M71C01GQW6G50S2BYMS7PP3E",0,"MIT","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fnet-dns-dnstwist\u002FSKILL.md",[],[19,20,21,22],"dnstwist","net dns dnstwist","dns","cybersecurity","2026-11-10 10:12:30",false,"---\nname: net-dns-dnstwist\ndescription: \"Net Dns Dnstwist.\"\ndomain: cybersecurity\n---\n\n\")\n        for entry in high_risk[:10]:\n            print(f\"  {entry['domain']} (score: {entry['risk_score']})\")\n            for factor in entry['risk_factors']:\n                print(f\"    - {factor}\")\n\n    return {\"high\": high_risk, \"medium\": medium_risk, \"low\": low_risk}\n\nanalysis = analyze_results(results, legitimate_ips={\"93.184.216.34\"})\n```\n\n### Step 3: Continuous Monitoring Pipeline\n\n```python\nimport time\nimport hashlib\n\nclass TyposquatMonitor:\n    def __init__(self, domains, known_domains_file=\"known_typosquats.json\"):\n        self.domains = domains\n        self.known_file = known_domains_file\n        self.known_domains = self._load_known()\n\n    def _load_known(self):\n        try:\n            with open(self.known_file, \"r\") as f:\n                return json.load(f)\n        except FileNotFoundError:\n            return {}\n\n    def _save_known(self):\n        with open(self.known_file, \"w\") as f:\n            json.dump(self.known_domains, f, indent=2)\n\n    def scan_all_domains(self):\n        \"\"\"Scan all monitored domains for new typosquats.\"\"\"\n        new_findings = []\n        for domain in self.domains:\n            results = run_dnstwist_scan(domain)\n            for entry in results:\n                domain_key = entry.get(\"domain\", \"\")\n                if domain_key not in self.known_domains:\n                    entry[\"first_seen\"] = datetime.now().isoformat()\n                    entry[\"monitored_domain\"] = domain\n                    self.known_domains[domain_key] = entry\n                    new_findings.append(entry)\n                    print(f\"  [NEW] {domain_key} ({entry.get('fuzzer', '')})\")\n\n        self._save_known()\n        print(f\"\\n[+] New typosquatting domains found: {len(new_findings)}\")\n        return new_findings\n\n    def generate_alert(self, findings):\n        \"\"\"Generate alert for new high-risk typosquatting domains.\"\"\"\n        analysis = analyze_results(findings)\n        alerts = []\n        for entry in analysis[\"high\"]:\n            alerts.append({\n                \"severity\": \"HIGH\",\n                \"domain\": entry[\"domain\"],\n                \"target\": entry.get(\"monitored_domain\", \"\"),\n                \"risk_score\": entry[\"risk_score\"],\n                \"risk_factors\": entry[\"risk_factors\"],\n                \"dns_a\": entry.get(\"dns_a\", []),\n                \"dns_mx\": entry.get(\"dns_mx\", []),\n                \"timestamp\": datetime.now().isoformat(),\n            })\n        return alerts\n\nmonitor = TyposquatMonitor([\"mycompany.com\", \"mycompany.org\"])\nnew_findings = monitor.scan_all_domains()\nalerts = monitor.generate_alert(new_findings)\n```\n\n### Step 4: Export for Blocklist and Takedown\n\n```python\ndef export_blocklist(analysis, output_file=\"blocklist.txt\"):\n    \"\"\"Export high-risk domains as blocklist for firewall\u002Fproxy.\"\"\"\n    domains = []\n    for entry in analysis[\"high\"] + analysis[\"medium\"]:\n        domain = entry.get(\"domain\", \"\")\n        if domain:\n            domains.append(domain)\n\n    with open(output_file, \"w\") as f:\n        f.write(f\"# Typosquatting blocklist generated {datetime.now().isoformat()}\\n\")\n        for d in sorted(set(domains)):\n            f.write(f\"{d}\\n\")\n\n    print(f\"[+] Blocklist saved: {len(domains)} domains -> {output_file}\")\n    return domains\n\ndef generate_takedown_report(high_risk_domains):\n    \"\"\"Generate takedown request report.\"\"\"\n    report = f\"\"\"# Domain Takedown Request\nGenerated: {datetime.now().isoformat()}\n\n## Summary\n{len(high_risk_domains)} domains identified as potential typosquatting\u002Fphishing.\n\n## Domains Requiring Takedown\n\"\"\"\n    for entry in high_risk_domains:\n        report += f\"\"\"\n### {entry['domain']}\n- **Permutation Type**: {entry.get('fuzzer', 'unknown')}\n- **IP Address**: {', '.join(entry.get('dns_a', ['N\u002FA']))}\n- **MX Records**: {', '.join(entry.get('dns_mx', ['N\u002FA']))}\n- **Risk Score**: {entry.get('risk_score', 0)}\n- **Risk Factors**: {'; '.join(entry.get('risk_factors', []))}\n- **Web Similarity**: {entry.get('ssdeep_score', 'N\u002FA')}%\n\"\"\"\n    with open(\"takedown_report.md\", \"w\") as f:\n        f.write(report)\n    print(\"[+] Takedown report generated: takedown_report.md\")\n\nexport_blocklist(analysis)\ngenerate_takedown_report(analysis[\"high\"])\n```\n\n## Validation Criteria\n\n- DNSTwist generates domain permutations for target domain\n- DNS resolution identifies registered lookalike domains\n- Web similarity scoring detects cloned phishing pages\n- Risk scoring prioritizes domains by threat level\n- Continuous monitoring detects newly registered typosquats\n- Blocklist and takedown reports generated correctly\n\n## References\n\n- [dnstwist GitHub Repository](https:\u002F\u002Fgithub.com\u002Felceef\u002Fdnstwist)\n- [dnstwister Online Service](https:\u002F\u002Fdnstwister.report\u002F)\n- [HawkEye: Detect Typosquatting with DNSTwist](https:\u002F\u002Fhawk-eye.io\u002F2022\u002F11\u002Fhow-to-detect-typosquatting-using-dnstwist\u002F)\n- [Darktrace: Monitoring Typosquatting Domains](https:\u002F\u002Fwww.darktrace.com\u002Fblog\u002Fvigilance-in-action-monitoring-typosquatting-domains)\n- [Security Risk Advisors: Domain Monitoring](https:\u002F\u002Fsra.io\u002Fblog\u002Fdomain-monitoring-fast-and-cheap\u002F)\n- [Conscia: How to Detect Typosquatting](https:\u002F\u002Fconscia.com\u002Fblog\u002Fdiving-deep-how-to-detect-typosquatting\u002F)\n","\")\n        for entry in high_risk[:10]:\n            print(f\"  {entry['domain']} (score: {entry['risk_score']})\")\n            for factor in entry['risk_factors']:\n                print(f\"    - {factor}\")\n\n    return {\"high\": high_risk, \"medium\": medium_risk, \"low\": low_risk}\n\nanalysis = analyze_results(results, legitimate_ips={\"93.184.216.34\"})\n```\n\n### Step 3: Continuous Monitoring Pipeline\n\n```python\nimport time\nimport hashlib\n\nclass TyposquatMonitor:\n    def __init__(self, domains, known_domains_file=\"known_typosquats.json\"):\n        self.domains = domains\n        self.known_file = known_domains_file\n        self.known_domains = self._load_known()\n\n    def _load_known(self):\n        try:\n            with open(self.known_file, \"r\") as f:\n                return json.load(f)\n        except FileNotFoundError:\n            return {}\n\n    def _save_known(self):\n        with open(self.known_file, \"w\") as f:\n            json.dump(self.known_domains, f, indent=2)\n\n    def scan_all_domains(self):\n        \"\"\"Scan all monitored domains for new typosquats.\"\"\"\n        new_findings = []\n        for domain in self.domains:\n            results = run_dnstwist_scan(domain)\n            for entry in results:\n                domain_key = entry.get(\"domain\", \"\")\n                if domain_key not in self.known_domains:\n                    entry[\"first_seen\"] = datetime.now().isoformat()\n                    entry[\"monitored_domain\"] = domain\n                    self.known_domains[domain_key] = entry\n                    new_findings.append(entry)\n                    print(f\"  [NEW] {domain_key} ({entry.get('fuzzer', '')})\")\n\n        self._save_known()\n        print(f\"\\n[+] New typosquatting domains found: {len(new_findings)}\")\n        return new_findings\n\n    def generate_alert(self, findings):\n        \"\"\"Generate alert for new high-risk typosquatting domains.\"\"\"\n        analysis = analyze_results(findings)\n        alerts = []\n        for entry in analysis[\"high\"]:\n            alerts.append({\n                \"severity\": \"HIGH\",\n                \"domain\": entry[\"domain\"],\n                \"target\": entry.get(\"monitored_domain\", \"\"),\n                \"risk_score\": entry[\"risk_score\"],\n                \"risk_factors\": entry[\"risk_factors\"],\n                \"dns_a\": entry.get(\"dns_a\", []),\n                \"dns_mx\": entry.get(\"dns_mx\", []),\n                \"timestamp\": datetime.now().isoformat(),\n            })\n        return alerts\n\nmonitor = TyposquatMonitor([\"mycompany.com\", \"mycompany.org\"])\nnew_findings = monitor.scan_all_domains()\nalerts = monitor.generate_alert(new_findings)\n```\n\n### Step 4: Export for Blocklist and Takedown\n\n```python\ndef export_blocklist(analysis, output_file=\"blocklist.txt\"):\n    \"\"\"Export high-risk domains as blocklist for firewall\u002Fproxy.\"\"\"\n    domains = []\n    for entry in analysis[\"high\"] + analysis[\"medium\"]:\n        domain = entry.get(\"domain\", \"\")\n        if domain:\n            domains.append(domain)\n\n    with open(output_file, \"w\") as f:\n        f.write(f\"# Typosquatting blocklist generated {datetime.now().isoformat()}\\n\")\n        for d in sorted(set(domains)):\n            f.write(f\"{d}\\n\")\n\n    print(f\"[+] Blocklist saved: {len(domains)} domains -> {output_file}\")\n    return domains\n\ndef generate_takedown_report(high_risk_domains):\n    \"\"\"Generate takedown request report.\"\"\"\n    report = f\"\"\"# Domain Takedown Request\nGenerated: {datetime.now().isoformat()}\n\n## Summary\n{len(high_risk_domains)} domains identified as potential typosquatting\u002Fphishing.\n\n## Domains Requiring Takedown\n\"\"\"\n    for entry in high_risk_domains:\n        report += f\"\"\"\n### {entry['domain']}\n- **Permutation Type**: {entry.get('fuzzer', 'unknown')}\n- **IP Address**: {', '.join(entry.get('dns_a', ['N\u002FA']))}\n- **MX Records**: {', '.join(entry.get('dns_mx', ['N\u002FA']))}\n- **Risk Score**: {entry.get('risk_score', 0)}\n- **Risk Factors**: {'; '.join(entry.get('risk_factors', []))}\n- **Web Similarity**: {entry.get('ssdeep_score', 'N\u002FA')}%\n\"\"\"\n    with open(\"takedown_report.md\", \"w\") as f:\n        f.write(report)\n    print(\"[+] Takedown report generated: takedown_report.md\")\n\nexport_blocklist(analysis)\ngenerate_takedown_report(analysis[\"high\"])\n```\n\n## Validation Criteria\n\n- DNSTwist generates domain permutations for target domain\n- DNS resolution identifies registered lookalike domains\n- Web similarity scoring detects cloned phishing pages\n- Risk scoring prioritizes domains by threat level\n- Continuous monitoring detects newly registered typosquats\n- Blocklist and takedown reports generated correctly\n\n## References\n\n- [dnstwist GitHub Repository](https:\u002F\u002Fgithub.com\u002Felceef\u002Fdnstwist)\n- [dnstwister Online Service](https:\u002F\u002Fdnstwister.report\u002F)\n- [HawkEye: Detect Typosquatting with DNSTwist](https:\u002F\u002Fhawk-eye.io\u002F2022\u002F11\u002Fhow-to-detect-typosquatting-using-dnstwist\u002F)\n- [Darktrace: Monitoring Typosquatting Domains](https:\u002F\u002Fwww.darktrace.com\u002Fblog\u002Fvigilance-in-action-monitoring-typosquatting-domains)\n- [Security Risk Advisors: Domain Monitoring](https:\u002F\u002Fsra.io\u002Fblog\u002Fdomain-monitoring-fast-and-cheap\u002F)\n- [Conscia: How to Detect Typosquatting](https:\u002F\u002Fconscia.com\u002Fblog\u002Fdiving-deep-how-to-detect-typosquatting\u002F)\n",{"name":5,"domain":22,"description":7},"main","a91f1293287ffa9f4f1b8f486cd6e835a1568c84","skills\u002Fnet-dns-dnstwist","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace","https:\u002F\u002Fgithub.com\u002FDCx7C5","#Python","2026-09-01 11:21:00",{"source":8,"skillName":5,"commands":36,"prompt":46,"zipAvailable":47},[37,40,43],{"tool":38,"command":39},"npx","npx skills add DCx7C5\u002Fai-marketplace --skill net-dns-dnstwist",{"tool":41,"command":42},"bunx","bunx skills add DCx7C5\u002Fai-marketplace --skill net-dns-dnstwist",{"tool":44,"command":45},"pnpm","pnpm dlx skills add DCx7C5\u002Fai-marketplace --skill net-dns-dnstwist","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fnet-dns-dnstwist\u002FSKILL.md",true,[49],{"path":50,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":53,"sourceHtmlUrl":54},"index.json","REFERENCE","参考文档",464,"https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fnet-dns-dnstwist\u002Findex.json",[56,81,104,126,148,164],{"skillNo":57,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":62,"publishedAt":23},"01M71HAPZ01KQ30RKTB0FFSQ05","services-wmi-persistence-detect","Detect WMI event subscription persistence by enumerating ActiveScriptEventConsumer, CommandLineEventConsumer, and permanent subscriptions in the WMI repository.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fservices\u002Fwmi\u002Fpersistence\u002Fdetect\u002FSKILL.md",[],[63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,22,80],"services","detect","services wmi persistence detect","wmi","persistence","de","cm","process","activescript","event","subscriptions","commandline-consumer","repository","subscription","event-subscription","t1546.003","forensics","process-forensics",{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":23},"01M71HAK6JTTTS229T17WJMMCG","services-wmi-exec-exploit","Perform lateral movement across Windows networks using WMI-based remote execution techniques including Impacket wmiexec.py, CrackMapExec, and native WMI commands for stealthy post-exploitation during red team engagements.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fservices\u002Fwmi\u002Fexec\u002Fexploit\u002FSKILL.md",[],[88,63,89,66,90,91,92,22,93,94,95,96,97,98,68,99,100,101,102,103],"exploit","services wmi exec exploit","exec","remote","traffic","Bash","analysis","team","across","crackmapexec","native","command","lateral movement","read","lateral-movement","Impacket",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":23},"01M71HAG6MHKNQV8KDZKMT4886","registry-artifact-extract","Extract and analyze Windows Registry hives to uncover user activity, installed software, autostart entries, and evidence of system compromise.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fregistry\u002Fartifact\u002Fextract\u002FSKILL.md",[],[111,112,113,114,115,116,22,93,117,94,118,119,68,101,120,121,122,123,124,125],"artifact","registry","registry artifact extract","extract","evidence-collection","artifact-analysis","collection","analyze","uncover","software","activity","digital-forensics","windows-registry","regripper","sonnet",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":132,"publishedAt":23},"01M71HACR4A8XTWTTSXK4124AA","processes-token-impersonate-detect","Detect Windows token impersonation and privilege abuse including SeImpersonatePrivilege exploitation via Potato attacks and token stealing techniques.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fprocesses\u002Ftoken\u002Fimpersonate\u002Fdetect\u002FSKILL.md",[],[64,133,134,135,136,137,138,69,139,22,80,140,141,142,143,144,145,146,147,68],"processes token impersonate detect","token","processes","attacks","windows","escalation","techniques","privilege-escalation","seimpersonate","token-impersonation","printspoofer","exploitation","potato","impersonation","via",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":154,"publishedAt":23},"01M71HAABSB4Z6QFSXEG00R4RK","processes-thread-injection-detect","Detect Windows thread injection techniques including CreateRemoteThread, QueueUserAPC, NtCreateThreadEx, and thread hijacking via process memory analysis.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fprocesses\u002Fthread\u002Finjection\u002Fdetect\u002FSKILL.md",[],[155,156,64,157,135,137,158,69,159,139,22,80,94,160,161,162,163,147,68,70],"thread","processes thread injection detect","injection","memory","process-injection","api","apc-injection","thread-injection","nt-api",{"skillNo":165,"name":166,"nameZh":6,"description":167,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":168,"categories":169,"keywords":170,"publishedAt":23},"01M71HA7H311V5G14WMX58HQSS","processes-hollow-technique-detect","Detect process hollowing (RunPE) by identifying processes with mismatched image paths between PEB and VAD tree, or unmapped PE headers in memory.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fprocesses\u002Fhollow\u002Ftechnique\u002Fdetect\u002FSKILL.md",[],[171,64,135,172,158,69,173,174,22,80,175,176,177,178,179,180,68,70,181,182],"processes hollow technique detect","tree","memory-forensics","process-hollow","peb","runpe","image","pe-header","in memory","with","mismatched","headers"]