Сега ще видим кой наистина е зъл хахор

'>
Значи подготвил съм нова тестова среда (предполагам не всичко е перфектно още, но ще се стараем в движение

'> ).
IP address: 78.90.217.9
Username: newuser
Password: hello
Port: 22 (ssh) 80 (web)
Каква е постановката?
Първоначално се логвате като потребител без особени права. Вашият път към лелеяният root-ски акаунт минава през 2 стъпки: първо трябва да се сдобиете с правата на малко по-привилегирован потребител. За целта е необходимо да "счупите" услуга, работеща с тях. Услугата е echo, писана е от мен с много фрапантна buffer overflow грешка. Целта е да напишете експлойт за нея, който да ви spawn-не shell. За да улесня малко процеса ще дам малко насоки:
* Най-важното е първо да разберете каква е големината на буфера, който се препълва. Услугата ще крашне ако буферът се препълни със стринг, по-голям от buffer_size+4
* По-умният човек ще знае как да се сдобие с binary-то, което ще се счупи. Това е почти единственият начин да се справите. Атаки могат да се правят директно върху същото binary като той или core файла може да се дебъг-ват с gdb и objdump. Другият вариант е да пробвате на сляпо, но силно вярвам че нищо няма да направите
* За задачката са необходими елементарни знания по C, но малко по-задълбочени по отношение на това какво представляват buffer overflows. Добро начало са разни whitepapers на packetstorm, имаше едно много добро четиво, мисля че авторът му се нарича aleph1.
* Експлойтът трябва да препълни буфера, да презапише return адреса така че изпълнението да прескочи на някакъв негов зъл код. Този код се нарича shellcode, предполагам ще ви трябва такъв shellcode, който прави нещо от сорта на execve("/bin/sh",...). Рекламирам отново сайта milw0rm.com , там има готови такива. Важно е да пробвате дали работят на тази платформа, най лесният начин е като го присвоите на променлива, да си дефинирате една функция например така:
int (*funkcia)() = (int(*)())shellcode;
Където funkcia() е функцията, char shellcode[] е шелкода.
извикването на funkcia() съответно или ще крашне поради някаква причина, или ще направи това, което трябва. Ще ви трябва шелкод, който може да прави това, а не да крашва

'>
* За да е малко по-интересно, използва се address space randomization. Аз бях писал по въпроса, но има много лесен начин това да се преодолее. Има много хубави статии по въпроса, предполагам гугъл ще ги изплюе ако търсите за defeating address space randomization, [vdso], linux-gate.so и т.н. Накратко търси се място, което съдържа ffe4 (jmp %esp) и адресът му се използва за това, с което се презаписва return адреса.
Ако се справите добре, получавате daemon-ски привилегии.
За да получите оттам нататък root-ски такива, трябва да проявите малко фантазия, да се разровите из файловите системи, да разгледате какво работи, рано или късно ще ви хрумне как да успеете

'> Не мисля да казвам нищо.
А, да, пуснал съм един уеб с една проста страница. Когато успеете да хахорнете системата, отбийте се през index-а да се разпишете.
За да не каже някой, че това изглежда невъзможно, далеч не е така. Ето го и доказателството

'>
http://imajr.com/Original.aspx?Id=kvm3-1147405Ако се сетя още нещо, ще пиша

'>