Jasoni vastus on õige lahendus. Tahtsin siiski anda alternatiivse vastuse ilma Pythonita, vaid terminalist. Parema automatiseerimise huvides eelistatakse alati IMO Pythoni, kuid mõnikord soovite lihtsalt ilma lisatööriistadeta kiiresti ära kasutada.
Seda silmas pidades oleks inimese loomulik katse umbes järgmine:
kaja -e "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \ xbe \ xba \ xfe \ xca \ x0a" | nc pwnable.kr 9000
Lõppude lõpuks on see Pythonis ülaltoodud koodi täpne koopia, eks? Välja arvatud see, et server palub teistsugust erinevust:
*** tuvastatud pinu purunemine ***: / home / bof / bof lõpetatud ülevoolavad mind:
Nii , milles on siis probleem?
Mõelge korraks ülaltoodud käsule. See saadab kaugprotsessi stdinile hulga tähemärke lootuses käivitada / bin / sh. Kuid viga tervitab meid endiselt. Selle põhjuseks on see, et saadame õige kasuliku koormuse, kuid siis peatume . EOF. / bin / sh-l pole sisendit, nii et käivitamine jätkub järgmisele reale, kuni virnakaitse käivitub.
Põhjus, miks Python töötab, ja käsk echo
mitte, on järjepidevus. Python ei sulge voogu, samas kui terminaliversioon seda teeb.
Selle tõestamiseks on siin terminali ärakasutamise veidi pikem versioon, mis tegelikult töötab:
kaja -e "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \ xbe \ xba \ xfe \ xca \ x0a" > payload.bin
Kõigepealt salvestame täpse kasuliku koormuse nagu varem, sellisel juhul faili nimega payload.bin . Järgmisena käivitame järgmise käsu:
cat payload.bin - | nc pwnable.kr 9000
(Pange tähele - pärast payload.bini, pärast seda, kui kass on kasuliku koormuse.bin sisu välja andnud, hakkab ta stdini kaudu sisestama kõike, mis sisse tuleb)
Ja voila! Nüüd olete tegelikult sees. Võite proovida sisestada shellikäske, näiteks cat flag
või touch / tmp / pwned
või mis iganes soovite.
Ohoo! See oli pikk. Loodetavasti aitab see teave teisi segaduses olevaid hingi, nagu see aitas mind mõnda aega tagasi.