OpenBSD layihəsi tərəfindən hazırlanmış poçt serverində
İki hücum variantı təklif olunur. Birinci seçim standart OpenSMTPD konfiqurasiyasında işləyir (yalnız localhost-dan sorğuları qəbul edir) və təcavüzkar serverdə (məsələn, hosting sistemlərində) yerli şəbəkə interfeysinə (döngü) daxil ola bildikdə problemi yerli olaraq istifadə etməyə imkan verir. . İkinci seçim OpenSMTPD xarici şəbəkə sorğularını qəbul etmək üçün konfiqurasiya edildikdə baş verir (üçüncü tərəfin poçtunu qəbul edən poçt serveri). Tədqiqatçılar həm OpenBSD 6.6-a daxil olan OpenSMTPD versiyası, həm də digər əməliyyat sistemləri üçün portativ versiya ilə (Debian Testində aparılır) uğurla işləyən istismarın prototipini hazırlayıblar.
Problem smtp_mailaddr() funksiyasındakı xətadan qaynaqlanır, hansı ki, “MAIL FROM” və “RCPT TO” sahələrində göndərici/qəbuledicini təyin edən və əlaqə zamanı ötürülən dəyərlərin düzgünlüyünü yoxlamaq üçün çağırılır. poçt serveri ilə. E-poçt ünvanının “@” simvolundan əvvəl gələn hissəsini yoxlamaq üçün smtp_mailaddr() funksiyası çağırılır.
valid_localpart(), RFC 5322 tələb etdiyi kimi "!#$%&'*/?^`{|}~+-=_" simvollarını qəbul edir (MAILADDR_ALLOWED).
Bu halda, sətirdən birbaşa qaçış yalnız “!#$%&'*?`{|}~” (MAILADDR_ESCAPE) simvollarını əvəz edən mda_expand_token() funksiyasında yerinə yetirilir. Sonradan, mda_expand_token()-də hazırlanmış xətt 'execle("/bin/sh", "/bin/sh", "-c", mda_command,...' əmrindən istifadə edərək çatdırılma agentinə (MDA) zəng edərkən istifadə olunur. . /bin/sh vasitəsilə mbox-a məktublar yerləşdirildikdə, “/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}” sətri işə salınır, burada “%” dəyəri {mbox.from}” “MAIL FROM” parametrindən qaçış datasını ehtiva edir.
Zəifliyin mahiyyəti ondan ibarətdir ki, smtp_mailaddr() məntiqi xətaya malikdir, buna görə boş domen e-poçta göndərilərsə, ünvanın “@” hərfindən əvvəlki hissəsində etibarsız simvollar olsa belə, funksiya uğurlu yoxlama kodunu qaytarır. . Bundan əlavə, sətir hazırlayarkən, mda_expand_token() funksiyası bütün mümkün qabıq xüsusi simvollarından qaçmır, ancaq e-poçt ünvanında icazə verilən xüsusi simvollardan qaçır. Beləliklə, əmrinizi yerinə yetirmək üçün e-poçtun yerli hissəsində “;” simvolundan istifadə etmək kifayətdir. və MAILADDR_ESCAPE dəstinə daxil edilməyən və buraxılmayan boşluq. Misal üçün:
$nc 127.0.0.1 25
SALAM professor.falken
POSTA:<;sleep 66;>
RCPT TO:
MƏLUMAT
.
Çıxın
Bu seansdan sonra OpenSMTPD, mbox-a çatdırıldıqda, qabıq vasitəsilə əmri işə salacaq
/usr/libexec/mail.local -f ;yuxu 66; kök
Eyni zamanda, hücum imkanları ünvanın yerli hissəsinin 64 simvoldan, xüsusi simvollardan isə '$' və '|'-dən çox olmaması ilə məhdudlaşır. qaçarkən ":" ilə əvəz olunur. Bu məhdudiyyəti keçmək üçün biz məktubun gövdəsinin giriş axını vasitəsilə /usr/libexec/mail.local işlədildikdən sonra ötürülməsindən istifadə edirik, yəni. Ünvanı manipulyasiya etməklə siz yalnız sh əmr tərcüməçisini işə sala və məktubun gövdəsini təlimatlar toplusu kimi istifadə edə bilərsiniz. Xidmətin SMTP başlıqları məktubun əvvəlində göstərildiyindən, onları keçmək üçün oxu əmrindən istifadə etmək tövsiyə olunur. İşləyən istismar bu kimi görünür:
$nc 192.168.56.143 25
SALAM professor.falken
MAIL FROM:<; i in 0 1 2 3 4 5 6 7 8 9 abcd üçün; oxuyun r;done;sh;exit 0;>
RCPT TO:[e-poçt qorunur]>
MƏLUMAT
#0
#1
...
#d
WOPR-də i üçün; et
echo -n "($i) " && id || fasilə
tamamlandı > /root/x."`id -u`.""$$"
.
Çıxın
Mənbə: opennet.ru