
أداة قوية لتخمين الأدلة (Brute-force) مصمّمة خصيصًا للعمليات التكرارية/المتعددة (Recursive/Multiplex)، واكتشاف وتعداد واجهات برمجة التطبيقات (API)، واستخراج ملفات JS، وسرد طرق HTTP الخاصة بواجهات API، كل ذلك في أمر واحد. هذه الأداة ليست مخصصة لواجهات API فقط، بل إنها تتفوق فيها.
أداة قوية لتخمين المسارات (Directory Brute-Force) مصممة لاستكشاف واجهات برمجة التطبيقات (API) واختبار الاختراق. تكتشف تلقائيًا نقاط نهاية API المخفية، وتجري فحصًا فرعيًا متكررًا، وتختبر طرق HTTP لاستكشاف أعمق لواجهات API.
✨ القدرات الأساسية:
requeststmux (اختياري، لعلامة --split)xfce-terminal (لبيئات سطح مكتب لينكس)# Clone the repository
git clone https://github.com/austinjump-sec/API-SPY.git
cd API-SPY
# Install dependencies
pip install requests
# Make scripts executable (optional)
chmod +x apispy.py apiprobe.py
python3 apispy.py <baseUrl> <wordlist> [OPTIONS]
| الوسيطة | الوصف |
|---|---|
<baseUrl> | عنوان URL الهدف (مثل http://example.com أو http://api.example.com) |
<wordlist> | مسار ملف قائمة الكلمات الذي يحتوي على نقاط النهاية (واحد في كل سطر) |
python3 apispy.py http://api.example.com wordlist.txt
python3 apispy.py http://api.example.com wordlist.txt -t10
python3 apispy.py http://api.example.com wordlist.txt -t5 --split
python3 apispy.py http://api.example.com/v1 wordlist.txt -t20
تبدأ الأداة باختبار مجموعة محددة مسبقًا من مسارات API الشائعة:
api, v1, v2, api/v1, api/v2, graphql, rest#)200, 401, 403عند العثور على نقطة نهاية، يُطلب منك:
'-> Subscan <url>? (y/n) [Auto-skip in 5s]:
y/yes لفحص تلك النقطة بشكل متكرر باستخدام نفس قائمة الكلماتبعد الفحص الفرعي، يُطلب منك:
'-> Probe methods on <url>? (y/n) [Auto-skip in 5s]:
apiprobe.py الذي يختبر طرق HTTP على نقطة النهاية المكتشفةAllow[+] Url found: http://api.example.com/v1 ← 200 OK (accessible)
'-> Subscan http://api.example.com/v1? (y/n) [Auto-skip in 0s]:
[-] Timeout: Skipped prompt for http://api.example.com/v1?
'-> Probe methods on http://api.example.com/v1? (y/n) [Auto-skip in 4s]:
[-] Url found but not permitted (403 ERR): ... ← Forbidden but exists
[-] Url found but not permitted (401 ERR): ... ← Requires authentication
[+] GET -> STATUS: 200 OK (Size: 1024)
[-] POST -> STATUS: 405 (Size: 0)
[Header Hint] Allow: GET, HEAD, OPTIONS
أنشئ ملفًا نصيًا بسيطًا يحتوي على نقاط النهاية (واحد في كل سطر):
admin
users
api/users
v1/products
v2/customers
/api/v1/auth
/graphql
search
data
config
ملاحظة: تُعتبر الأسطر التي تبدأ بـ # تعليقات ويتم تجاهلها.
قوائم كلمات API الشائعة لاستخدامها مع API-SPY:
# Stealth mode (low threads)
python3 apispy.py http://target.com wordlist.txt -t3
# Balanced mode
python3 apispy.py http://target.com wordlist.txt -t15
# Aggressive mode
python3 apispy.py http://target.com wordlist.txt -t50
timeout=5 في الكود المصدري للتخصيصتأكد من صحة مسار قائمة الكلمات ووجود الملف:
ls -la /path/to/wordlist.txt
عند إجراء الفحص الفرعي، تأكد من:
apispy.pyapiprobe.pyإذا فشل --split:
sudo apt install tmuxtmux new-session -s scancurl http://your-url/check_status()⚠️ قانوني وأخلاقي:
عدّل الكود المصدري لضبط قيم المهلة:
def ask_subscan(url, wordlist, timeout=10): # Change from 5 to 10 seconds
أنشئ قوائم كلمات تستهدف مسارات API محددة:
# Admin endpoints only
grep -i "admin" full-wordlist.txt > admin-wordlist.txt
# v1 API only
grep "v1" full-wordlist.txt > v1-wordlist.txt
افحص أهدافًا متعددة باستخدام حلقة:
for target in http://target1.com http://target2.com http://target3.com; do
python3 apispy.py "$target" wordlist.txt -t10
done
المساهمات مرحب بها! لا تتردد في:
هذه الأداة مقدمة لأغراض تعليمية واختبار الأمن المصرح به فقط. يتحمل المستخدمون مسؤولية ضمان حصولهم على الإذن المناسب قبل فحص أي أنظمة. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني.
يُقدَّم هذا المشروع كما هو لأغراض أبحاث الأمن والاختبار المصرح به.
أُنشئ بواسطة: austinjump-sec
المستودع: austinjump-sec/API-SPY
| الوسيطة | الوصف |
|---|
--t<number> | عدد الخيوط (الحد الأقصى 150، الافتراضي: 1) |
--split | استخدام نافذة tmux المقسمة بدلاً من نوافذ طرفية جديدة |
--debug | يعرض رسائل الخطأ المخفية |
--loud | يعرض جميع الرسائل، الإيجابية منها والخطأ، مع إبراز أي منها لا يُرجع 404 |
--js | يفحص ملفات JavaScript ويستخرج من أي منها نقاط نهاية API ثابتة شائعة |