API'lar (Application Programming Interface — dastur interfeyslari) dasturiy tizimlar va ilovalarga o'zaro aloqa qilish hamda ma'lumot almashish imkonini beradi. API sinovi muhim, chunki API'lardagi zaifliklar veb-saytning maxfiylik, yaxlitlik va foydalanuvchanlik (confidentiality, integrity, availability) kabi asosiy jihatlariga putur yetkazishi mumkin.
Barcha dinamik veb-saytlar API'lardan tashkil topgan, shu sabab SQL injection kabi klassik veb-zaifliklarni ham API sinoviga kiritish mumkin. Ushbu mavzuda biz veb-saytning front-end qismi tomonidan to'liq ishlatilmaydigan API'larni qanday sinovdan o'tkazishni o'rgatamiz — asosiy e'tibor RESTful va JSON API'larga qaratiladi. Shuningdek, ichki API'larga ta'sir qilishi mumkin bo'lgan server-side parameter pollution zaifliklarini qanday tekshirishni ko'rsatamiz.
API sinovi va umumiy veb-sinov o'rtasidagi kesishuvni ko'rsatish uchun biz mavjud mavzularimiz bilan OWASP API Security Top 10 2023 o'rtasida moslik (mapping) tuzdik.

GraphQL API'lari haqida ko'proq bilish uchun GraphQL API zaifliklari Academy mavzusiga qarang.
API sinovini boshlash uchun avval API haqida imkon qadar ko'proq ma'lumot to'plab, uning hujum yuzasini (attack surface) aniqlashingiz kerak.
Boshlash uchun API endpointlarini aniqlashingiz lozim. Bular — API o'z serveridagi muayyan resurs haqidagi so'rovlarni qabul qiladigan joylardir. Masalan, quyidagi GET so'rovini ko'rib chiqamiz:
GET /api/books HTTP/1.1
Host: example.comUshbu so'rov uchun API endpoint /api/books. Bu API bilan o'zaro aloqaga olib keladi va kutubxonadagi kitoblar ro'yxatini oladi. Boshqa bir API endpoint, masalan, /api/books/mystery bo'lishi mumkin — u detektiv (mystery) kitoblar ro'yxatini qaytaradi.
Endpointlarni aniqlagach, ular bilan qanday o'zaro aloqa qilishni belgilashingiz kerak. Bu API'ni sinash uchun to'g'ri HTTP so'rovlarini tuzishga imkon beradi. Masalan, quyidagilar haqida ma'lumot topishingiz kerak:
API'lar odatda hujjatlashtiriladi, shunda dasturchilar ulardan qanday foydalanish va integratsiya qilishni biladi.
Hujjatlar ham inson o'qiy oladigan (human-readable), ham mashina o'qiy oladigan (machine-readable) shaklda bo'lishi mumkin. Inson o'qiy oladigan hujjatlar dasturchilarga API'dan qanday foydalanishni tushunishga mo'ljallangan. Ular batafsil tushuntirishlar, misollar va foydalanish stsenariylarini o'z ichiga olishi mumkin. Mashina o'qiy oladigan hujjatlar esa API integratsiyasi va validatsiyasi kabi vazifalarni avtomatlashtirish uchun dasturiy ta'minot tomonidan qayta ishlanishga mo'ljallangan. U JSON yoki XML kabi tuzilgan (structured) formatlarda yoziladi.
API hujjatlari ko'pincha ommaga ochiq bo'ladi, ayniqsa API tashqi dasturchilar foydalanishi uchun mo'ljallangan bo'lsa. Bunday holatda razvedkani doim hujjatlarni ko'rib chiqishdan boshlang.
Agar API hujjatlari oshkora mavjud bo'lmasa ham, API'dan foydalanadigan ilovalarni ko'zdan kechirib, ularga kirishingiz mumkin.
Buning uchun API'ni crawl qilishda Burp Scanner'dan foydalanishingiz mumkin. Yoki Burp brauzeri orqali ilovalarni qo'lda ko'zdan kechirishingiz mumkin. API hujjatlariga ishora qilishi mumkin bo'lgan endpointlarni qidiring, masalan:
/api/swagger/index.html/openapi.jsonAgar biror resurs uchun endpoint aniqlasangiz, uning asosiy yo'lini (base path) ham tekshiring. Masalan, /api/swagger/v1/users/123 resurs endpointini aniqlasangiz, quyidagi yo'llarni tekshiring:
/api/swagger/v1/api/swagger/apiShuningdek, Intruder yordamida hujjatlarni topish uchun keng tarqalgan yo'llar ro'yxatidan foydalanishingiz mumkin.
Topilgan har qanday mashina o'qiy oladigan API hujjatlarini tahlil qilish uchun turli avtomatlashtirilgan vositalardan foydalanishingiz mumkin.
OpenAPI hujjatlarini yoki JSON hamda YAML formatidagi boshqa hujjatlarni crawl va audit qilish uchun Burp Scanner'dan foydalanishingiz mumkin. Shuningdek, OpenAPI hujjatlarini OpenAPI Parser BApp yordamida tahlil qilishingiz mumkin.
Hujjatlashtirilgan endpointlarni sinash uchun Postman yoki SoapUI kabi maxsus vositadan ham foydalanishingiz mumkin.
Shuningdek, API'dan foydalanadigan ilovalarni ko'zdan kechirib ko'p ma'lumot to'plashingiz mumkin. Buni API hujjatlariga ega bo'lsangiz ham qilishga arziydi, chunki ba'zan hujjatlar noaniq yoki eskirgan bo'lishi mumkin.
Ilovani crawl qilish uchun Burp Scanner'dan, so'ng qiziqarli hujum yuzasini qo'lda tekshirish uchun Burp brauzeridan foydalanishingiz mumkin.
Ilovani ko'zdan kechirar ekansiz, URL tuzilishida API endpointlariga ishora qiluvchi naqshlarni (masalan /api/) qidiring. JavaScript fayllariga ham e'tibor bering. Ular veb-brauzer orqali to'g'ridan-to'g'ri chaqirmagan API endpointlariga havolalarni o'z ichiga olishi mumkin. Burp Scanner crawl paytida ba'zi endpointlarni avtomatik ajratib oladi, lekin yanada chuqurroq ajratish uchun JS Link Finder BApp'dan foydalaning. JavaScript fayllarni Burp'da qo'lda ham ko'rib chiqishingiz mumkin.
API endpointlarini aniqlagach, ular bilan Burp Repeater va Burp Intruder yordamida o'zaro aloqa qiling. Bu API'ning xatti-harakatini kuzatish va qo'shimcha hujum yuzasini topish imkonini beradi. Masalan, API HTTP metodini va media turini o'zgartirishga qanday javob berishini tekshirishingiz mumkin.
API endpointlari bilan o'zaro aloqa qilar ekansiz, xato xabarlari va boshqa javoblarni diqqat bilan ko'rib chiqing. Ba'zan ular to'g'ri HTTP so'rovini tuzish uchun ishlatishingiz mumkin bo'lgan ma'lumotni o'z ichiga oladi.
HTTP metodi resurs ustida bajariladigan amalni belgilaydi. Masalan:
GET — resursdan ma'lumot oladi.PATCH — resursga qisman o'zgartirishlar qo'llaydi.OPTIONS — resursda ishlatilishi mumkin bo'lgan so'rov metodlari turlari haqida ma'lumot oladi.Bitta API endpoint turli HTTP metodlarini qo'llab-quvvatlashi mumkin. Shu sababli API endpointlarini tekshirayotganda barcha potensial metodlarni sinash muhim. Bu qo'shimcha endpoint funksionalligini aniqlashga va ko'proq hujum yuzasini ochishga imkon berishi mumkin.
Masalan, /api/tasks endpointi quyidagi metodlarni qo'llab-quvvatlashi mumkin:
GET /api/tasks — vazifalar ro'yxatini oladi.POST /api/tasks — yangi vazifa yaratadi.DELETE /api/tasks/1 — vazifani o'chiradi.Metodlar oralig'ini avtomatik aylanib chiqish uchun Burp Intruder'dagi o'rnatilgan HTTP verbs ro'yxatidan foydalanishingiz mumkin.
Turli HTTP metodlarini sinaganda past ustuvorlikdagi (low-priority) obyektlarni nishonga oling. Bu kutilmagan oqibatlarning oldini olishga yordam beradi — masalan, muhim elementlarni o'zgartirib qo'yish yoki ortiqcha yozuvlar yaratib yuborish.
API endpointlari ko'pincha ma'lumotni muayyan formatda kutadi. Shu sababli ular so'rovda berilgan ma'lumotning content turiga qarab turlicha ishlashi mumkin. Content turini o'zgartirish sizga quyidagilarni qilishga imkon berishi mumkin:
Content turini o'zgartirish uchun Content-Type sarlavhasini o'zgartiring, so'ng so'rov tanasini (body) shunga mos ravishda qayta formatlang. So'rovlarda yuborilgan ma'lumotni XML va JSON o'rtasida avtomatik aylantirish uchun Content type converter BApp'dan foydalanishingiz mumkin.
Dastlabki API endpointlarini aniqlagach, yashirin endpointlarni ochish uchun Intruder'dan foydalanishingiz mumkin. Masalan, foydalanuvchi ma'lumotini yangilash uchun quyidagi API endpointni aniqlagan holatni ko'rib chiqamiz:
PUT /api/user/update
Yashirin endpointlarni aniqlash uchun bir xil tuzilishga ega boshqa resurslarni topishda Burp Intruder'dan foydalanishingiz mumkin. Masalan, yo'lning /update pozitsiyasiga delete va add kabi boshqa keng tarqalgan funksiyalar ro'yxatidan payload qo'shishingiz mumkin.
Yashirin endpointlarni qidirganda keng tarqalgan API nomlash konventsiyalari va soha atamalariga asoslangan so'z ro'yxatlaridan (wordlists) foydalaning. Dastlabki razvedkangizga asoslanib, ilovaga tegishli atamalarni ham kiritishni unutmang.
API razvedkasini o'tkazayotganingizda API qo'llab-quvvatlaydigan hujjatlashtirilmagan parametrlarni topishingiz mumkin. Ulardan ilovaning xatti-harakatini o'zgartirish uchun foydalanishga urinishingiz mumkin. Burp yashirin parametrlarni aniqlashga yordam beradigan ko'plab vositalarni o'z ichiga oladi:
Mass assignment (auto-binding deb ham ataladi) beixtiyor yashirin parametrlar yaratishi mumkin. U dasturiy ta'minot freymvorklari so'rov parametrlarini ichki obyektdagi maydonlarga avtomatik bog'laganda yuzaga keladi. Shu sababli mass assignment ilova dasturchi qayta ishlashni mo'ljallamagan parametrlarni qo'llab-quvvatlashiga olib kelishi mumkin.
Mass assignment obyekt maydonlaridan parametrlar yaratgani sababli, siz bu yashirin parametrlarni ko'pincha API qaytargan obyektlarni qo'lda ko'rib chiqish orqali aniqlashingiz mumkin.
Masalan, foydalanuvchilarga o'z username va emailini yangilash imkonini beruvchi va quyidagi JSON'ni o'z ichiga olgan PATCH /api/users/ so'rovini ko'rib chiqamiz:
{
"username": "wiener",
"email": "wiener@example.com",
}Bir vaqtning o'zida yuborilgan GET /api/users/123 so'rovi quyidagi JSON'ni qaytaradi:
{
"id": 123,
"name": "John Doe",
"email": "john@example.com",
"isAdmin": "false"
}Bu yashirin id va isAdmin parametrlari yangilangan username va email parametrlari bilan birga ichki foydalanuvchi obyektiga bog'langanligini ko'rsatishi mumkin.
Aniqlangan isAdmin parametr qiymatini o'zgartira olishingizni sinash uchun uni PATCH so'roviga qo'shing:
{
"username": "wiener",
"email": "wiener@example.com",
"isAdmin": false,
}Bundan tashqari, isAdmin parametrining yaroqsiz qiymati bilan PATCH so'rovini yuboring:
{
"username": "wiener",
"email": "wiener@example.com",
"isAdmin": "foo",
}Agar ilova o'zini boshqacha tutsa, bu yaroqsiz qiymat so'rov mantig'iga (query logic) ta'sir qilishini, yaroqli qiymat esa yo'qligini ko'rsatishi mumkin. Bu esa parametr foydalanuvchi tomonidan muvaffaqiyatli yangilanishi mumkinligini bildirishi mumkin.
So'ng zaiflikdan foydalanishga urinish uchun isAdmin parametr qiymati true ga o'rnatilgan PATCH so'rovini yuborishingiz mumkin:
{
"username": "wiener",
"email": "wiener@example.com",
"isAdmin": true,
}Agar so'rovdagi isAdmin qiymati yetarli validatsiya va sanitatsiyasiz foydalanuvchi obyektiga bog'lansa, wiener foydalanuvchisiga xato tarzda admin huquqlari berilishi mumkin. Buni aniqlash uchun ilovada wiener sifatida ko'zdan kechiring va admin funksionalligiga kira olishingizni tekshiring.
API'larni loyihalashda xavfsizlik boshidanoq e'tiborga olinishiga ishonch hosil qiling. Xususan, quyidagilarni bajaring:
Mass assignment zaifliklarining oldini olish uchun foydalanuvchi yangilashi mumkin bo'lgan xususiyatlarni allowlist qiling va foydalanuvchi yangilamasligi kerak bo'lgan maxfiy xususiyatlarni blocklist qiling.