Thông tin tài liệu:
Hiện nay các ứng dụng WEB dùng CGI rất nhiều,nó trở nên rất phổ biến và cũng được các hacker quan tâmvà không ít các lổi bảo mật được tìm thấy .Bạn muốn hack web sữ dụng CGI thì bạn phải biết chút ít về ngônngữ PERL.Nếu bạn không biết gì về PERL thì tôi khuyên bạn nên đi tìm một cuốn sách nói về PERL màđọc,điều này chắc là không khó đối với bạn.
Nội dung trích xuất từ tài liệu:
CGI hacking CGIhackingtrangnàyđãđượcđọc lầnHiệnnaycácứngdụngWEBdùngCGIrấtnhiều,nótrởnênrấtphổbiếnvàcũngđượccáchackerquantâmvàkhôngítcáclổibảomậtđượctìmthấy.BạnmuốnhackwebsữdụngCGIthìbạnphảibiếtchútítvềngônngữPERL.NếubạnkhôngbiếtgìvềPERLthìtôikhuyênbạnnênđitìmmộtcuốnsáchnóivềPERLmàđọc,điềunàychắclàkhôngkhóđốivớibạn.TrướctiêntahãyxemcáchthứclàmviệtcủaGETvàPOSTnhưthếnào:GET:GETlàphươngphápmặtđịnhđểđệtrìnhcácform,tuylàphươngphápmặtđịnhnhưngcómộtvấnđềvớiviệtsữdụngGET.PhươngphápnàythêmthôngtinchứatrongformvàochuổivấntinURL(,nếuURLquádàithìchươngtrìnhtựđộngxénbớtnêngâyrasựđệtrìnhkhôngchínhxác.Thôngtinđựclấytừbiếnmôitrường$ENV{QUERY_STRING}vídụ:#script.cgi?sometext#sẽlà:$file=sometext$file=$ENV{QUERY_STRING};#script.cgi?some&text#sẽlà:$name=someand$file=text($name,$file)=split(/&/,$ENV{QUERY_STRING});(chúý:TôikhuyênbạnbiếtchútítvềPERLchodùbạnkhônglậptrìnhbằngPERL,vàđiểnhìnhlàbàiviếtnàybạnhiểunónhưthếnàovídụlệnhsplit()làmnhưthếnào...)Vànếunhiềubiếnthìnhưsau:@pair=split(/&/,$ENV{QUERY_STRING});foreach$pair(@pairs){($name,$value)=split(/=/,$pair);#usedtomake+intospaces$value=~tr/+//;#usedtoconverturlencoding(hex)toascii:$value=~s/%([afAF09][afAF09])/pack(C,hex($1))/eg;$FORM{$name}=$value;#script.cgi?name=some&file=text#sẽlà:$FORM{name}=someand$FORM{file}=text}TrênđâylànhữngvídụđơngiảnvềphươngthứcGET.vàHTTPcódạngnhưsau:GET/script.cgi?some&textHTTP/1.0POST:POSTlàphươngphápthưhaidùngđểđẹtrìnhcácformvàđangđươcsữdụngrộngrảinhất,vìnókhônghạnchếlượngdữliệutruyềnđếnserver.Đểđọcdữliệutruyềnđếnserver,trướctiênbạnphảixácđịnhchiềudàicủanó,vàthựchiệnđiềunàybằngcáchquaiếnmôitrườngCONTENT_LENGTHvàsauđóbạncóthểđọcsốbytechínhxáctrongmộtbiếnkhác,chuổiđượcmãhoábởiURLdođóbạncầnphântíchvàgiảimãnó.ĐâylàvídụcủaHTMLđượcsubmitformvớihaibiếnnamevàfile:Vàtấtcãcácformdữliệusẽđượcđặttrong:into$FORM{nameoffield}đọcPOSTdata:$bufferread(STDIN,$buffer,$ENV{CONTENT_LENGTH});@pairs=split(/&/,$buffer);foreach$pair(@pairs){($name,$value)=split(/=/,$pair);#usedtomake+intospaces$value=~tr/+//;#usedtoconverturlencoding(hex)toascii$value=~s/%([afAF09][afAF09])/pack(C,hex($1))/eg;#thiswouldset$FORM{name}=whatevertheuserputinthetextfield#and$FORM{file}toprofile.txt$FORM{$name}=$value;}LàmviệccủaPOSTphầnnàođórấtgiốngGETnhưngbạnsữdụnghàmread()đểđọcvàoSTDINvànósẽsendphầndữliệuchứatrongphươngthứcPOST.CONTENT_LENGTHdùngđểgọiscriptđểđọcdữliệu,nóbaogồmtrongphươngthứcPOST.Mộtsốscriptsữdụngphưongthứcnàycódạngnhưsau:>đâylàphầnẩncủamãnguồnURLmàkhihackermuốnxemthìkhôngkhó,khianhpháthiệnracodecódạngnhưthếthìcóthểđổilạinhưsau:VàkhinhấnnútsubmitthìdữliệusẽđượcphuơngthứcPOSTgởiyêucầutớiHTTPrequery,vậylàbạncóđượcfilepasswd,thậmchíchỉdùngtelnetcũnglấyđược.Đâylàphươngphápdểdàngđểlấyđượcdữliệuquantrongcủaserverquavùngẩncủahtml.Cónghĩalàbạncóthểbypassbấtkỳloạicliensidesecurity,chẵnghạnnhưjavascriptcheck,http_referrervalue,formhtml...ĐừngbaogiờtrôngchờvàodữliệuđươcchuyểnđếnquaphươngthứcPOSThơnnữabạnsẽcóđượcdữliệutừGET,vànósẽthayđổibởiattackerhọcóthểđọcđượcdữliệucủabạntừHTTPRFCvídụdùngtelnet:POST/script.cgiHTTP/1.0ContentLength:23ContentType:application/xwwwformurlencodedvalue=blah&another=blehPOSTvàGETlàhaiphươngthứcgiúpnhiềuchohackerkhaithácthôngtincủahệthốngvàmộtmodulquantrọngnữalàCGIcũngcólợirấtnhiều.CGI:CGIlàmộttiêuchuẩnđểtạocácchươngtrìnhngoạichẵnghạnnhưcácscriptperlvớimộtHTTPserver,cácthuậtngữcommonvàgatewayámchỉcácbiếnvàquyướcthôngthườngđượcdùngđểtruyềnthôngtinnàyqualạiHTTPserver.CGIchophépbạnsữdụngchươngtrìnhtuỳbiếnnàyđểđịnhdạngvàxữlýdữliệuxuấtsangcácbộtrìnhduyệt.MổilầnngườidùngyêucầumộtURLtươngứngvớimộtScriptCGI,WEBserverviệndẩnchươngtrình,truyềndẩnthôngtìntừbộtrìnhduyệtđếnscript.ThôngtinnàybaogồmcácheaderHTTPkhácnhauvàđượcgởitừtrìnhduyệtyêucầuvàthôngtintừđượctruyềncùngvớiURLchẵnhạnnhưthôngtinchuổiquery.SauđóscriptCGIđọcvàxữlýđưarađápứngthíchhợpvớithôngtinnày:xemvídụ:#$valueisanewCGI$value=CGI>new();$file=$value>param(file);#script.cgi?name=some&file=text$name=$value>param(name);#wouldmake$name=someand$file=textCOOKIE:Chắctôikhỏinóicácbạncũngbiết.ENV:AUTH_TYPE:KiểuxácthựcdùngđểhiệulựchoángườidùngCONTENT_LENGTH:KíchcởcủanộidungfileđượcchoraCONTENT_TYPE:LoạinộidungmàdữliệuđượcgởiCATEWAY_INTERFACE:PhiênbảnCGImàserverhổtrợHTTP_ACCEPT:LoạiMINEmàtrìnhduyệtchấpnhậnchoyêucầunàyHTTP_USER_AGENT:TênhoànchỉnhbộnhậndạngcảubộtrìnhduyệtPATH_INFO:ThôngtinđườngdẩnPATH_TRANSLATED:PATH_INFOđượcbiêndịchQUERY_STRING:Bấtkỳtextsau?REMOTE_ADDR:ĐịachỉIPcủabộtrìnhduyệtyêucầuREMOTE_HOST:MáychủcủabộtrìnhduyệtthựchiệnyêucầuREQUEST_METHOD:PhươngphápdùngđạtyêucầuchẵnhạnGEThayPOSTSCRIPT_NAME:Đườngdẩnđếnscriptđượcthựcthi.SERVER_NAME:Tênmáychủcủaserver.SERVER_PORT:CổngmàmáychủliênlạcSERVER_PROTOCOL:Giaothứcvàphiênbảnđượcsữdụngtrongcâutrãlờicủaserver.SERVER_SOLLTWARE:Tênvàphiênbảnphầnmềmser ...