Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Парсер уязвистей php. (https://forum.antichat.xyz/showthread.php?t=139892)

pampom 07.09.2009 10:09

Парсер уязвистей php.
 
Короче давно была темка кто то писал не помню может гема.
Фишка такая указываешь папку текст парситься на уязвимые функции.

типо
include(
require(
mysql_connect(
system(
exec(
fopen(
fwrite(

и еще короче смысл понятен просто стоит щас задача перелопатить движок на 14 метров php кода.

В
сем спасибо.

m0Hze 07.09.2009 15:44

Поверь мне,скрипт этого не сделает лучше человека.Так что это - полнейший бред.
Потрать 1 час времени на это,и незачем извращаться.

LzD 07.09.2009 15:50

поиск по форуму ога? автор Razor
http://raz0r.name/releases/php-bug-scanner/

Qwazar 07.09.2009 15:51

Цитата:

Сообщение от m0Hze
Поверь мне,скрипт этого не сделает лучше человека.Так что это - полнейший бред.
Потрать 1 час времени на это,и незачем извращаться.

Не бред, когда речь идёт о 14 мб кода. :) Только понятно что качество такой проверки будет куда ниже ручной. В любом случае эти сканнеры нужны лишь как вспомогательный инструмент.

Такой скрипт былу у Raz0r'а:
http://raz0r.name/releases/php-bug-scanner/

LzD 07.09.2009 15:52

Цитата:

Сообщение от Qwazar
Не бред :) Когда речь идёт о 14 мб кода, только понятно что качество такой проверки будет куда ниже ручной.

Такой скрипт былу у Raz0r'а:
http://raz0r.name/releases/php-bug-scanner/

:( опаньки...

m0Hze 07.09.2009 16:19

Цитата:

Сообщение от Qwazar
Не бред, когда речь идёт о 14 мб кода. :) Только понятно что качество такой проверки будет куда ниже ручной. В любом случае эти сканнеры нужны лишь как вспомогательный инструмент.

Такой скрипт былу у Raz0r'а:
http://raz0r.name/releases/php-bug-scanner/

Спорить с тобой конечно не намерен,но все-же,там 14м кода,но требуют проверки максимум 70%,из них - 50% функции и классы(судя по весу).Так что проверять там очень много не нужно.Если есть небольшой опыт работы с PHP и уязвимостями,которые встречаються наиболее часто.И лопатить придеться меньше,и будет намного надежнее щипать код руками =)
Но кто как конечно считает,если ТС удобно парсить скриптом - дело барина.

LzD 07.09.2009 16:22

Цитата:

Сообщение от m0Hze
Спорить с тобой конечно не намерен,но все-же,там 14м кода,но требуют проверки максимум 70%,из них - 50% функции и классы(судя по весу).Так что проверять там очень много не нужно.Если есть небольшой опыт работы с PHP и уязвимостями,которые встречаються наиболее часто.И лопатить придеться меньше,и будет намного надежнее щипать код руками =)
Но кто как конечно считает,если ТС удобно парсить скриптом - дело барина.

дело в удобстве имхо. к стати в утлите можно добовлять свои "узкие места" для того чтобю обращать на них пристальное внимание )

m0Hze 07.09.2009 16:23

Цитата:

Сообщение от LzD
дело в удобстве имхо.

Неудобно спать на потолке.Тут дело в безопасности.

LzD 07.09.2009 16:27

Цитата:

Сообщение от m0Hze
Неудобно спать на потолке.Тут дело в безопасности.

если в безопасности- то тут нужен опыт. :D

PS узнаю "старую гвардию"- не понравился ответ- значит спишь на потолке... кросава :cool:

antowen 08.09.2009 19:41

Есть отличная тулза в помощь ручному поиску багов - phpxref

Собирает файлы из директорий и составляет отчёт в статичном хтмл, где перечислены все константы, функции и классы. Потрясная штука.

Вот так например выглядит разобранный wordpress.

[Raz0r] 08.09.2009 20:19

graudit - bash-скрипт, использующий grep по встроенной базе потенциально уязвимых функций. Набор функций в архиве довольно скромный, но его всегда можно расширить.
http://www.justanotherhacker.com/2009/07/graudit-version-11-is-out.html

SQLHACK 11.09.2009 02:05

Вот вам мною написаная проверялка.

Вообще она рекурсивно проверяет сразу все файлы в папке и позволяет сильно экономить время при разборе двига. Ищет злые функции и выдает HTML отчет. пользуясь им как картой можно быстро осмотреть весь двиг на простые косяки.

PHP код:

<?php

set_time_limit
(0);

$paths = array();
$exttocheck = array("php""php3""php4""php5""php6""inc");
$faults = array("codeexec""including""files""globalization""phpinfo");
$dir "путь со слешом на конце до папки";
read($dir);

foreach(
$paths as $path){
    
$r strrpos($path".");
    
$ext substr($path$r 1);
    if(
in_array($ext$exttocheck)){
        
GenerateHtmlOut($pathcheckfile($path));
    }
}

function 
checkfile($path){
    global 
$faults;
    
$errors = array(
                    
"codeexec" => array(
                            
"#^.*?[^\w]array_map[\s]*\([^,]*\\$[^,],.+\)[\s]*;.*$#im",
                            
"#^.*?([^\w]array_filter|[^\w]array_reduce|[^\w]array_walk)[\s]*\(.+?,.*\\$.+?\)[\s]*;.*$#im",
                            
"#^.*?[^\w]assert[\s]*\([\s]*\\$.+?\)[\s]*;.*$#im",
                            
"#^.*?[^\w](call_user_func|call_user_func_array)[\s]*\([^,]*\\$.*?\)[\s]*;.*$#im",
                            
"#^.*?[^\w]dl[\s]*\(.*?\)[\s]*;.*$#im",
                            
"#^.*?([^\w]create_function|[^\w]eval|[^\w]exec|[^\w]passthru|[^\w]shell_exec|[^\w]system)[\s]*\([^,]*\\$.+?\)[\s]*;.*$#im",
                            
"#^.*?[^\w]preg_replace[\s]*\(([\"'])(.)(.*)\\2([imxsu]*)e([imxsu]*)\\1[\d\D]+?\)[\s]*;.*$#im",
                            
"#^.*?[^\w]preg_replace_callback[\s]*\(([\"'])(.)(.*)\\2(.*)\\1[^)]+\)[\s]*;.*$#im"
                        
),
                    
"including" => array(
                            
"#^.*?([^\w]include|[^\w]include_once|[^\w]require|[^\w]require_once|[^\w]virtual)[\s]*\([\s]*\\$.+?\)[\s]*;.*$#im"
                        
),
                    
"files" => array(
                            
"#^.*?[^\w]copy[\s]*\([^,]*\\$[^,]+,.*\\$.*?\)[\s]*;.*$#im",
                            
"#^.*?[^\w]copy[\s]*\([^,]+,.*\\$.*?\)[\s]*;.*$#im",
                            
"#^.*?[^\w]copy[\s]*\([^,]*\\$[^,]+,[^)]+\)[\s]*;.*$#im",
                            
"#^.*?[^\w]fsockopen[\s]*\([^,]+,.*\\$.*?\)[\s]*;.*$#im",
                            
"#^.*?[^\w]curl_init[\s]*\(.*?\)[\s]*;.*$#im",
                            
"#^.*?([^\w]file|[^\w]file_get_contents|[^\w]mkdir|[^\w]opendir|[^\w]rmdir|[^\w]readfile|[^\w]highlight_file|[^\w]unlink)[\s]*\(.*?\\$.+?\)[\s]*;.*$#im"
                        
), 
                    
"globalization" => array(
                            
"#^.*?[^\w]extract[\s]*\([^,]*\\$[^,]+(,((.*\\$.*?)|([\s]*EXTR_OVERWRITE[\s]*)))?\)[\s]*;.*$#im",
                            
"#^.*?([^\w]parse_str|[^\w]mb_parse_str)[\s]*\([\s]*\\$.+?\)[\s]*;.*$#im",
                            
"#^.*?[^\w]import_request_variables\([^)]*\)[\s]*;.*$#im"
                        
),
                    
"phpinfo" => array(
                            
"#^.*?[^\w]phpinfo\(\)[\s]*;.*$#im"
                        
)
                    );
    
$possible = array();
    
$content file_get_contents($path);
    foreach(
$faults as $fault){
        foreach(
$errors[$fault] as $cd){
            
preg_match_all($cd$content$matchPREG_OFFSET_CAPTURE);
            
//var_dump($match);
            
foreach($match[0] as $m){
                
$line substr_count(substr($content0$m[1]), "\n")+1;
                
$possible[$fault][] = array("line" => $line"str" => $m[0]);
            }
        }
    }
    
//var_dump($possible);
    
return $possible;

}

function 
GenerateHtmlOut($path$possible){
    global 
$faults;
    echo 
"<html><body>\r\n";
    echo 
"<table width='100%'><tr>\r\n";
    echo 
"<td colspan='2' align='center' bgcolor='#BBBBFF'><b><strong>File: $path</strong></b></td></tr>\r\n";
    foreach(
$faults as $fault){
    echo 
"<td colspan='2' bgcolor='#CCCCFF'><b>Possible $fault danger place founds ".count($possible[$fault])."</b></td></tr>\r\n";
        if(
count($possible[$fault])>0){
            foreach(
$possible[$fault] as $mb){
                echo 
"<tr><td valign='top' bgcolor='#DDDDDD'>".$mb["line"].": </td><td bgcolor='#DDDDDD' valign='top'>".htmlspecialchars(nl2br($mb['str']))."</td></tr>\r\n";
            }
        }
    }
    echo 
"</body></html>";
}

function 
read($dir){
    global 
$paths;
    
$r opendir($dir);
    if(!
r){
        return 
false;
    }
    while(
$item readdir($r)){
        if(
$item != "." && $item != ".."){
            if(!
is_dir($dir.DIRECTORY_SEPARATOR.$item)){
                
$paths[] = realpath($dir.DIRECTORY_SEPARATOR.$item);
            }else{
                
read($dir.DIRECTORY_SEPARATOR.$item.DIRECTORY_SEPARATOR);
            }
        }
    }
}


?>



Время: 08:37