jseye 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- jseye-1.0.0/LICENSE +21 -0
- jseye-1.0.0/MANIFEST.in +8 -0
- jseye-1.0.0/PKG-INFO +264 -0
- jseye-1.0.0/README.md +219 -0
- jseye-1.0.0/jseye/__init__.py +9 -0
- jseye-1.0.0/jseye/banner.py +37 -0
- jseye-1.0.0/jseye/cli.py +137 -0
- jseye-1.0.0/jseye/data/regex.yaml +1050 -0
- jseye-1.0.0/jseye/data/vendor_blacklist.txt +65 -0
- jseye-1.0.0/jseye/installer.py +190 -0
- jseye-1.0.0/jseye/modules/__init__.py +1 -0
- jseye-1.0.0/jseye/modules/analyze_ast.py +116 -0
- jseye-1.0.0/jseye/modules/analyze_regex.py +123 -0
- jseye-1.0.0/jseye/modules/correlate.py +140 -0
- jseye-1.0.0/jseye/modules/harvest.py +124 -0
- jseye-1.0.0/jseye/modules/js_download.py +82 -0
- jseye-1.0.0/jseye/modules/js_filter.py +186 -0
- jseye-1.0.0/jseye/modules/linkfinder.py +56 -0
- jseye-1.0.0/jseye/modules/secrets.py +71 -0
- jseye-1.0.0/jseye/modules/sinks.py +132 -0
- jseye-1.0.0/jseye/pipeline.py +230 -0
- jseye-1.0.0/jseye/utils/__init__.py +1 -0
- jseye-1.0.0/jseye/utils/fs.py +98 -0
- jseye-1.0.0/jseye/utils/hashing.py +42 -0
- jseye-1.0.0/jseye/utils/logger.py +50 -0
- jseye-1.0.0/jseye/utils/shell.py +83 -0
- jseye-1.0.0/jseye.egg-info/PKG-INFO +264 -0
- jseye-1.0.0/jseye.egg-info/SOURCES.txt +34 -0
- jseye-1.0.0/jseye.egg-info/dependency_links.txt +1 -0
- jseye-1.0.0/jseye.egg-info/entry_points.txt +2 -0
- jseye-1.0.0/jseye.egg-info/requires.txt +12 -0
- jseye-1.0.0/jseye.egg-info/top_level.txt +1 -0
- jseye-1.0.0/pyproject.toml +96 -0
- jseye-1.0.0/scripts/ast_parser.js +138 -0
- jseye-1.0.0/setup.cfg +4 -0
- jseye-1.0.0/setup.py +79 -0
jseye-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Lakshmikanthan K (letchupkt)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
jseye-1.0.0/MANIFEST.in
ADDED
jseye-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: jseye
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: JavaScript Intelligence & Attack Surface Discovery Tool
|
|
5
|
+
Home-page: https://github.com/letchupkt/jseye
|
|
6
|
+
Author: Lakshmikanthan K
|
|
7
|
+
Author-email: Lakshmikanthan K <letchupkt.dev@gmail.com>
|
|
8
|
+
Maintainer-email: Lakshmikanthan K <letchupkt.dev@gmail.com>
|
|
9
|
+
License: MIT
|
|
10
|
+
Project-URL: Homepage, https://github.com/letchupkt/jseye
|
|
11
|
+
Project-URL: Repository, https://github.com/letchupkt/jseye
|
|
12
|
+
Project-URL: Issues, https://github.com/letchupkt/jseye/issues
|
|
13
|
+
Project-URL: Documentation, https://github.com/letchupkt/jseye#readme
|
|
14
|
+
Keywords: security,javascript,reconnaissance,bug-bounty,pentesting
|
|
15
|
+
Classifier: Development Status :: 4 - Beta
|
|
16
|
+
Classifier: Environment :: Console
|
|
17
|
+
Classifier: Intended Audience :: Information Technology
|
|
18
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
19
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
20
|
+
Classifier: Programming Language :: Python :: 3
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Topic :: Security
|
|
25
|
+
Classifier: Topic :: Internet :: WWW/HTTP
|
|
26
|
+
Classifier: Topic :: Software Development :: Testing
|
|
27
|
+
Requires-Python: >=3.10
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
License-File: LICENSE
|
|
30
|
+
Requires-Dist: rich>=13.0.0
|
|
31
|
+
Requires-Dist: pyyaml>=6.0
|
|
32
|
+
Requires-Dist: requests>=2.28.0
|
|
33
|
+
Requires-Dist: urllib3>=1.26.0
|
|
34
|
+
Requires-Dist: pathlib>=1.0.0
|
|
35
|
+
Provides-Extra: dev
|
|
36
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
37
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
38
|
+
Requires-Dist: black>=22.0.0; extra == "dev"
|
|
39
|
+
Requires-Dist: flake8>=5.0.0; extra == "dev"
|
|
40
|
+
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
41
|
+
Dynamic: author
|
|
42
|
+
Dynamic: home-page
|
|
43
|
+
Dynamic: license-file
|
|
44
|
+
Dynamic: requires-python
|
|
45
|
+
|
|
46
|
+
# JSEye 👁️
|
|
47
|
+
|
|
48
|
+
**See What JavaScript Hides**
|
|
49
|
+
|
|
50
|
+
JSEye is a production-grade Python reconnaissance framework for deep JavaScript intelligence and attack surface discovery. Built for bug bounty hunters and security researchers who need comprehensive JavaScript analysis with minimal noise.
|
|
51
|
+
|
|
52
|
+
## 🚀 Features
|
|
53
|
+
|
|
54
|
+
- **Fully Automatic**: Default mode runs complete pipeline with zero configuration
|
|
55
|
+
- **Modular Design**: Control execution with granular flags
|
|
56
|
+
- **Multi-Tool Integration**: Orchestrates gau, waybackurls, hakrawler, katana, subjs, linkfinder, and mantra
|
|
57
|
+
- **Smart Prioritization**: AI-powered JavaScript file ranking
|
|
58
|
+
- **Correlation Engine**: Connects findings across multiple sources
|
|
59
|
+
- **Clean Terminal UX**: Rich progress indicators and polished output
|
|
60
|
+
- **Linux-First**: Optimized for Linux environments
|
|
61
|
+
|
|
62
|
+
## 📦 Installation
|
|
63
|
+
|
|
64
|
+
### From PyPI (Recommended)
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
pip install jseye
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### From Source
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
git clone https://github.com/letchupkt/jseye.git
|
|
74
|
+
cd jseye
|
|
75
|
+
pip install -e .
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## 🛠️ Requirements
|
|
79
|
+
|
|
80
|
+
JSEye automatically installs required tools on first run:
|
|
81
|
+
|
|
82
|
+
- **Go** (for gau, waybackurls, hakrawler, katana, subjs, mantra)
|
|
83
|
+
- **Node.js** (for AST analysis)
|
|
84
|
+
- **Python 3.10+** (for linkfinder and core functionality)
|
|
85
|
+
|
|
86
|
+
## 🎯 Usage
|
|
87
|
+
|
|
88
|
+
### Default Mode (Full Pipeline)
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Run everything - this is the default behavior
|
|
92
|
+
jseye -i subdomains.txt -o output
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Module Control Flags
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Stop after JavaScript discovery
|
|
99
|
+
jseye -i subs.txt -o output --js-only
|
|
100
|
+
|
|
101
|
+
# Skip secrets detection
|
|
102
|
+
jseye -i subs.txt -o output --no-secrets
|
|
103
|
+
|
|
104
|
+
# Only regex analysis (skip AST)
|
|
105
|
+
jseye -i subs.txt -o output --regex-only
|
|
106
|
+
|
|
107
|
+
# Skip AST analysis
|
|
108
|
+
jseye -i subs.txt -o output --skip-ast
|
|
109
|
+
|
|
110
|
+
# Skip sink detection
|
|
111
|
+
jseye -i subs.txt -o output --no-sinks
|
|
112
|
+
|
|
113
|
+
# Skip correlation engine
|
|
114
|
+
jseye -i subs.txt -o output --no-correlate
|
|
115
|
+
|
|
116
|
+
# Don't auto-install tools
|
|
117
|
+
jseye -i subs.txt -o output --no-install
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Information Commands
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# List available modules
|
|
124
|
+
jseye --list-modules
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## 🔄 Pipeline
|
|
128
|
+
|
|
129
|
+
JSEye executes a comprehensive analysis pipeline:
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
subdomains.txt
|
|
133
|
+
↓
|
|
134
|
+
📡 URL Harvesting (gau, waybackurls, hakrawler, katana)
|
|
135
|
+
↓
|
|
136
|
+
🔍 JavaScript Filtering & Prioritization
|
|
137
|
+
↓
|
|
138
|
+
📥 JavaScript Download
|
|
139
|
+
↓
|
|
140
|
+
🧠 Regex Analysis
|
|
141
|
+
↓
|
|
142
|
+
🌳 AST Analysis
|
|
143
|
+
↓
|
|
144
|
+
🔗 LinkFinder Integration
|
|
145
|
+
↓
|
|
146
|
+
🔐 Secrets Detection (mantra)
|
|
147
|
+
↓
|
|
148
|
+
🎯 Sink Detection
|
|
149
|
+
↓
|
|
150
|
+
🔄 Intelligence Correlation
|
|
151
|
+
↓
|
|
152
|
+
📊 Final Report
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## 📁 Output Structure
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
output/
|
|
159
|
+
├── harvested_urls.txt # All discovered URLs
|
|
160
|
+
├── js_files_all.txt # All JavaScript files
|
|
161
|
+
├── js_files_high_priority.txt # High-value JS files
|
|
162
|
+
├── js_files_medium_priority.txt # Medium-value JS files
|
|
163
|
+
├── js_files_low_priority.txt # Low-value JS files
|
|
164
|
+
├── js_files_detailed.json # Detailed JS analysis
|
|
165
|
+
├── endpoints.json # Discovered endpoints
|
|
166
|
+
├── secrets.json # Found secrets
|
|
167
|
+
├── sinks.json # Detected sinks
|
|
168
|
+
├── correlation_report.json # Correlated intelligence
|
|
169
|
+
└── jseye_summary.json # Final summary
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## 🎨 Terminal Output
|
|
173
|
+
|
|
174
|
+
JSEye provides beautiful, informative terminal output:
|
|
175
|
+
|
|
176
|
+
```
|
|
177
|
+
██╗███████╗███████╗██╗ ██╗███████╗
|
|
178
|
+
██║██╔════╝██╔════╝╚██╗ ██╔╝██╔════╝
|
|
179
|
+
██║███████╗█████╗ ╚████╔╝ █████╗
|
|
180
|
+
██ ██║╚════██║██╔══╝ ╚██╔╝ ██╔══╝
|
|
181
|
+
╚█████╔╝███████║███████╗ ██║ ███████╗
|
|
182
|
+
╚════╝ ╚══════╝╚══════╝ ╚═╝ ╚══════╝
|
|
183
|
+
|
|
184
|
+
JSEye — See What JavaScript Hides
|
|
185
|
+
Author: Lakshmikanthan K (letchupkt)
|
|
186
|
+
|
|
187
|
+
[+] Loading domains from subdomains.txt
|
|
188
|
+
[+] Harvesting URLs (gau, waybackurls, katana)
|
|
189
|
+
[+] Extracted 1,482 JavaScript files
|
|
190
|
+
[+] Prioritized 214 high-value JS files
|
|
191
|
+
[+] Analyzing JavaScript (regex + AST)
|
|
192
|
+
[+] Found 37 endpoints, 4 secrets, 9 sinks
|
|
193
|
+
[+] Correlating intelligence
|
|
194
|
+
[✓] Results saved to output/
|
|
195
|
+
|
|
196
|
+
──────── JSEye Summary ────────
|
|
197
|
+
JS Files Analyzed : 214
|
|
198
|
+
Endpoints Found : 37
|
|
199
|
+
Secrets Found : 4
|
|
200
|
+
Sinks Found : 9
|
|
201
|
+
High Confidence : 11
|
|
202
|
+
Output Directory : output/
|
|
203
|
+
────────────────────────────────
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## 🧠 Smart Features
|
|
207
|
+
|
|
208
|
+
### JavaScript Prioritization
|
|
209
|
+
|
|
210
|
+
JSEye intelligently prioritizes JavaScript files based on:
|
|
211
|
+
|
|
212
|
+
- **High-value indicators**: admin, api, auth, config, dashboard, login
|
|
213
|
+
- **File characteristics**: non-minified, shorter paths, custom code
|
|
214
|
+
- **Vendor detection**: deprioritizes common libraries and CDN files
|
|
215
|
+
|
|
216
|
+
### Correlation Engine
|
|
217
|
+
|
|
218
|
+
Connects findings across multiple sources to reduce false positives and highlight high-confidence discoveries.
|
|
219
|
+
|
|
220
|
+
### Auto-Installation
|
|
221
|
+
|
|
222
|
+
Automatically detects and installs missing tools on first run, with graceful fallbacks and clear error messages.
|
|
223
|
+
|
|
224
|
+
## 🔧 Advanced Configuration
|
|
225
|
+
|
|
226
|
+
### Custom Regex Patterns
|
|
227
|
+
|
|
228
|
+
Edit `jseye/data/regex.yaml` to customize detection patterns for:
|
|
229
|
+
- API endpoints
|
|
230
|
+
- Secrets and tokens
|
|
231
|
+
- DOM sinks
|
|
232
|
+
- Custom patterns
|
|
233
|
+
|
|
234
|
+
### Vendor Blacklist
|
|
235
|
+
|
|
236
|
+
Modify `jseye/data/vendor_blacklist.txt` to customize which JavaScript libraries are deprioritized.
|
|
237
|
+
|
|
238
|
+
## 🤝 Contributing
|
|
239
|
+
|
|
240
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
241
|
+
|
|
242
|
+
1. Fork the repository
|
|
243
|
+
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
|
|
244
|
+
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
|
|
245
|
+
4. Push to the branch (`git push origin feature/AmazingFeature`)
|
|
246
|
+
5. Open a Pull Request
|
|
247
|
+
|
|
248
|
+
## 📄 License
|
|
249
|
+
|
|
250
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
251
|
+
|
|
252
|
+
## 👤 Author
|
|
253
|
+
|
|
254
|
+
**Lakshmikanthan K** (letchupkt)
|
|
255
|
+
- GitHub: [@letchupkt](https://github.com/letchupkt)
|
|
256
|
+
|
|
257
|
+
## 🙏 Acknowledgments
|
|
258
|
+
|
|
259
|
+
- Thanks to all the tool authors: gau, waybackurls, hakrawler, katana, subjs, linkfinder, mantra
|
|
260
|
+
- Inspired by the bug bounty and security research community
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
**JSEye** - See what JavaScript hides. 👁️
|
jseye-1.0.0/README.md
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
# JSEye 👁️
|
|
2
|
+
|
|
3
|
+
**See What JavaScript Hides**
|
|
4
|
+
|
|
5
|
+
JSEye is a production-grade Python reconnaissance framework for deep JavaScript intelligence and attack surface discovery. Built for bug bounty hunters and security researchers who need comprehensive JavaScript analysis with minimal noise.
|
|
6
|
+
|
|
7
|
+
## 🚀 Features
|
|
8
|
+
|
|
9
|
+
- **Fully Automatic**: Default mode runs complete pipeline with zero configuration
|
|
10
|
+
- **Modular Design**: Control execution with granular flags
|
|
11
|
+
- **Multi-Tool Integration**: Orchestrates gau, waybackurls, hakrawler, katana, subjs, linkfinder, and mantra
|
|
12
|
+
- **Smart Prioritization**: AI-powered JavaScript file ranking
|
|
13
|
+
- **Correlation Engine**: Connects findings across multiple sources
|
|
14
|
+
- **Clean Terminal UX**: Rich progress indicators and polished output
|
|
15
|
+
- **Linux-First**: Optimized for Linux environments
|
|
16
|
+
|
|
17
|
+
## 📦 Installation
|
|
18
|
+
|
|
19
|
+
### From PyPI (Recommended)
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pip install jseye
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### From Source
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
git clone https://github.com/letchupkt/jseye.git
|
|
29
|
+
cd jseye
|
|
30
|
+
pip install -e .
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 🛠️ Requirements
|
|
34
|
+
|
|
35
|
+
JSEye automatically installs required tools on first run:
|
|
36
|
+
|
|
37
|
+
- **Go** (for gau, waybackurls, hakrawler, katana, subjs, mantra)
|
|
38
|
+
- **Node.js** (for AST analysis)
|
|
39
|
+
- **Python 3.10+** (for linkfinder and core functionality)
|
|
40
|
+
|
|
41
|
+
## 🎯 Usage
|
|
42
|
+
|
|
43
|
+
### Default Mode (Full Pipeline)
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Run everything - this is the default behavior
|
|
47
|
+
jseye -i subdomains.txt -o output
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Module Control Flags
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# Stop after JavaScript discovery
|
|
54
|
+
jseye -i subs.txt -o output --js-only
|
|
55
|
+
|
|
56
|
+
# Skip secrets detection
|
|
57
|
+
jseye -i subs.txt -o output --no-secrets
|
|
58
|
+
|
|
59
|
+
# Only regex analysis (skip AST)
|
|
60
|
+
jseye -i subs.txt -o output --regex-only
|
|
61
|
+
|
|
62
|
+
# Skip AST analysis
|
|
63
|
+
jseye -i subs.txt -o output --skip-ast
|
|
64
|
+
|
|
65
|
+
# Skip sink detection
|
|
66
|
+
jseye -i subs.txt -o output --no-sinks
|
|
67
|
+
|
|
68
|
+
# Skip correlation engine
|
|
69
|
+
jseye -i subs.txt -o output --no-correlate
|
|
70
|
+
|
|
71
|
+
# Don't auto-install tools
|
|
72
|
+
jseye -i subs.txt -o output --no-install
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Information Commands
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# List available modules
|
|
79
|
+
jseye --list-modules
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## 🔄 Pipeline
|
|
83
|
+
|
|
84
|
+
JSEye executes a comprehensive analysis pipeline:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
subdomains.txt
|
|
88
|
+
↓
|
|
89
|
+
📡 URL Harvesting (gau, waybackurls, hakrawler, katana)
|
|
90
|
+
↓
|
|
91
|
+
🔍 JavaScript Filtering & Prioritization
|
|
92
|
+
↓
|
|
93
|
+
📥 JavaScript Download
|
|
94
|
+
↓
|
|
95
|
+
🧠 Regex Analysis
|
|
96
|
+
↓
|
|
97
|
+
🌳 AST Analysis
|
|
98
|
+
↓
|
|
99
|
+
🔗 LinkFinder Integration
|
|
100
|
+
↓
|
|
101
|
+
🔐 Secrets Detection (mantra)
|
|
102
|
+
↓
|
|
103
|
+
🎯 Sink Detection
|
|
104
|
+
↓
|
|
105
|
+
🔄 Intelligence Correlation
|
|
106
|
+
↓
|
|
107
|
+
📊 Final Report
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## 📁 Output Structure
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
output/
|
|
114
|
+
├── harvested_urls.txt # All discovered URLs
|
|
115
|
+
├── js_files_all.txt # All JavaScript files
|
|
116
|
+
├── js_files_high_priority.txt # High-value JS files
|
|
117
|
+
├── js_files_medium_priority.txt # Medium-value JS files
|
|
118
|
+
├── js_files_low_priority.txt # Low-value JS files
|
|
119
|
+
├── js_files_detailed.json # Detailed JS analysis
|
|
120
|
+
├── endpoints.json # Discovered endpoints
|
|
121
|
+
├── secrets.json # Found secrets
|
|
122
|
+
├── sinks.json # Detected sinks
|
|
123
|
+
├── correlation_report.json # Correlated intelligence
|
|
124
|
+
└── jseye_summary.json # Final summary
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## 🎨 Terminal Output
|
|
128
|
+
|
|
129
|
+
JSEye provides beautiful, informative terminal output:
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
██╗███████╗███████╗██╗ ██╗███████╗
|
|
133
|
+
██║██╔════╝██╔════╝╚██╗ ██╔╝██╔════╝
|
|
134
|
+
██║███████╗█████╗ ╚████╔╝ █████╗
|
|
135
|
+
██ ██║╚════██║██╔══╝ ╚██╔╝ ██╔══╝
|
|
136
|
+
╚█████╔╝███████║███████╗ ██║ ███████╗
|
|
137
|
+
╚════╝ ╚══════╝╚══════╝ ╚═╝ ╚══════╝
|
|
138
|
+
|
|
139
|
+
JSEye — See What JavaScript Hides
|
|
140
|
+
Author: Lakshmikanthan K (letchupkt)
|
|
141
|
+
|
|
142
|
+
[+] Loading domains from subdomains.txt
|
|
143
|
+
[+] Harvesting URLs (gau, waybackurls, katana)
|
|
144
|
+
[+] Extracted 1,482 JavaScript files
|
|
145
|
+
[+] Prioritized 214 high-value JS files
|
|
146
|
+
[+] Analyzing JavaScript (regex + AST)
|
|
147
|
+
[+] Found 37 endpoints, 4 secrets, 9 sinks
|
|
148
|
+
[+] Correlating intelligence
|
|
149
|
+
[✓] Results saved to output/
|
|
150
|
+
|
|
151
|
+
──────── JSEye Summary ────────
|
|
152
|
+
JS Files Analyzed : 214
|
|
153
|
+
Endpoints Found : 37
|
|
154
|
+
Secrets Found : 4
|
|
155
|
+
Sinks Found : 9
|
|
156
|
+
High Confidence : 11
|
|
157
|
+
Output Directory : output/
|
|
158
|
+
────────────────────────────────
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## 🧠 Smart Features
|
|
162
|
+
|
|
163
|
+
### JavaScript Prioritization
|
|
164
|
+
|
|
165
|
+
JSEye intelligently prioritizes JavaScript files based on:
|
|
166
|
+
|
|
167
|
+
- **High-value indicators**: admin, api, auth, config, dashboard, login
|
|
168
|
+
- **File characteristics**: non-minified, shorter paths, custom code
|
|
169
|
+
- **Vendor detection**: deprioritizes common libraries and CDN files
|
|
170
|
+
|
|
171
|
+
### Correlation Engine
|
|
172
|
+
|
|
173
|
+
Connects findings across multiple sources to reduce false positives and highlight high-confidence discoveries.
|
|
174
|
+
|
|
175
|
+
### Auto-Installation
|
|
176
|
+
|
|
177
|
+
Automatically detects and installs missing tools on first run, with graceful fallbacks and clear error messages.
|
|
178
|
+
|
|
179
|
+
## 🔧 Advanced Configuration
|
|
180
|
+
|
|
181
|
+
### Custom Regex Patterns
|
|
182
|
+
|
|
183
|
+
Edit `jseye/data/regex.yaml` to customize detection patterns for:
|
|
184
|
+
- API endpoints
|
|
185
|
+
- Secrets and tokens
|
|
186
|
+
- DOM sinks
|
|
187
|
+
- Custom patterns
|
|
188
|
+
|
|
189
|
+
### Vendor Blacklist
|
|
190
|
+
|
|
191
|
+
Modify `jseye/data/vendor_blacklist.txt` to customize which JavaScript libraries are deprioritized.
|
|
192
|
+
|
|
193
|
+
## 🤝 Contributing
|
|
194
|
+
|
|
195
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
196
|
+
|
|
197
|
+
1. Fork the repository
|
|
198
|
+
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
|
|
199
|
+
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
|
|
200
|
+
4. Push to the branch (`git push origin feature/AmazingFeature`)
|
|
201
|
+
5. Open a Pull Request
|
|
202
|
+
|
|
203
|
+
## 📄 License
|
|
204
|
+
|
|
205
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
206
|
+
|
|
207
|
+
## 👤 Author
|
|
208
|
+
|
|
209
|
+
**Lakshmikanthan K** (letchupkt)
|
|
210
|
+
- GitHub: [@letchupkt](https://github.com/letchupkt)
|
|
211
|
+
|
|
212
|
+
## 🙏 Acknowledgments
|
|
213
|
+
|
|
214
|
+
- Thanks to all the tool authors: gau, waybackurls, hakrawler, katana, subjs, linkfinder, mantra
|
|
215
|
+
- Inspired by the bug bounty and security research community
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
**JSEye** - See what JavaScript hides. 👁️
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"""
|
|
2
|
+
JSEye Banner Display
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from rich.console import Console
|
|
6
|
+
from rich.text import Text
|
|
7
|
+
from rich.align import Align
|
|
8
|
+
|
|
9
|
+
console = Console()
|
|
10
|
+
|
|
11
|
+
def show_banner():
|
|
12
|
+
"""Display the JSEye banner with proper alignment"""
|
|
13
|
+
banner = """
|
|
14
|
+
|
|
15
|
+
▄▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄▄▄
|
|
16
|
+
█▀ ██ ██▀▀▀▀█▄ █▀██▀▀▀
|
|
17
|
+
██ ▀██▄ ▄▀ ██
|
|
18
|
+
██ ▀██▄▄ ████ ██ ██ ▄█▀█▄
|
|
19
|
+
██ ▄ ▀██▄ ██ ██▄██ ██▄█▀
|
|
20
|
+
██ ▀██████▀ ▀█████▄▄▀██▀▄▀█▄▄▄
|
|
21
|
+
▄ ██ ██
|
|
22
|
+
▀████▀ ▀▀▀
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
# Display banner in cyan, centered
|
|
26
|
+
banner_text = Text(banner.strip(), style="cyan bold")
|
|
27
|
+
console.print(Align.center(banner_text))
|
|
28
|
+
console.print()
|
|
29
|
+
|
|
30
|
+
# Tagline and author info, centered
|
|
31
|
+
tagline = Text("JSEye — See What JavaScript Hides", style="green bold")
|
|
32
|
+
console.print(Align.center(tagline))
|
|
33
|
+
|
|
34
|
+
author = Text("Author: Lakshmikanthan K (letchupkt)", style="purple")
|
|
35
|
+
console.print(Align.center(author))
|
|
36
|
+
|
|
37
|
+
console.print()
|
jseye-1.0.0/jseye/cli.py
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
JSEye CLI - Main entry point
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import os
|
|
7
|
+
import sys
|
|
8
|
+
import argparse
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from rich.console import Console
|
|
11
|
+
|
|
12
|
+
from .banner import show_banner
|
|
13
|
+
from .installer import check_and_install_tools
|
|
14
|
+
from .pipeline import JSEyePipeline
|
|
15
|
+
|
|
16
|
+
console = Console()
|
|
17
|
+
|
|
18
|
+
def clear_terminal():
|
|
19
|
+
"""Clear terminal screen (cross-platform)"""
|
|
20
|
+
import platform
|
|
21
|
+
if platform.system() == "Windows":
|
|
22
|
+
os.system("cls")
|
|
23
|
+
else:
|
|
24
|
+
os.system("clear")
|
|
25
|
+
|
|
26
|
+
def create_parser():
|
|
27
|
+
"""Create argument parser"""
|
|
28
|
+
parser = argparse.ArgumentParser(
|
|
29
|
+
description="JSEye - JavaScript Intelligence & Attack Surface Discovery",
|
|
30
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
31
|
+
epilog="""
|
|
32
|
+
Examples:
|
|
33
|
+
jseye -i subs.txt -o output # Full pipeline (default)
|
|
34
|
+
jseye -i subs.txt -o output --js-only # Stop after JS discovery
|
|
35
|
+
jseye -i subs.txt -o output --no-secrets # Skip secrets detection
|
|
36
|
+
jseye -i subs.txt -o output --regex-only # Only regex analysis
|
|
37
|
+
"""
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
# Required arguments (but not when listing modules)
|
|
41
|
+
parser.add_argument("-i", "--input",
|
|
42
|
+
help="Input file containing subdomains")
|
|
43
|
+
parser.add_argument("-o", "--output",
|
|
44
|
+
help="Output directory for results")
|
|
45
|
+
|
|
46
|
+
# Module control flags (disable/isolate modules)
|
|
47
|
+
parser.add_argument("--js-only", action="store_true",
|
|
48
|
+
help="Stop after JavaScript discovery")
|
|
49
|
+
parser.add_argument("--no-install", action="store_true",
|
|
50
|
+
help="Do not auto-install missing tools")
|
|
51
|
+
parser.add_argument("--skip-ast", action="store_true",
|
|
52
|
+
help="Skip AST analysis")
|
|
53
|
+
parser.add_argument("--regex-only", action="store_true",
|
|
54
|
+
help="Only perform regex analysis")
|
|
55
|
+
parser.add_argument("--no-secrets", action="store_true",
|
|
56
|
+
help="Skip secrets detection (mantra)")
|
|
57
|
+
parser.add_argument("--no-sinks", action="store_true",
|
|
58
|
+
help="Skip sink detection")
|
|
59
|
+
parser.add_argument("--no-correlate", action="store_true",
|
|
60
|
+
help="Skip correlation engine")
|
|
61
|
+
parser.add_argument("--list-modules", action="store_true",
|
|
62
|
+
help="Show available modules and exit")
|
|
63
|
+
|
|
64
|
+
return parser
|
|
65
|
+
|
|
66
|
+
def list_modules():
|
|
67
|
+
"""List available modules"""
|
|
68
|
+
modules = [
|
|
69
|
+
"harvest - URL harvesting (gau, waybackurls, katana)",
|
|
70
|
+
"js_filter - JavaScript file filtering",
|
|
71
|
+
"js_download - JavaScript file downloading",
|
|
72
|
+
"analyze_regex - Regex-based analysis",
|
|
73
|
+
"analyze_ast - AST-based analysis",
|
|
74
|
+
"linkfinder - Endpoint discovery",
|
|
75
|
+
"secrets - Secret detection (mantra)",
|
|
76
|
+
"sinks - Sink detection",
|
|
77
|
+
"correlate - Intelligence correlation"
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
console.print("\n[bold cyan]Available JSEye Modules:[/bold cyan]")
|
|
81
|
+
for module in modules:
|
|
82
|
+
console.print(f" • {module}")
|
|
83
|
+
console.print()
|
|
84
|
+
|
|
85
|
+
def main():
|
|
86
|
+
"""Main CLI entry point"""
|
|
87
|
+
parser = create_parser()
|
|
88
|
+
args = parser.parse_args()
|
|
89
|
+
|
|
90
|
+
# Clear terminal and show banner
|
|
91
|
+
clear_terminal()
|
|
92
|
+
show_banner()
|
|
93
|
+
|
|
94
|
+
# List modules if requested
|
|
95
|
+
if args.list_modules:
|
|
96
|
+
list_modules()
|
|
97
|
+
return 0
|
|
98
|
+
|
|
99
|
+
# Validate required arguments for normal operation
|
|
100
|
+
if not args.input or not args.output:
|
|
101
|
+
parser.error("Input and output arguments are required for normal operation")
|
|
102
|
+
|
|
103
|
+
# Validate input file
|
|
104
|
+
if not Path(args.input).exists():
|
|
105
|
+
console.print(f"[red]Error: Input file '{args.input}' not found[/red]")
|
|
106
|
+
return 1
|
|
107
|
+
|
|
108
|
+
# Create output directory
|
|
109
|
+
output_dir = Path(args.output)
|
|
110
|
+
output_dir.mkdir(parents=True, exist_ok=True)
|
|
111
|
+
|
|
112
|
+
try:
|
|
113
|
+
# Check and install tools if needed
|
|
114
|
+
if not args.no_install:
|
|
115
|
+
console.print("[yellow]Checking required tools...[/yellow]")
|
|
116
|
+
if not check_and_install_tools():
|
|
117
|
+
console.print("[red]Failed to install required tools[/red]")
|
|
118
|
+
return 1
|
|
119
|
+
|
|
120
|
+
# Initialize and run pipeline
|
|
121
|
+
pipeline = JSEyePipeline(args.input, args.output, args)
|
|
122
|
+
results = pipeline.run()
|
|
123
|
+
|
|
124
|
+
# Show summary
|
|
125
|
+
pipeline.show_summary(results)
|
|
126
|
+
|
|
127
|
+
return 0
|
|
128
|
+
|
|
129
|
+
except KeyboardInterrupt:
|
|
130
|
+
console.print("\n[yellow]Interrupted by user[/yellow]")
|
|
131
|
+
return 1
|
|
132
|
+
except Exception as e:
|
|
133
|
+
console.print(f"[red]Error: {e}[/red]")
|
|
134
|
+
return 1
|
|
135
|
+
|
|
136
|
+
if __name__ == "__main__":
|
|
137
|
+
sys.exit(main())
|