„CSRF“ arba „kodėl reikia naudoti naujausią programos versiją“

2 Comments

Nutiko taip jog reikėjo argumentuotai paaiškint kodėl reikia naudot naujausią forumą versiją ir kodėl reikia gaišt savo brangų laiką atnaujinant forumą(ar programinę įrangą). Sausa teorija paprastai nepasiekia adresato:) Reikėjo parodyt praktiškai, tiesiog kad nebeliktų klausimo „kodėl“. Aš nei su saugumu nei su piktavaliais neturiu nieko bendro ir gilių žinių toje srityje neturiu, viskas kas čia parašyta yra paimta iš google, tiesiog surinkta informacija ir pritaikyta praktikoj, tai nėra mano asmeninė ilgametė patirtis.

Iš wikipedia(laisvas vertimas):
Cross-site request forgery, taip pat žinoma kaip vieno spragtelėjimo ataka ar sesijos užvaldymas trumpinama kaip CSRF ar XSRF, tai yra kenkėjiško tipo pažeidžiamumas kai tinklapiui perduodamos komandos/užduotys nelyg jas perduotų patikimas naudotojas. Netaip kaip cross-site scripting (XSS) kuri išnaudoja naudotojo pasitikėjimą konkrečiu tinklapiu, CSRF išnaudoja tinklapio pasitikėjimą naudotoju(jo naršykle).

Praktinė pusė

Pažeidžiamumas phpbb2(sena versija, todėl reik naudot phpbb3) forume, visų gautų naudotojo AŽ pašalinimas(lygiai taip pat galim naudot pridėjimą į administratorių grupę ar šiaip naudotojo pašalinimą, bet pavyzdžiui naudoju nekaltą variantą).

Nueinam į google parašom „phpbb2 exploit“ ir renkamės iš milijono pažeidžiamumų, bet ne tame esmė 🙂 Darom prielaidą jog reikia padaryti tai kas neaprašyta arba aprašyta per daug glaustai. Įsidiegiam(arba nueinam į aukos forumą) phpbb2 forumą, susirandam norimą atlikti(kurį atliks auka) veiksmą, mano atveju tai visų AŽ šalinimas. Nueinam į puslapį kuriame galima trinti visas AŽ mano atveju http://localhost/phpBB2/privmsg.php?folder=inbox matom mygtuką „delete all“, mūsų atakos tikslas – padaryti taip jog forumas galvotų jog naudotojas paspaudė tą mygtuką:) Paspaudžiam jį, mūsų paklausia ar tikrai. Tai yra paskutinis žingsnis prieš atliekant veiksmą, jis mum ir reikalingas, galima naudoti tam skirtas programas arba paanalizuoti pradinį kodą ir pažiūrėti ką ir kur forumas siunčia, aš naudoju firefox tai tiesiog nueinu Firefox->Priemonės->Saityno kūrėjams->Tyriklis->Paspaudžiu ant pasirinkimo galimybės, pasirenku mygtuką „Yes“ ir matau reikalingą kodo dalį:

<input type="hidden" value="" name="mode"></input>
<input type="hidden" value="true" name="deleteall"></input
input type="submit" value="Yes" name="confirm"></input>
<input type="submit" value="No" name="cancel"></input>

Matau jog „post“ metodu siunčiami 3 duomenys(pastaba: aš dabar pagalvojau, jei nemokat programuot(web), nesugebat skaityt pradinio puslapio kodo tai aš rašau ne jums, be reikalo skaitot) :
„mode“, „deleteall“ ir „submit“ tai tikslas tampa aiškus – reikia forumui nusiųsti tuos duomenis, parašom(kalba pagal pageidavimą ir situaciją) maždaug:

<html><body onload=javascrtipt:document.xsrf.submit()>
<form action="http://localhost/phpBB2/privmsg.php?folder=inbox" method="post" name="xsrf">
<input type="hidden" name="mode" value=""/>
<input type="hidden" name="deleteall" value="true"/>
<input type="hidden" name="confirm" value="Yes"/>
</form></body></html>

kadangi sugebat skaityt pradinį kodą, tai manau čia viskas aišku. Išsaugom kaip „csrf.html“. Įkeliam tą failą kurnors į nemokamą talpinimo srevery ar šiaip kurnors. Dabar tikslas yra priversti naudotoją(prisijungusį prie forumo kuriame bus ištrintos AŽ) nueiti į tą puslapį, galim parašyt kažkokį tekstą kuris priverstų auką nueiti į tą puslapį arba vietoj html naudoti paveiksliuką(apie .htaccess ir failų tipus nepasakosiu) arba šiaip kažką sugalvot, tikri piktavaliai manau turi nepalyginamai daugiau socialinės inžinerijos žinių ir turi kažkokių patikimesnių būdų, aš sugalvojau tik tokius variantus. Vienu žodžiu tam forume parašom žmogui AŽ su tekstu:
Labas, paskaityk mano naują įrašą http://akmc.lt/csrf.html parašiau kaip žiūrėti mokamą pornografiją nemokamai:) “ žmogus paspaudžia ant nuorodos, jam parodomas tuščias langas(nes faile csrf.html neparašyta instrukcija kur rast nemokamos pornografijos, bet galim ir parašyt) ir forume kuris yra „auka“ pašalinamos visos to žmogaus AŽ 🙂 Išbandyta praktikoj, viskas veikia 🙂 Kai pašalinamos visos AŽ galima parašyt naują AŽ su tekstu „va todėl reikia naudot naujausią forumo/programinės įrangos versiją, senose žinomi ir viešai prieinami visi pažeidžiamumai ir kiekvienas norintis gali jais pasinaudoti“.

