Maxsus amallarni yozish qo'llanmasi
Maxsus amallar (custom actions) - bu qo'lda testlash paytida vazifalarni avtomatlashtirish va axborot ajratib olish uchun to'g'ridan-to'g'ri Burp Repeater'da ishlaydigan skriptlardir.
Bu sahifada custom action'lar uchun foydali kod bo'laklari va asosiy qurilish bloklari misollari keltirilgan. Agar siz custom action'lar bilan endigina tanishayotgan bo'lsangiz, to'liq skript qanday tuzilishini ko'rish uchun amaliy misol sahifasidan boshlashni tavsiya qilamiz. Asoslarni o'zlashtirganingizdan so'ng, o'zingiznikini yaratishda bu sahifadan ma'lumotnoma sifatida foydalaning.
Aloqador sahifalar
- Custom action bo'yicha amaliy misol.
- Custom action'lar.
- Custom action yaratish.
- Custom action'larda AI imkoniyatlarini ishlab chiqish.
- Tadqiqotchilarimiz va hamjamiyat tomonidan yaratilgan custom action misollarini ko'rish uchun Bambdas GitHub repozitoriysi - Custom actions sahifasiga qarang.
Ushbu sahifada
- API'ga kirish
- 1-qadam: So'rov va javob ma'lumotlariga kirish
- 2-qadam: Ma'lumotlarni qayta ishlash
- 3-qadam: Ma'lumotlarni jurnalga yozish va ulardan foydalanish
- Foydalanish misollari
API'ga kirish
Custom action skriptlarini yozishda yordam berish uchun Montoya API'ning yettita obyekti mavjud:
HttpRequestResponse- To'liq HTTP so'rov va javobni ifodalaydi.RequestResponseSelection- So'rov yoki javobning tanlangan qismlarini ifodalaydi.HttpEditor- Repeater'dagi tahrirlanadigan HTTP xabar komponentlariga kirish imkonini beradi.MontoyaApi- Burp imkoniyatlariga kirish imkonini beradi.Utilities- Montoya API yordamchi funksiyalariga kirish imkonini beradi.Logging- Custom actions yon panelidagi Output paneliga natijalarni jurnalga yozish imkonini beradi.Ai- custom action'laringizga katta til modeliga (LLM) so'rovlar (prompt) yuborish imkonini beradi.
Aloqador sahifalar
1-qadam: So'rov va javob ma'lumotlariga kirish
HTTP xabari bilan ishlash uchun avvalo uning tarkibiga kirishingiz kerak bo'ladi.
To'liq so'rov yoki javobni olish
HttpRequestResponse obyekti yordamida butun HTTP so'rov yoki javobga kirishingiz mumkin:
Xabarning muayyan qismlarini ajratib olish
Agar sizga xabarning faqat bir bo'limini tahlil qilish kerak bo'lsa, so'rov yoki javobning muayyan qismlarini, masalan, tanasi (body) yoki sarlavhalarini (headers) olishingiz mumkin. Masalan:
Foydalanuvchi tanlagan kontentni ajratib olish
Agar foydalanuvchi custom action'dan foydalanganda so'rov yoki javobning muayyan bo'limini tanlaydigan bo'lsa, tanlovga RequestResponseSelection orqali kirishingiz mumkin:
HTTP xizmatini ajratib olish
So'rov yo'naltirilgan manzilni aniqlash uchun HttpService obyektini oling. Bu tashqi vositalar bilan integratsiya qilishda yoki shell buyruqlarini bajarishda foydali.
Undan foydalanishdan oldin har doim HttpService null emasligini tekshiring:
Bo'sh yoki mavjud bo'lmagan kontentni qayta ishlash
Ortiqcha ishlov berish yoki xatoliklardan qochish uchun javob yoxud foydalanuvchi tanlovi ustida amal bajarishdan oldin null yoki bo'sh kontent uchun tekshiruvlar qo'shing. Bu, ayniqsa, kontentni AI modeli uchun kirish ma'lumoti sifatida ishlatayotgan bo'lsangiz muhim, chunki bu keraksiz xarajatlarni kamaytiradi. Masalan:
2-qadam: Ma'lumotlarni qayta ishlash
Xabarga kirganingizdan so'ng, ma'lumotlarni turli usullarda qayta ishlashingiz va tahlil qilishingiz mumkin:
Xabarlarni tahlil qilish uchun AI'dan foydalanish
Custom action'laringizga AI asosidagi imkoniyatlarni qanday qo'shishni bilish uchun Custom action'larda AI imkoniyatlarini ishlab chiqish sahifasiga qarang.
Muharrir kontentini o'zgartirish
requestPane() va responsePane() metodlari yordamida HTTP muharririda ko'rsatilgan so'rov yoki javobni dasturiy tarzda yangilashingiz mumkin. Ular kontentni o'zgartirish uchun metodlar taqdim etadigan EditorPane obyektlarini qaytaradi:
EditorPane.set() asosiy xabar obyektini yangilamaydi. Yangilangan kontentni o'sha custom action ichida jurnalga yozish yoki qayta ishlatish uchun set() ni chaqirishdan oldin uni o'zgaruvchida saqlang. Masalan:
Eslatma
So'rovlarni o'zgartiradigan va javoblarni o'rnatadigan custom action'larning amaliy misollari uchun O'zgartirilgan so'rovlarni yuborish bo'limiga qarang.
Muharrirda tanlangan kontentni almashtirish
Agar tanlangan matn yordamida xabarning bir bo'limini o'zgartirish yoki almashtirish kerak bo'lsa, o'sha tanlov aynan qayerda joylashganini bilishingiz kerak. Tanlovning boshlanish va tugash pozitsiyalarini olish uchun offsets() dan foydalaning:
So'ngra uni qayta qurishingiz uchun to'liq so'rovni satr (string) ko'rinishida oling:
Shundan so'ng o'z kontentingizni asl xabarning to'g'ri joyiga qo'yishingiz mumkin:
Eslatma
Foydalanuvchi tanlovi ustida amal bajarishdan oldin null yoki bo'sh kontent uchun tekshiruv qo'shish eng yaxshi amaliyot hisoblanadi. Bu ortiqcha ishlov berish yoki xatoliklardan qochishga yordam beradi. Batafsil ma'lumot uchun Bo'sh yoki mavjud bo'lmagan kontentni qayta ishlash bo'limiga qarang.
3-qadam: Ma'lumotlarni jurnalga yozish va ulardan foydalanish
Custom action natijalarini ish jarayoningizga mos keladigan istalgan tarzda ajratib olishingiz, jurnalga yozishingiz va uzatishingiz mumkin.
Output'ga jurnal yozish
Custom actions yon panelidagi Output oynasiga ma'lumot yozish uchun logging().logToOutput() metodidan foydalaning. Masalan:
Ma'lumotlarni boshqa Burp vositalariga yuborish
api() obyekti yordamida ma'lumotlarni boshqa Burp vositalariga yuborishingiz mumkin. Bu custom action'ingizni test qilish ish jarayoningizga integratsiya qilmoqchi bo'lganingizda foydali bo'ladi:
Ma'lumotlarni faylga yozish
Ma'lumotlarni tashqi faylga, masalan, foydalanuvchining uy katalogidagi matn fayliga yozishingiz mumkin. Fayl yo'li mavjud bo'lmagan yoki unga yozib bo'lmaydigan holatlar kabi kutilmagan nosozliklarning oldini olish uchun xatoliklarni to'g'ri qayta ishlashni unutmang:
Foydalanish misollari
Bu bo'limda quyidagi foydalanish holatlari ko'rib chiqiladi:
- Ma'lumotlarni dekodlash.
- Ma'lumotlarni kodlash.
- O'zgartirilgan so'rovlarni yuborish.
- Race condition zaifliklarini tekshirish uchun takroriy so'rovlar yuborish.
- Tashqi ma'lumotlarni olish.
- Shell buyruqlarini bajarish.
Ma'lumotlarni dekodlash
So'rov yoki javobdagi ma'lumotlarni dekodlash uchun quyidagilarni bajarishingiz kerak bo'ladi:
- Xabarning tegishli bo'limini ajratib oling.
- Ma'lumotlarni qayta ishlash uchun regulyar ifoda yoki dekodlash mantig'idan foydalaning.
- Natijani chiqaring yoki asl ma'lumotni dekodlangan versiya bilan almashtiring.
Quyidagi misol javobning foydalanuvchi tanlagan bo'limlarida topilgan har qanday \uXXXX Unicode escape ketma-ketliklarini dekodlaydi va tanlovni dekodlangan belgilar bilan almashtiradi:
Ma'lumotlarni kodlash
So'rov yoki javobdagi ma'lumotlarni kodlash uchun quyidagilarni bajarishingiz kerak bo'ladi:
- Xabarning tegishli bo'limini ajratib oling.
- Ma'lumotlarga kodlash o'zgartirishini qo'llang.
- Natijani chiqaring yoki asl ma'lumotni kodlangan versiya bilan almashtiring.
Quyidagi misol so'rovning tanlangan qismini base64 kodlash bilan MIME encoded-word formatida kodlaydi va tanlovni kodlangan natija bilan almashtiradi. Bu tizimlar elektron pochta manzillari kabi yashirilgan qiymatlarni qanday qayta ishlashini sinash uchun foydali bo'lishi mumkin.
O'zgartirilgan so'rovlarni yuborish
So'rovlarni yuborishdan oldin ularni o'zgartiradigan, so'ngra javobni tahlil qiladigan yoki yangilaydigan custom action'lar yaratishingiz mumkin. Bu sarlavhalar, yo'llar yoki so'rovning boshqa komponentlarini o'zgartirganingizda server o'zini qanday tutishini sinash uchun foydali.
So'rovni o'zgartirish va yuborish uchun:
- So'rovning tegishli bo'limini oling.
- So'rov elementlarini o'zgartiring, olib tashlang yoki qo'shing.
- Yangilangan so'rovni
api()obyekti yordamida yuboring. - Javobni jurnalga yozing yoki yangilang.
Bu misol so'rovdan Authorization va Cookie sarlavhalarini olib tashlab, so'rovni yuborib, so'ngra javobni yangilash orqali kirishni boshqarish (access control) zaifliklarini aniqlashga yordam berishi mumkin:
Bu misol so'rov yo'lini o'zgartirib, so'rovni yuborib, so'ngra javobni yangilash orqali path traversal xatti-harakatini o'rganadi:
Race condition zaifliklarini tekshirish uchun takroriy so'rovlar yuborish
Server takroriy so'rovlarni qanday qayta ishlashini sinash uchun bir xil so'rovni bir necha marta yuboradigan, so'ngra javobdan chiqadigan natijani jurnalga yozadigan custom action yaratishingiz mumkin. Bu race condition zaifliklarini bir marta bosish bilan sinash imkonini beradi.
Quyidagi misol bir xil so'rovni bir necha marta parallel ravishda yuboradi, HTTP javob holat kodlarini ajratib oladi va ularni chiqishga yozadi. U HTTP/2 uchun single-packet hujumidan, HTTP/1 uchun esa oxirgi bayt sinxronizatsiyasidan foydalanadi:
Tashqi ma'lumotlarni olish
Tashqi ma'lumotlarni olish uchun tashqariga HTTP so'rovlar yuborishingiz mumkin.
Tashqi ma'lumotlarni olish uchun:
- Ma'lumot olinadigan URL manzilini belgilang.
- So'rovni
api()obyekti yordamida yuboring. - Sizga kerak bo'lgan ma'lumotlarni ajratib olish uchun javob tanasini tahlil qiling.
- Natijani chiqaring.
Bu misol PortSwigger'ning tadqiqot RSS lentasiga GET so'rovini yuboradi va eng so'nggi maqolaga havolani ajratib oladi:
Shell buyruqlarini bajarish
utilities().shellUtils() yordamida custom action'ingizdan shell buyruqlarini bajarishingiz mumkin. Bu tashqi vositalar va skriptlarni ishga tushirish yoki asosiy operatsion tizimdan ma'lumot to'plash uchun foydali bo'lishi mumkin.
Buyruqlarni bajarishning ikki usuli mavjud:
Ogohlantirish
dangerouslyExecute() ni foydalanuvchi nazorat qiladigan har qanday kirish ma'lumoti bilan ishlatishdan saqlaning. U butun satrni to'g'ridan-to'g'ri shell'ga uzatadi, bu esa buyruq inyeksiyasi (command injection) uchun ekspluatatsiya qilinishi mumkin. Dinamik argumentlarni xavfsiz qo'shish uchun execute() dan foydalaning va buyruq hamda har bir argumentni alohida satrlar sifatida uzating. Foydalanuvchi kiritgan ma'lumotni hech qachon birinchi argument sifatida ishlatmang, chunki u qaysi buyruq bajarilishini belgilaydi va kutilmagan dasturlarni ishga tushirish uchun ekspluatatsiya qilinishi mumkin. Buyruqni har doim qattiq kodlang va foydalanuvchi kiritgan ma'lumotni faqat alohida argumentlar sifatida uzating.
Buyruq qanday bajarilishini sozlash uchun ExecuteOptions obyektidan foydalaning. Mavjud sozlamalarning to'liq ro'yxati uchun API hujjatlariga qarang.
Bu misol joriy so'rovning hostiga traceroute buyrug'ini bajaradi va natijani jurnalga yozadi:
Bu misol autentifikatsiya uchun muhit o'zgaruvchilaridan foydalangan holda joriy AWS hisob ma'lumotlari haqida ma'lumot qaytaradigan aws sts get-caller-identity buyrug'ini bajaradi:
Aloqador sahifalar
- Fikr-mulohaza olish, ishingizni namoyish qilish va boshqa dasturchilar bilan bog'lanish uchun maxsus amalingizni PortSwigger Discord'dagi
#bambdaskanalimizda ulashing. - Maxsus amallaringizni hamjamiyat bilan ulashish uchun ularni doimiy o'sib borayotgan GitHub repozitoriyimizga qo'shing. Batafsil ma'lumot uchun Bambda'larni GitHub repozitoriyimizga yuborish sahifasiga qarang.