From 379abaeca764afb4d67170bd32924ef8c0874af4 Mon Sep 17 00:00:00 2001 From: yyhuni Date: Wed, 17 Dec 2025 18:18:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=9E=B6=E6=9E=84=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 + docs/README.md | 2 + docs/nuclei-template-architecture.md | 229 ++++++++++++++++++++++++ docs/wordlist-architecture.md | 257 +++++++++++++++++++++++++++ 4 files changed, 490 insertions(+) create mode 100644 docs/nuclei-template-architecture.md create mode 100644 docs/wordlist-architecture.md diff --git a/README.md b/README.md index cfda8de0..f3163fdc 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,8 @@ - [๐Ÿ“– ๆŠ€ๆœฏๆ–‡ๆกฃ](./docs/README.md) - ๆŠ€ๆœฏๆ–‡ๆกฃๅฏผ่ˆช๏ผˆ๐Ÿšง ๆŒ็ปญๅฎŒๅ–„ไธญ๏ผ‰ - [๐Ÿš€ ๅฟซ้€Ÿๅผ€ๅง‹](./docs/quick-start.md) - ไธ€้”ฎๅฎ‰่ฃ…ๅ’Œ้ƒจ็ฝฒๆŒ‡ๅ— - [๐Ÿ”„ ็‰ˆๆœฌ็ฎก็†](./docs/version-management.md) - Git Tag ้ฉฑๅŠจ็š„่‡ชๅŠจๅŒ–็‰ˆๆœฌ็ฎก็†็ณป็ปŸ +- [๐Ÿ“ฆ Nuclei ๆจกๆฟๆžถๆž„](./docs/nuclei-template-architecture.md) - ๆจกๆฟไป“ๅบ“็š„ๅญ˜ๅ‚จไธŽๅŒๆญฅ +- [๐Ÿ“– ๅญ—ๅ…ธๆ–‡ไปถๆžถๆž„](./docs/wordlist-architecture.md) - ๅญ—ๅ…ธๆ–‡ไปถ็š„ๅญ˜ๅ‚จไธŽๅŒๆญฅ --- diff --git a/docs/README.md b/docs/README.md index 5b304f3a..545b3ca7 100644 --- a/docs/README.md +++ b/docs/README.md @@ -4,6 +4,8 @@ ### ๆžถๆž„่ฎพ่ฎก - [็‰ˆๆœฌ็ฎก็†ๆžถๆž„](./version-management.md) - Git Tag ้ฉฑๅŠจ็š„่‡ชๅŠจๅŒ–็‰ˆๆœฌ็ฎก็†็ณป็ปŸ +- [Nuclei ๆจกๆฟๆžถๆž„](./nuclei-template-architecture.md) - ๆจกๆฟไป“ๅบ“็š„ๅญ˜ๅ‚จใ€ๅŒๆญฅใ€ๅˆ†ๅ‘ๆœบๅˆถ +- [ๅญ—ๅ…ธๆ–‡ไปถๆžถๆž„](./wordlist-architecture.md) - ๅญ—ๅ…ธๆ–‡ไปถ็š„ๅญ˜ๅ‚จใ€ๅŒๆญฅใ€ๅˆ†ๅ‘ๆœบๅˆถ ### ๅผ€ๅ‘ๆŒ‡ๅ— - [ๅฟซ้€Ÿๅผ€ๅง‹](./quick-start.md) - ไธ€้”ฎๅฎ‰่ฃ…ๅ’Œ้ƒจ็ฝฒๆŒ‡ๅ— diff --git a/docs/nuclei-template-architecture.md b/docs/nuclei-template-architecture.md new file mode 100644 index 00000000..5f1ee31c --- /dev/null +++ b/docs/nuclei-template-architecture.md @@ -0,0 +1,229 @@ +# Nuclei ๆจกๆฟ็ฎก็†ๆžถๆž„ + +ๆœฌๆ–‡ๆกฃไป‹็ป XingRin ไธญ Nuclei ๆจกๆฟ็š„ๅญ˜ๅ‚จใ€ๅŒๆญฅๅ’Œไฝฟ็”จๆœบๅˆถใ€‚ + +## ็›ฎๅฝ•็ป“ๆž„ + +``` +/opt/xingrin/nuclei-repos/ +โ”œโ”€โ”€ nuclei-templates/ # ๅฎ˜ๆ–นๆจกๆฟไป“ๅบ“๏ผˆๆŒ‰ไป“ๅบ“ๅๅ‘ฝๅ๏ผ‰ +โ”‚ โ”œโ”€โ”€ .git/ +โ”‚ โ”œโ”€โ”€ http/ +โ”‚ โ”œโ”€โ”€ network/ +โ”‚ โ””โ”€โ”€ ... +โ””โ”€โ”€ custom-repo/ # ่‡ชๅฎšไน‰ๆจกๆฟไป“ๅบ“ +``` + +## ไธ€ใ€ๅญ˜ๅ‚จไฝ็ฝฎ + +| ้…็ฝฎ้กน | ้ป˜่ฎคๅ€ผ | ่ฏดๆ˜Ž | +|--------|--------|------| +| `NUCLEI_TEMPLATES_REPOS_BASE_DIR` | `/opt/xingrin/nuclei-repos` | ๆจกๆฟไป“ๅบ“ๆ น็›ฎๅฝ• | + +ๆฏไธชๆจกๆฟไป“ๅบ“ไผšๅœจๆ น็›ฎๅฝ•ไธ‹ๅˆ›ๅปบ็‹ฌ็ซ‹ๅญ็›ฎๅฝ•๏ผŒ็›ฎๅฝ•ๅ็”ฑไป“ๅบ“ๅ็งฐ slugify ็”Ÿๆˆใ€‚ + +## ไบŒใ€ๆ•ฐๆฎๆจกๅž‹ + +``` +NucleiTemplateRepo +โ”œโ”€โ”€ id # ไป“ๅบ“ ID +โ”œโ”€โ”€ name # ไป“ๅบ“ๅ็งฐ๏ผˆ็”จไบŽๅ‰็ซฏๅฑ•็คบๅ’Œ Worker ๆŸฅ่ฏข๏ผ‰ +โ”œโ”€โ”€ repo_url # Git ไป“ๅบ“ๅœฐๅ€ +โ”œโ”€โ”€ local_path # ๆœฌๅœฐๅ…‹้š†่ทฏๅพ„๏ผˆ่‡ชๅŠจ็”Ÿๆˆ๏ผ‰ +โ”œโ”€โ”€ commit_hash # ๅฝ“ๅ‰ๅŒๆญฅ็š„ commit hash +โ””โ”€โ”€ last_synced_at # ๆœ€ๅŽๅŒๆญฅๆ—ถ้—ด +``` + +## ไธ‰ใ€Server ็ซฏๅŒๆญฅๆต็จ‹ + +1. ็”จๆˆทๅœจๅ‰็ซฏๆทปๅŠ ๆจกๆฟไป“ๅบ“๏ผˆๅกซๅ†™ๅ็งฐๅ’Œ Git URL๏ผ‰ +2. ็‚นๅ‡ปใ€ŒๅŒๆญฅใ€่งฆๅ‘ `NucleiTemplateRepoService.refresh_repo()` +3. ้ฆ–ๆฌกๅŒๆญฅ๏ผš`git clone --depth 1`๏ผˆๆต…ๅ…‹้š†๏ผŒ่Š‚็œ็ฉบ้—ด๏ผ‰ +4. ๅŽ็ปญๅŒๆญฅ๏ผš`git pull --ff-only`๏ผˆๅฟซ่ฟ›ๅˆๅนถ๏ผ‰ +5. ๅŒๆญฅๆˆๅŠŸๅŽๆ›ดๆ–ฐๆ•ฐๆฎๅบ“๏ผš`commit_hash`ใ€`last_synced_at` + +``` +โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +โ”‚ Server ๅฎนๅ™จ โ”‚ +โ”‚ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ๅ‰็ซฏ UI โ”‚ โ”‚ +โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ ๆทปๅŠ ไป“ๅบ“ โ”‚ โ”‚ ๅŒๆญฅไป“ๅบ“ โ”‚ โ”‚ ๆต่งˆๆจกๆฟ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ name + url โ”‚ โ”‚ ็‚นๅ‡ปๅˆทๆ–ฐ โ”‚ โ”‚ ็›ฎๅฝ•ๆ ‘ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ NucleiTemplateRepoViewSet โ”‚ โ”‚ +โ”‚ โ”‚ POST /api/nuclei/repos/ | POST .../refresh/ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ NucleiTemplateRepoService โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ ensure_local_path()โ”‚ โ”‚ refresh_repo() โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ ็”Ÿๆˆๆœฌๅœฐ็›ฎๅฝ•่ทฏๅพ„ โ”‚ โ”‚ ๆ‰ง่กŒ Git ๅŒๆญฅ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ้ฆ–ๆฌกๅŒๆญฅ๏ผˆๆ—  .git๏ผ‰ โ”‚ โ”‚ ๅŽ็ปญๅŒๆญฅ๏ผˆๆœ‰ .git๏ผ‰ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ git clone --depth 1 โ”‚ โ”‚ git pull --ff-only โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ git rev-parse HEAD โ”‚ โ”‚ +โ”‚ โ”‚ ่Žทๅ–ๅฝ“ๅ‰ commit hash โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ PostgreSQL ๆ•ฐๆฎๅบ“ โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ UPDATE nuclei_template_repo SET โ”‚ โ”‚ +โ”‚ โ”‚ local_path = '/opt/xingrin/nuclei-repos/xxx', โ”‚ โ”‚ +โ”‚ โ”‚ commit_hash = 'abc123...', โ”‚ โ”‚ +โ”‚ โ”‚ last_synced_at = NOW() โ”‚ โ”‚ +โ”‚ โ”‚ WHERE id = ? โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ๆ–‡ไปถ็ณป็ปŸ โ”‚ โ”‚ +โ”‚ โ”‚ /opt/xingrin/nuclei-repos/ โ”‚ โ”‚ +โ”‚ โ”‚ โ”œโ”€โ”€ nuclei-templates/ # ๅฎ˜ๆ–นๆจกๆฟ โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ .git/ โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ http/ โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ network/ โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ ... โ”‚ โ”‚ +โ”‚ โ”‚ โ””โ”€โ”€ custom-repo/ # ่‡ชๅฎšไน‰ๆจกๆฟ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ +โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + โ”‚ + โ”‚ git clone / pull + โ–ผ + โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” + โ”‚ GitHub / GitLab โ”‚ + โ”‚ ่ฟœ็จ‹ Git ไป“ๅบ“ โ”‚ + โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ +``` + +## ๅ››ใ€Worker ็ซฏๅŒๆญฅๆต็จ‹ + +Worker ๆ‰ง่กŒๆ‰ซๆไปปๅŠกๆ—ถ๏ผŒ้€š่ฟ‡ `ensure_nuclei_templates_local()` ็กฎไฟๆœฌๅœฐๆจกๆฟไธŽ Server ็‰ˆๆœฌไธ€่‡ด๏ผš + +1. ไปŽๆ•ฐๆฎๅบ“ๆŸฅ่ฏขไป“ๅบ“่ฎฐๅฝ•๏ผŒ่Žทๅ– `repo_url` ๅ’Œ `commit_hash` +2. ๆฃ€ๆŸฅๆœฌๅœฐๆ˜ฏๅฆๅญ˜ๅœจไป“ๅบ“็›ฎๅฝ• + - ไธๅญ˜ๅœจ๏ผš`git clone --depth 1` + - ๅญ˜ๅœจ๏ผšๆฏ”่พƒๆœฌๅœฐ commit hash ไธŽ Server ็š„ `commit_hash` +3. ๅฆ‚ๆžœ commit ไธไธ€่‡ด๏ผš`git fetch` + `git checkout ` +4. ่ฟ”ๅ›žๆœฌๅœฐๆจกๆฟ็›ฎๅฝ•่ทฏๅพ„๏ผŒไพ› nuclei ๅ‘ฝไปคไฝฟ็”จ + +``` +โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +โ”‚ Worker ๅฎนๅ™จ โ”‚ +โ”‚ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ๆ‰ซๆไปปๅŠก โ”‚ โ”‚ +โ”‚ โ”‚ ๅผ€ๅง‹ๆ‰ง่กŒ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ensure_nuclei_ โ”‚ โ”‚ PostgreSQL โ”‚ โ”‚ +โ”‚ โ”‚ templates_local() โ”‚โ”€โ”€โ”€โ”€โ”€โ–ถโ”‚ ๆŸฅ่ฏข NucleiTemplateRepo ่กจ โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ ่Žทๅ– repo_url, commit_hash โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ๆฃ€ๆŸฅๆœฌๅœฐ .git ็›ฎๅฝ• โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ไธๅญ˜ๅœจ โ”‚ โ”‚ ๅญ˜ๅœจ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ git clone โ”‚ โ”‚ ๆฏ”่พƒ commit hash โ”‚ โ”‚ +โ”‚ โ”‚ --depth 1 โ”‚ โ”‚ local vs server โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ–ผ โ–ผ โ”‚ +โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ โ”‚ ไธ€่‡ด โ”‚ โ”‚ ไธไธ€่‡ด โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ ็›ดๆŽฅไฝฟ็”จ โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ–ผ โ”‚ +โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ git fetch origin โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ git checkout โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ–ผ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ่ฟ”ๅ›žๆœฌๅœฐๆจกๆฟ็›ฎๅฝ•่ทฏๅพ„ โ”‚ โ”‚ +โ”‚ โ”‚ /opt/xingrin/nuclei-repos// โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ๆ‰ง่กŒ nuclei ๆ‰ซๆ โ”‚ โ”‚ +โ”‚ โ”‚ nuclei -t /opt/xingrin/nuclei-repos/xxx/ -l targets.txt โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ +โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ +``` + +## ไบ”ใ€็‰ˆๆœฌไธ€่‡ดๆ€งไฟ่ฏ + +- Server ๅŒๆญฅๆ—ถ่ฎฐๅฝ• `commit_hash` +- Worker ไฝฟ็”จๅ‰ๆฃ€ๆŸฅๆœฌๅœฐ hash ๆ˜ฏๅฆไธŽ Server ไธ€่‡ด +- ไธไธ€่‡ดๆ—ถ่‡ชๅŠจๅŒๆญฅๅˆฐๆŒ‡ๅฎš commit +- ็กฎไฟๆ‰€ๆœ‰่Š‚็‚นไฝฟ็”จ็›ธๅŒ็‰ˆๆœฌ็š„ๆจกๆฟ + +## ๅ…ญใ€้…็ฝฎ้กน + +ๅœจ `docker/.env` ๆˆ–็Žฏๅขƒๅ˜้‡ไธญ้…็ฝฎ๏ผš + +```bash +# Nuclei ๆจกๆฟไป“ๅบ“ๆ น็›ฎๅฝ• +NUCLEI_TEMPLATES_REPOS_BASE_DIR=/opt/xingrin/nuclei-repos +``` + +## ไธƒใ€ๅธธ่ง้—ฎ้ข˜ + +### Q: Worker ๆŠฅ้”™ใ€Œๆœชๆ‰พๅˆฐๆจกๆฟไป“ๅบ“ใ€๏ผŸ + +A: ้œ€่ฆๅ…ˆๅœจ Server ็ซฏๆทปๅŠ ๅนถๅŒๆญฅๆจกๆฟไป“ๅบ“๏ผŒWorker ้€š่ฟ‡ๆ•ฐๆฎๅบ“ๆŸฅ่ฏขไป“ๅบ“ไฟกๆฏใ€‚ + +### Q: ๅฆ‚ไฝ•ๆทปๅŠ ่‡ชๅฎšไน‰ๆจกๆฟไป“ๅบ“๏ผŸ + +A: ๅœจๅ‰็ซฏใ€ŒNuclei ๆจกๆฟใ€้กต้ข็‚นๅ‡ปๆทปๅŠ ๏ผŒๅกซๅ†™ไป“ๅบ“ๅ็งฐๅ’Œ Git URL๏ผŒ็„ถๅŽ็‚นๅ‡ปๅŒๆญฅๅณๅฏใ€‚ + +### Q: ๆจกๆฟๆ›ดๆ–ฐๅŽ Worker ๅฆ‚ไฝ•่Žทๅ–ๆœ€ๆ–ฐ็‰ˆๆœฌ๏ผŸ + +A: ๅœจ Server ็ซฏ็‚นๅ‡ปใ€ŒๅŒๆญฅใ€ๆ›ดๆ–ฐๆจกๆฟ๏ผŒWorker ไธ‹ๆฌกๆ‰ง่กŒๆ‰ซๆๆ—ถไผšๆฃ€ๆต‹ๅˆฐ commit hash ไธไธ€่‡ดๅนถ่‡ชๅŠจๅŒๆญฅใ€‚ diff --git a/docs/wordlist-architecture.md b/docs/wordlist-architecture.md new file mode 100644 index 00000000..b8ab7fe1 --- /dev/null +++ b/docs/wordlist-architecture.md @@ -0,0 +1,257 @@ +# ๅญ—ๅ…ธๆ–‡ไปถ็ฎก็†ๆžถๆž„ + +ๆœฌๆ–‡ๆกฃไป‹็ป XingRin ไธญๅญ—ๅ…ธๆ–‡ไปถ็š„ๅญ˜ๅ‚จใ€ๅŒๆญฅๅ’Œไฝฟ็”จๆœบๅˆถใ€‚ + +## ็›ฎๅฝ•็ป“ๆž„ + +``` +/opt/xingrin/wordlists/ +โ”œโ”€โ”€ common.txt # ้€š็”จๅญ—ๅ…ธ +โ”œโ”€โ”€ subdomains.txt # ๅญๅŸŸๅๅญ—ๅ…ธ +โ”œโ”€โ”€ directories.txt # ็›ฎๅฝ•ๅญ—ๅ…ธ +โ””โ”€โ”€ ... +``` + +## ไธ€ใ€ๅญ˜ๅ‚จไฝ็ฝฎ + +| ้…็ฝฎ้กน | ้ป˜่ฎคๅ€ผ | ่ฏดๆ˜Ž | +|--------|--------|------| +| `WORDLISTS_BASE_PATH` | `/opt/xingrin/wordlists` | ๅญ—ๅ…ธๆ–‡ไปถๅญ˜ๅ‚จ็›ฎๅฝ• | + +## ไบŒใ€ๆ•ฐๆฎๆจกๅž‹ + +``` +Wordlist +โ”œโ”€โ”€ id # ๅญ—ๅ…ธ ID +โ”œโ”€โ”€ name # ๅญ—ๅ…ธๅ็งฐ๏ผˆๅ”ฏไธ€๏ผŒ็”จไบŽๆŸฅ่ฏข๏ผ‰ +โ”œโ”€โ”€ description # ๆ่ฟฐ +โ”œโ”€โ”€ file_path # ๆ–‡ไปถ็ปๅฏน่ทฏๅพ„ +โ”œโ”€โ”€ file_size # ๆ–‡ไปถๅคงๅฐ๏ผˆๅญ—่Š‚๏ผ‰ +โ”œโ”€โ”€ line_count # ่กŒๆ•ฐ +โ””โ”€โ”€ file_hash # SHA256 ๅ“ˆๅธŒๅ€ผ๏ผˆ็”จไบŽๆ ก้ชŒ๏ผ‰ +``` + +## ไธ‰ใ€Server ็ซฏไธŠไผ ๆต็จ‹ + +1. ็”จๆˆทๅœจๅ‰็ซฏไธŠไผ ๅญ—ๅ…ธๆ–‡ไปถ +2. `WordlistService.create_wordlist()` ๅค„็†๏ผš + - ไฟๅญ˜ๆ–‡ไปถๅˆฐ `WORDLISTS_BASE_PATH` ็›ฎๅฝ• + - ่ฎก็ฎ— SHA256 ๅ“ˆๅธŒๅ€ผ + - ็ปŸ่ฎกๆ–‡ไปถๅคงๅฐๅ’Œ่กŒๆ•ฐ + - ๅˆ›ๅปบๆ•ฐๆฎๅบ“่ฎฐๅฝ• + +``` +โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +โ”‚ Server ๅฎนๅ™จ โ”‚ +โ”‚ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ๅ‰็ซฏ UI โ”‚ โ”‚ +โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ ไธŠไผ ๅญ—ๅ…ธ โ”‚ โ”‚ ็ผ–่พ‘ๅ†…ๅฎน โ”‚ โ”‚ ๅˆ ้™คๅญ—ๅ…ธ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ ้€‰ๆ‹ฉๆ–‡ไปถ โ”‚ โ”‚ ๅœจ็บฟไฟฎๆ”น โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ WordlistViewSet โ”‚ โ”‚ +โ”‚ โ”‚ POST /api/wordlists/ | PUT .../content/ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ WordlistService โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ create_wordlist() โ”‚ โ”‚ update_wordlist_content() โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ ๅˆ›ๅปบๅญ—ๅ…ธ โ”‚ โ”‚ ๆ›ดๆ–ฐๅญ—ๅ…ธๅ†…ๅฎน โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ๅค„็†ๆต็จ‹ โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ 1. ไฟๅญ˜ๆ–‡ไปถๅˆฐ /opt/xingrin/wordlists/ โ”‚ โ”‚ +โ”‚ โ”‚ 2. ่ฎก็ฎ— SHA256 ๅ“ˆๅธŒๅ€ผ โ”‚ โ”‚ +โ”‚ โ”‚ 3. ็ปŸ่ฎกๆ–‡ไปถๅคงๅฐๅ’Œ่กŒๆ•ฐ โ”‚ โ”‚ +โ”‚ โ”‚ 4. ๅˆ›ๅปบ/ๆ›ดๆ–ฐๆ•ฐๆฎๅบ“่ฎฐๅฝ• โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ PostgreSQL ๆ•ฐๆฎๅบ“ โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ INSERT INTO wordlist (name, file_path, file_size, โ”‚ โ”‚ +โ”‚ โ”‚ line_count, file_hash) โ”‚ โ”‚ +โ”‚ โ”‚ VALUES ('subdomains', '/opt/xingrin/wordlists/subdomains.txt', โ”‚ โ”‚ +โ”‚ โ”‚ 1024000, 50000, 'sha256...') โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ๆ–‡ไปถ็ณป็ปŸ โ”‚ โ”‚ +โ”‚ โ”‚ /opt/xingrin/wordlists/ โ”‚ โ”‚ +โ”‚ โ”‚ โ”œโ”€โ”€ common.txt โ”‚ โ”‚ +โ”‚ โ”‚ โ”œโ”€โ”€ subdomains.txt โ”‚ โ”‚ +โ”‚ โ”‚ โ””โ”€โ”€ directories.txt โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ +โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ +``` + +## ๅ››ใ€Worker ็ซฏ่Žทๅ–ๆต็จ‹ + +Worker ๆ‰ง่กŒๆ‰ซๆไปปๅŠกๆ—ถ๏ผŒ้€š่ฟ‡ `ensure_wordlist_local()` ่Žทๅ–ๅญ—ๅ…ธ๏ผš + +1. ๆ นๆฎๅญ—ๅ…ธๅ็งฐๆŸฅ่ฏขๆ•ฐๆฎๅบ“๏ผŒ่Žทๅ– `file_path` ๅ’Œ `file_hash` +2. ๆฃ€ๆŸฅๆœฌๅœฐๆ˜ฏๅฆๅญ˜ๅœจๅญ—ๅ…ธๆ–‡ไปถ + - ๅญ˜ๅœจไธ” hash ๅŒน้…๏ผš็›ดๆŽฅไฝฟ็”จ + - ๅญ˜ๅœจไฝ† hash ไธๅŒน้…๏ผš้‡ๆ–ฐไธ‹่ฝฝ + - ไธๅญ˜ๅœจ๏ผšไปŽ Server API ไธ‹่ฝฝ +3. ไธ‹่ฝฝๅœฐๅ€๏ผš`GET /api/wordlists/download/?wordlist=` +4. ่ฟ”ๅ›žๆœฌๅœฐๅญ—ๅ…ธๆ–‡ไปถ่ทฏๅพ„ + +``` +โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +โ”‚ Worker ๅฎนๅ™จ โ”‚ +โ”‚ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ๆ‰ซๆไปปๅŠก โ”‚ โ”‚ +โ”‚ โ”‚ ้œ€่ฆๅญ—ๅ…ธ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ensure_wordlist_local() โ”‚ โ”‚ PostgreSQL โ”‚ โ”‚ +โ”‚ โ”‚ ๅ‚ๆ•ฐ: wordlist_name โ”‚โ”€โ”€โ”€โ”€โ”€โ–ถโ”‚ ๆŸฅ่ฏข Wordlist ่กจ โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ ่Žทๅ– file_path, file_hash โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ๆฃ€ๆŸฅๆœฌๅœฐๆ–‡ไปถๆ˜ฏๅฆๅญ˜ๅœจ โ”‚ โ”‚ +โ”‚ โ”‚ /opt/xingrin/wordlists/ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ไธๅญ˜ๅœจ โ”‚ โ”‚ ๅญ˜ๅœจ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ–ผ โ”‚ +โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ โ”‚ ่ฎก็ฎ—ๆœฌๅœฐๆ–‡ไปถ SHA256 โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ ไธŽๆ•ฐๆฎๅบ“ hash ๆฏ”่พƒ โ”‚ โ”‚ +โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ–ผ โ–ผ โ”‚ +โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ โ”‚ ไธ€่‡ด โ”‚ โ”‚ ไธไธ€่‡ด โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ ็›ดๆŽฅไฝฟ็”จ โ”‚ โ”‚ ้œ€้‡ๆ–ฐไธ‹่ฝฝ โ”‚ โ”‚ +โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ”‚ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ไปŽ Server API ไธ‹่ฝฝ โ”‚ โ”‚ +โ”‚ โ”‚ GET /api/wordlists/download/?wordlist= โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” HTTP Request โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ Worker โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถโ”‚ Server (Django) โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚โ—€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ ่ฟ”ๅ›žๆ–‡ไปถๅ†…ๅฎน โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ File Content โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”‚ ไฟๅญ˜ๅˆฐ: /opt/xingrin/wordlists/ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ่ฟ”ๅ›žๆœฌๅœฐๅญ—ๅ…ธๆ–‡ไปถ่ทฏๅพ„ โ”‚ โ”‚ +โ”‚ โ”‚ /opt/xingrin/wordlists/subdomains.txt โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ +โ”‚ โ–ผ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ๆ‰ง่กŒๆ‰ซๆๅทฅๅ…ท โ”‚ โ”‚ +โ”‚ โ”‚ puredns bruteforce -w /opt/xingrin/wordlists/xxx.txt โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ +โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ +``` + +## ไบ”ใ€Hash ๆ ก้ชŒๆœบๅˆถ + +- ไธŠไผ ๆ—ถ่ฎก็ฎ— SHA256 ๅนถๅญ˜ๅ…ฅๆ•ฐๆฎๅบ“ +- Worker ไฝฟ็”จๅ‰ๆ ก้ชŒๆœฌๅœฐๆ–‡ไปถ hash +- ไธๅŒน้…ๆ—ถ่‡ชๅŠจ้‡ๆ–ฐไธ‹่ฝฝ +- ็กฎไฟๆ‰€ๆœ‰่Š‚็‚นไฝฟ็”จ็›ธๅŒๅ†…ๅฎน็š„ๅญ—ๅ…ธ + +## ๅ…ญใ€ๆœฌๅœฐ Worker vs ่ฟœ็จ‹ Worker + +ๆœฌๅœฐ Worker ๅ’Œ่ฟœ็จ‹ Worker ่Žทๅ–ๅญ—ๅ…ธ็š„ๆ–นๅผ็›ธๅŒ๏ผš + +1. ไปŽๆ•ฐๆฎๅบ“ๆŸฅ่ฏขๅญ—ๅ…ธๅ…ƒๆ•ฐๆฎ๏ผˆfile_hash๏ผ‰ +2. ๆฃ€ๆŸฅๆœฌๅœฐ็ผ“ๅญ˜ๆ˜ฏๅฆๅญ˜ๅœจไธ” hash ๅŒน้… +3. ไธๅŒน้…ๅˆ™้€š่ฟ‡ HTTP API ไธ‹่ฝฝ + +**ๆณจๆ„**๏ผšWorker ๅฎนๅ™จๅชๆŒ‚่ฝฝไบ† `results` ๅ’Œ `logs` ็›ฎๅฝ•๏ผŒๆฒกๆœ‰ๆŒ‚่ฝฝ `wordlists` ็›ฎๅฝ•๏ผŒๆ‰€ไปฅๅญ—ๅ…ธๆ–‡ไปถ้œ€่ฆ้€š่ฟ‡ API ไธ‹่ฝฝใ€‚ + +``` +Worker๏ผˆๆœฌๅœฐ/่ฟœ็จ‹๏ผ‰ Server + โ”‚ โ”‚ + โ”‚ 1. ๆŸฅ่ฏขๆ•ฐๆฎๅบ“่Žทๅ– file_hash โ”‚ + โ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถโ”‚ + โ”‚ โ”‚ + โ”‚ 2. ๆฃ€ๆŸฅๆœฌๅœฐ็ผ“ๅญ˜ โ”‚ + โ”‚ - ๅญ˜ๅœจไธ” hash ๅŒน้… โ†’ ็›ดๆŽฅไฝฟ็”จโ”‚ + โ”‚ - ไธๅญ˜ๅœจๆˆ–ไธๅŒน้… โ†’ ็ปง็ปญไธ‹่ฝฝ โ”‚ + โ”‚ โ”‚ + โ”‚ 3. GET /api/wordlists/download/ โ”‚ + โ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถโ”‚ + โ”‚ โ”‚ + โ”‚ 4. ่ฟ”ๅ›žๆ–‡ไปถๅ†…ๅฎน โ”‚ + โ”‚โ—€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”‚ + โ”‚ โ”‚ + โ”‚ 5. ไฟๅญ˜ๅˆฐๆœฌๅœฐ็ผ“ๅญ˜ โ”‚ + โ”‚ /opt/xingrin/wordlists/ โ”‚ + โ”‚ โ”‚ +``` + +### ๆœฌๅœฐ Worker ็š„ไผ˜ๅŠฟ + +่™ฝ็„ถ่Žทๅ–ๆ–นๅผ็›ธๅŒ๏ผŒไฝ†ๆœฌๅœฐ Worker ๆœ‰ไปฅไธ‹ไผ˜ๅŠฟ๏ผš +- ็ฝ‘็ปœๅปถ่ฟŸๆ›ดไฝŽ๏ผˆๅฎนๅ™จๅ†…็ฝ‘็ปœ๏ผ‰ +- ไธ‹่ฝฝๅŽ็š„็ผ“ๅญ˜ๅฏๅค็”จ๏ผˆๅŒไธ€ๅฎฟไธปๆœบไธŠ็š„ๅคšๆฌกไปปๅŠก๏ผ‰ + +## ไธƒใ€้…็ฝฎ้กน + +ๅœจ `docker/.env` ๆˆ–็Žฏๅขƒๅ˜้‡ไธญ้…็ฝฎ๏ผš + +```bash +# ๅญ—ๅ…ธๆ–‡ไปถๅญ˜ๅ‚จ็›ฎๅฝ• +WORDLISTS_PATH=/opt/xingrin/wordlists + +# Server ๅœฐๅ€๏ผˆWorker ็”จไบŽไธ‹่ฝฝๆ–‡ไปถ๏ผ‰ +PUBLIC_HOST=your-server-ip +SERVER_PORT=8888 +``` + +## ๅ…ซใ€ๅธธ่ง้—ฎ้ข˜ + +### Q: ๅญ—ๅ…ธๆ–‡ไปถๆ›ดๆ–ฐๅŽ Worker ๆฒกๆœ‰ไฝฟ็”จๆ–ฐ็‰ˆๆœฌ๏ผŸ + +A: ๆ›ดๆ–ฐๅญ—ๅ…ธๅ†…ๅฎนๅŽไผš้‡ๆ–ฐ่ฎก็ฎ— hash๏ผŒWorker ไธ‹ๆฌกไฝฟ็”จๆ—ถไผšๆฃ€ๆต‹ๅˆฐ hash ไธๅŒน้…ๅนถ้‡ๆ–ฐไธ‹่ฝฝใ€‚ + +### Q: ่ฟœ็จ‹ Worker ไธ‹่ฝฝๆ–‡ไปถๅคฑ่ดฅ๏ผŸ + +A: ๆฃ€ๆŸฅ๏ผš +1. `PUBLIC_HOST` ๆ˜ฏๅฆ้…็ฝฎไธบ Server ็š„ๅค–็ฝ‘ IP +2. Server ็ซฏๅฃ๏ผˆ้ป˜่ฎค 8888๏ผ‰ๆ˜ฏๅฆๅผ€ๆ”พ +3. Worker ๅˆฐ Server ็š„็ฝ‘็ปœๆ˜ฏๅฆ้€š็•… + +### Q: ๅฆ‚ไฝ•ๆ‰น้‡ๅฏผๅ…ฅๅญ—ๅ…ธ๏ผŸ + +A: ็›ฎๅ‰ๅชๆ”ฏๆŒ้€š่ฟ‡ๅ‰็ซฏ้€ไธชไธŠไผ ๏ผŒๅŽ็ปญๅฏ่ƒฝๆ”ฏๆŒๆ‰น้‡ๅฏผๅ…ฅๅŠŸ่ƒฝใ€‚