P.S. Aš rašiau su mintimi „naudokit naujausią programos versiją“, o ne „va instrukcija kaip galit pasijust hacker’iais ir pridaryt kažkam bėdų“.

Reikalingo turinio parsiuntimas

No Comments

Jau senai berašiau tai nusprendžiau parašyt:) Neturiu nei noro nei laiko daug galvot, todėl parašysiu tiesiog tai su kuo šiandien susidūriau, taip sakant kas ant liežuvio galo.

Kai kurie puslapiai siūlo turiny, bet ne tokia forma kokios mums reikia. Aš noriu turėt dainą kompe, o ne klausyt internete; aš noriu paveiksliukus žiūrėt su „feh“, o nespaudinėt pele ant visų iš eilės 🙂

Yra puslapis, jame yra dainų, man reikia tų dainų:

Nueinam http://www.algimantasbutnorius.lt/galerijos/dainos savaime aišku galim būtų atvert kokią nors garso redagavimo programą ir įrašyt(kaip šaltinį pasirenkam „waveout“) dainą paleidus ją internete, bet tai užtruktų labai ilgai. Vienu žodžiu per daug vargo, todėl reikia kito būdo.

Išsaugom puslapį ir pažiūrim kas ten rašoma(firefox turi įrankį „Tyriklis“, užvedam pelę ant mygtuko „groti“ ir iškart matom reikalingą info. Nereikia vargt su pradiniu kodu). Patyrinėjus pradinį kodą matom jog ten yra surašyti mp3 adresai, belieka juos pasiimti ir parsisiųsti failus 🙂

Mums reikalinga dalis yra

<object width="200" height="20" bgcolor="" data="/components/com_uploadmusic/mp3/dewplayer.swf?son=http://algimantasbutnorius.lt/components/com_uploadmusic/mp3/ZEME APVALI.mp3&amp;autoplay=0&amp;autoreplay=0" type="application/x-shockwave-flash">

Reikia iškrapštyti reikalingą tekstą:

sed -n "s/.*(http://algimantasbutnorius.lt/component/com_uploadmusic/mp3/.*mp3).*/1/p" a.htm>mp3.txt

Dabar reikia parsisiųsti tuos failus:

wget -i mp3.txt

Va ir padarėm tai ko reikėjo:)

Muzikos jau turim, dabar reikia paveiksliukų telefonui:)

Nueinam http://seclub.org susirandam paveiksliukų, matom daug kategorijų ir jose daug paveiksliukų…

…gymka mąstė, mąstė…

#!/bin/bash
#scenarijus parašytas senai, gali būt jog nebeveikia, bet parodyt principą tai pats tas:)
kategorijos=(75 18 20 42 21 43 55 24 71 34 51 45 49 22 67 68 26 47 69 27 28 66 29 70 31 25 54 50 52 30)
#url yra http://seclub.org/dn.php?d=1&q=3&r=9&c=75 c=kategorija, kiti skaičiai turbūt turinio tipas ir raiška, aš ten perdaug nesigilinau, ne tame esmė. Tai reikia surinkt visas kategorijas į vieną masyvą ir atlikt tuos pačius veiksmus su visom kategorijom. Tam parašom funkciją.

function parsiust()
{
kiek=$(wget -qO- "http://seclub.org/dn.php?d=1&q=3&r=9&c=$1"|sed -n 's/.*Всего: ([0-9]*).*/1/p')
#adrese yra puslapio numeris, todėl reik išsiaiškint kiek išvis yra tų puslapių. Kadangi yra eilutė kiek išvis yra paveiksliukų toj kategorijoj ir žinom jog kiekvienam puslapy po 10, tai belieka visų paveiksliukų skaičių padalint iš 10, jei skaičius nelygus tada +1.
kiek2=$(calc 22/10|sed 's/.*..*/1/')
if [ $kiek2 == '1' ]
then
puslapiu=$[$kiek/10+1]
else
puslapiu=$kiek2
fi

i="1"
while [ "$i" -le "$puslapiu" ]
do
wget -qO- "http://seclub.org/dn.php?d=1&q=3&r=9&c=$1"|grep 'http://files.seclub.org/.*'|sed 's/.*<a href="(http://files.seclub.org/pic.*)".*/1/'>>links.txt
echo $1:$i
#kiekvienam puslapy yra adresai į paveiksliukus, belieka juos iškrapštyt iš failo ir surašyt į vieną txt failą.
i=$[$i+1]
done
}
rm links.txt

for y in "${kategorijos[@]}"
do
parsiust $y
done
wget -i links.txt
#adresai išgauti ir surašyti į failą, belieka parsiųsti visus failus
rm links.txt

P. S. Savaime aišku aš negaliu užrašyt ką daryt kiekvienu atveju, nėra tokios formulės kuri tiktų visom įmanomom situacijom ir visiem puslapiams, tik patirtis gali padėt sugalvot kaip prieit prie kiekvieno puslapio. Šitam įraše aš tiesiog noriu parodyt kelis konkrečius pavyzdžius kaip padaryt tai ko jums reikia, aš nesiruošiu mokint galvot 🙂