a13x4nd7u Posted January 10, 2009 Report Posted January 10, 2009 Urmatorul program compilat si rulat pe Linux va bloca calculatorul. Merge doar daca este rulat de pe root. Este facut de mine si contine parti luate din kernelul Linux.Porgramul schimba in continuu ledurile de la tastatura blocand tastatura si calculatorul.Daca sunt sterse comentariile din main programul va schimba cate un led la fiecare sir de caractere mai mic de 1000 de caractere citit. (daca introduceti un sir de caractere mai mare veti obtine buffer overflow)#include <stdio.h>#include <sys/perm.h>#ifdef BSD#include <machine/sysarch.h>#include <machine/cpufunc.h>#else#include <sys/io.h>#endif#define KBD_STATUS_REG 0x64#define KBD_DATA_REG 0x60#define KBD_CMD_SET_LEDS 0xED#define KBD_STAT_IBF 0x02int kdb_send(unsigned char byte){ while(inb(KBD_STATUS_REG) & KBD_STAT_IBF) ; outb(byte, KBD_DATA_REG); return 0;}//0x01 = num lock//0x02 = caps lock//0x03 = scroll lockint leds(int f){ static int flags; flags ^= f; kdb_send(KBD_CMD_SET_LEDS); kdb_send((unsigned char)flags);}int activate_io_ports(void){ #ifdef BSD if(i386_set_ioperm(0x60,5,1) == -1) return -1;#else if(iopl(3) == -1) return -1;#endif return 0;}int l;int main(int argc,char **argv){ //char c[1000]; if(getuid() != 0) return -1; if(activate_io_ports() != 0) return -1; while(1) { if(l == 0x01) l=0x02; else if(l == 0x02) l=0x04; else l=0x01; leds(l); //scanf("%s",&c); } return 0;}Acest program este prezentat in scop educativ. Nu sunt responsabil pentru ceea ce faceti cu el. Quote
OrIaX Posted January 10, 2009 Report Posted January 10, 2009 Nu se pote. Esti cel mai tare om care poate sa puna titluri . Cum reusesti? [/off]Daca e facut de tine si e o vulnerabilitate descoperita de tine felicitari [/on] Quote
a13x4nd7u Posted January 10, 2009 Author Report Posted January 10, 2009 Nu prea ma pricep la titluri.Nu o consider vulnerabilitate sau chiar daca este nu este folositoare. E un rahat cu care schimbi ledurile si poti bloca calculatorul.Dar este luat de mine si facut de mine cu parti din kernelul Linux.In schimb acest program este vulnerabil (buffer overflow, cum am mai spus) si poti deschide un shell cu ajutorul lui daca il compilezi dupa ce ai sters commenturile din "int main".EDIT:Pe linux se poate bloca cat de cat calculatorul si cu:int main(int argc,char** argv){ while(1) ; return 0;} Quote
wvw Posted January 10, 2009 Report Posted January 10, 2009 Dragut. Dar cum sta treaba cu #ifdef BSD? Sa inteleg ca merge si pe sisteme de operare inrudite cu GNU/Linux? EDIT:Pe linux se poate bloca cat de cat calculatorul si cu:int main(int argc,char** argv){ while(1) ; return 0;}Desigur. Se numeste fork bomb ;-) Quote
a13x4nd7u Posted January 10, 2009 Author Report Posted January 10, 2009 Da, merge foarte bine si pe sisteme inrudite cu cu GNU/Linux. Dar nu mi se pare mare lucru. Eu eram fericit ca am inteles kernelul Linux. Si de mult voiam sa fac asta pentru ca mi se parea ceva deosebit sa poti schimba ledurile de la tastatura fara sa apesi Num Lock, Caps Lock sau Scroll Lock, sa te joci cu ele si acum am reusit. EDIT:Cred ca gresesti.Eu stiam ca fork bomb inseamna sa folosesti fork() in while si sa iti creeze procese la fel cu cel curent in memorie. Bine ca mi-ai dat idei. Poate fi combinat cu fork bomb si atunci chiar ca blocheaza tot. Quote
wvw Posted January 10, 2009 Report Posted January 10, 2009 (edited) De la programelul asta pana la intelegerea kernelului Linux ii cale lunga. Este bine ca te intereseaza subiectul (any kernel == truly l337 stuff ).Iti recomand niste carti: Understanding The Linux Kernel (sau Linux Kernel in a Nutshell pentru o introducere blitz) Linux Device DriversEDIT:Cred ca gresesti.Eu stiam ca fork bomb inseamna sa folosesti fork() in while si sa iti creeze procese la fel cu cel curent in memorie. Bingo. Stiam eu ca vazusem undeva bucata aia de cod; in wiki este apelat fork(). La tine este doar o bucla infinita. Edited January 10, 2009 by wvw Quote
a13x4nd7u Posted January 10, 2009 Author Report Posted January 10, 2009 Eu nu glumesc. M-am uitat in codul kernelului ca dobitocul cateva saptamani pana sa inteleg ce face si sa gasesc anumite parti mai importante din el. Desi poate ca mai am mult de invatat.Multumesc pentru carti. EDIT:Am o idee. As putea ajuta la o distributie Linux a RST cu toate programele importante de securitate gata instalate. (inclusiv programe de windows rulate cu Wine)Dar cred ca la inceput o sa fie foarte greu pentru ca nu am mai facut asa ceva si nu o sa iasa mare lucru. Dar sunt sigur ca pana la urma o sa merite munca. Quote
wvw Posted January 10, 2009 Report Posted January 10, 2009 (edited) Eu nu glumesc. M-am uitat in codul kernelului ca dobitocul cateva saptamani pana sa inteleg ce face si sa gasesc anumite parti mai importante din el. Desi poate ca mai am mult de invatat.Strong. Astfel te-ai convins ca versiunea 2.6 a kernelului este dracoasa. Ar fi o idee sa incepi cu o versiune mai veche/mai putin complexa daca vrei sa intelegi si sa faci Linux haxxing. Studiaza situl asta: http://kernelnewbies.org/Ah... si nu uita de assembler. Edited January 10, 2009 by wvw Quote
a13x4nd7u Posted January 10, 2009 Author Report Posted January 10, 2009 Strong. Astfel te-ai convins ca versiunea 2.6 a kernelului este dracoasa. Ar fi o idee sa incepi cu o versiune mai veche/mai putin complexa daca vrei sa intelegi si sa faci Linux haxxing. Studiaza situl asta: http://kernelnewbies.org/Ah... si nu uita de assembler.Imi place asamblarea, stiu baza desi am probleme la programele mai complexe.EDIT:Gata, am facut destul offtopic. Multumesc pentru linkuri si carti. Quote
pitagora Posted March 2, 2009 Report Posted March 2, 2009 Nu prea ma pricep la titluri.Nu o consider vulnerabilitate sau chiar daca este nu este folositoare. E un rahat cu care schimbi ledurile si poti bloca calculatorul.Dar este luat de mine si facut de mine cu parti din kernelul Linux.In schimb acest program este vulnerabil (buffer overflow, cum am mai spus) si poti deschide un shell cu ajutorul lui daca il compilezi dupa ce ai sters commenturile din "int main".EDIT:Pe linux se poate bloca cat de cat calculatorul si cu:int main(int argc,char** argv){ while(1) ; return 0;}nu vad de ce s-ar bloca daca faci treaba aia? Atata timp cat procesul respectiv nu ruleaza pe real time un alt process ii da kill lejer. ctrl+alt+F1,2,3,4.... sa treci la alta consola si dai kill Daca pui fork in bucla e alta mancare de peste pt ca umplii RAM-ul cu procese la infinit. Faza este ca nu e chiar infinit. In kernel ai limita de threaduri si de procese. Una din temele de laborator din faculta a fost sa aflam care e aceasta limita Iti dai cum s-a testat nu? Quote