Faol skan tekshiruvi: ishlangan misol
Burp Scanner'ni o'zingizning skanerlash tekshiruvlaringizni yozish orqali kengaytirishingiz mumkin. Maxsus skanerlash tekshiruvi Burp o'zi aniqlay olmaydigan yangi xavfsizlik muammolari haqida xabar berishi mumkin.
Bu amaliy misolda biz faol maxsus skanerlash tekshiruvini yozish uchun Java'dan foydalanamiz. Faol tekshiruvlar zaifliklarni izlash maqsadida qo'shimcha, o'zgartirilgan so'rovlarni yuboradi. Ulardan faqat so'rovlar o'zgartirilganda namoyon bo'ladigan muammolarni aniqlash uchun foydalaning, masalan:
- SQL injection.
- Server tomonidagi shablon injeksiyasi (SSTI).
- Buyruq injeksiyasi.
Aloqador sahifalar
- Maxsus skanerlash tekshiruvlarini yozish bo'yicha qo'llanma.
- Maxsus skanerlash tekshiruvlarini yaratish.
- Maxsus skanerlash tekshiruvlarini sinash.
- BCheck asosidagi maxsus skanerlash tekshiruvlarini yaratish bo'yicha ko'rsatmalar uchun BCheck ta'riflari sahifasiga qarang.
- Tadqiqotchilarimiz va hamjamiyat tomonidan yaratilgan maxsus skanerlash tekshiruvlari misollarini ko'rish uchun Bambdas GitHub repozitoriysi - Maxsus skanerlash tekshiruvlari sahifasiga qarang.
Bu misol soxtalashtirilgan Origin sarlavhasi bilan ikkita keyingi so'rov yuboradi. Agar server bu sarlavhani Access-Control-Allow-Origin da aks ettirsa, u muammo haqida xabar beradi. Agar Access-Control-Allow-Credentials: true ham mavjud bo'lsa, muammoning jiddiyligi oshiriladi, Vary: Origin yo'q bo'lsa esa izoh yaratiladi:
1-qadam: Javob mavjudligiga ishonch hosil qiling
Har qanday ishni boshlashdan oldin tekshiruv ishlash uchun javob mavjudligini tasdiqlaydi. Agar javob mavjud bo'lmasa, u toza tarzda ishni yakunlaydi.
Kodning tahlili
requestResponseBurp sizning skriptingizga uzatadigan so'rov/javob juftligini ifodalaydi.hasResponsejavob qabul qilinganini tekshiradi.- Agar hech qanday javob qabul qilinmasa,
AuditResult.auditResult()bo'sh natija qaytaradi va hech qanday muammo haqida xabar berilmaydi.
2-qadam: Tasodifiy origin'lar yarating
Bu keshlash artefaktlaridan qochish va ilova ularni allowlist'ga qo'sha olmasligini ta'minlash uchun ikkita tasodifiy domen yaratadi.
Kodning tahlili
randomUtils().randomString(n)q1w2e3kabi qisqa tasodifiy yorliqlar yaratadi.- Ham
https, hamhttpsinovdan o'tkaziladi, chunki ba'zi serverlar ularni turlicha qayta ishlaydi.
3-qadam: Har bir origin bo'ylab aylanib chiqing
Bu quyidagi kod blokini ikki marta, tasodifiy hosil qilingan har bir origin uchun bir martadan ishga tushiradi.
Kodning tahlili
new String[]{evilHttps, evilHttp}ikkita soxta origin'ni saqlovchi yangi massiv yaratadi.for (var origin : ...)har bir origin'ni navbat bilan tayinlaydigan for-each sikli hisoblanadi.
4-qadam: O'zgartirilgan so'rovlarni yuboring
Bu so'rovni ikki marta, har safar soxtalashtirilgan Origin sarlavhasi bilan yuboradi. Agar server javob bermasa, sikl keyingi origin'ga o'tadi.
Kodning tahlili
requestResponse.request()HTTP so'rov obyektini oladi.withRemovedHeader("Origin")aslOriginsarlavhasini olib tashlaydi.withAddedHeader("Origin", origin)so'rovga soxta qiymatliOriginsarlavhasini qo'shadi.http.sendRequest(...)o'zgartirilgan so'rovni yuboradi va yangi so'rov-javob obyektini (rr) qaytaradi.if (!rr.hasResponse())server javob berganini tekshiradi.continuejavob bo'lmagan taqdirda siklning qolgan qismini o'tkazib yuboradi va keyingi origin'ga o'tadi.
5-qadam: Javob sarlavhalarini tekshiring
Bu server soxtalashtirilgan Origin sarlavhasini qanday qayta ishlaganini ko'rish uchun javob sarlavhalarini o'rganadi.
Kodning tahlili
rr.response().headersbarcha javob sarlavhalarini oladi.toString().toLowerCase()sarlavhalarni bitta kichik harfli satrga aylantiradi, shunda registrga sezgir bo'lmagan holda qidirishingiz mumkin.- Agar server soxtalashtirilgan origin'ni
Access-Control-Allow-Originda takrorlasa,reflecttrue bo'ladi. - Agar javob
Access-Control-Allow-Credentials: trueni ham o'z ichiga olsa,credstrue bo'ladi. - Agar javob
Vary: Originni o'z ichiga olsa,varytrue bo'ladi.
6-qadam: Origin aks ettirilgan bo'lsa, muammo qaytaring
Bu server hisob ma'lumotlariga ruxsat berishiga qarab topilmaning jiddiyligini belgilaydigan o'zgaruvchilarni yaratadi va Vary: Origin sarlavhasi yo'q bo'lsa izoh qo'shadi. So'ngra u muammo o'zgaruvchilarini AuditIssue ichiga o'raydi va o'sha muammoni saqlovchi AuditResult ni qaytaradi.
Kodning tahlili
if (reflect)server tasodifiy origin'niAccess-Control-Allow-Originda aks ettirganini tekshiradi.creds ? AuditIssueSeverity.HIGH : AuditIssueSeverity.MEDIUMhisob ma'lumotlariga ruxsat berilgan bo'lsa jiddiylikniHIGHga, aks holdaMEDIUMga o'rnatadi.var note = vary ? "" : " (missing Vary: Origin)"Vary: Originsarlavhasi yo'q bo'lganda ogohlantiruvchi izoh qo'shadi.AuditIssue.auditIssue(...)zaiflik hisobotini quradi.auditIssueni tashkil qiluvchi elementlarning tahlili uchun Natijalar haqida xabar berish sahifasiga qarang.
7-qadam: Sarlavha mavjud bo'lganda muammo qaytarmang
Agar tekshiruv aks ettirishni aniqlamagan bo'lsa yoki 1-qadamda erta yakunlangan bo'lsa, u bo'sh natija qaytaradi va hech qanday muammo haqida xabar berilmaydi.