PDA

Просмотр полной версии : Сканер скриптов на уязвимости


gemaglabin
17.10.2006, 18:21
Вот,накатал.База маленькая,дополнить можно самому )

Естествено будут ложные срабатывания,ну вообще х3 , тестим


<html>
<head>
<title>PHP source vulnerability scaner</title>
<style>
body {
margin : 0px;
padding : 0px;
background-color : #101010;
font-family : "Verdana";
font-size : 10px;
color : #CCCCCC;
}
.j {
white-space:-moz-pre-wrap;
white-space:-pre-wrap;
white-space:-o-pre-wrap;
ord-wrap:break-word;
margin-top:4px;
margin-bottom:4px;
border:1px solid silver;
background-color:#f5f5f5;
font-family : "Verdana";
font-size : 11px;
padding:0.5em;
width:85%;
color:#222
}
.expl {
font-size:small;
margin-left:2em;
margin-right:2em
}
.h {
margin-top:1em;
margin-bottom:0px
}
input,textarea,select {
font-family : "Verdana";
font-size : 10px;
color : #CCCCCC;
border: 1px solid #404040;
BACKGROUND-COLOR: #222;
Width: 190px;
Heigth:46;
}
td {
font-size: 12px;
font-family: Verdana, "Trebuchet MS";
text-align: left;
}
code{
</style><hr>
</head>

<div style="align:center;">
<form name="scan" method="post">
<center>
<table border="0" cellpadding="2" cellspacing="0" style="">
<tr>
<td>Directory&nbsp;</td>
<td colspan="2"><input name="dir" type="text" value=""/></td>
<td colspan="2"><input type="submit" Value="Run"/></td>
</tr>
</table>
</center>
<hr>
</div>
</body>
</html>

<?php

ini_set("display_errors","0");

function _highlight()
{
global $ftext;

$phpteg = array ("'&lt;\?php'si",
"'&lt;\?'si",
"'\?&gt;'si");

$fphpteg = array ("<font color=#95001E>&lt;?php</font>",
"<font color=#95001E>&lt;?</font>",
"<font color=#95001E>&gt;</font>");

$strings = array ("'(\"[^\"]*\")'si",
"'(\'[^\']*\')'si");

$fstrings = array ("<font color=#DD0000>\\1</font>",
"<font color=#DD0000>\\1</font>");

$operator = array ("'\,'si",
"'\-'si",
"'\+'si",
"'\('si",
"'\)'si",
"'\{'si",
"'\}'si");

$foperator = array ("<font color=#007700>,</font>",
"<font color=#007700>-</font>",
"<font color=#007700>+</font>",
"<font color=#007700>(</font>",
"<font color=#007700>)</font>",
"<font color=#007700>{</font>",
"<font color=#007700>}</font>");

$reserved = array ("'(echo)'si",
"'(print)'si",
"'(while)'si",
"'(switch)'si",
"'(if)'si",
"'(else)'si",
"'(function)'si",
"'(array)'si",
"'(for)'si");

$freserved = array_fill (0,count($reserved),"<font color=#007700>\\1</font>");


$comment = "'((?:#|//)[^\n]*|/\*.*?\*/)'si";

$function = "'([\w]+)([\s]*)[\(]'si";

$variable = "'([\$]{1,2}[A-Za-z_]+)'si";

$ftext = str_replace("<", "&lt;", $ftext);
$ftext = str_replace(">", "&gt" , $ftext);
$ftemp = preg_replace ($phpteg ,$fphpteg,$ftext);
$ftemp = preg_replace ($comment ,"<font color=#244ECC>\\1</font>",$ftemp);
$ftemp = preg_replace ($function,"<font color=#0000cc>\\1</font>\\2(",$ftemp);
$ftemp = preg_replace ($operator,$foperator,$ftemp);
$ftemp = preg_replace ($variable,"<font color=#0000BB>\\1</font>",$ftemp);
$ftemp = preg_replace ($strings ,$fstrings,$ftemp);
$ftemp = preg_replace ($reserved,$freserved,$ftemp);

return "<code>$ftemp</code>";
}

function show_error ($title,$num,$text)
{
global $filename;
print ('<div class=h>');
print ("<font size=2>$title in $filename at $num</font>");
print ('<pre class=j>');
print ($num);
print (':&nbsp;');
print ('<font size=3>'._highlight("<?php\n".$text."?>").'</font>');
print ('</div></pre>');
}

function scan_file($file)
{
global $ftext;
global $filename;
$fileh = file($file, 'r');
for ($i=0;$i<=count($fileh);$i++)
{
# scan for sql errors
if (preg_match('[mysql_query\(.*\$_(GET|POST|SESSION|COOKIE|REQUEST ).*\)]', $fileh[$i],$res) ||
preg_match('[WHERE .*=\$_(GET|POST|SESSION|COOKIE|REQUEST)]', $fileh[$i],$res) ||
preg_match('[request.form|request.querystring ADODB.Connection]',$fileh[$i],$res) ||
preg_match('[query\(.*\$_(GET|POST|COOKIE|REQUEST).*\)]',$fileh[$i],$res) )
{
$ftext .= $fileh[$i];
$vuln = $vuln + 1;
echo show_error('Possible SQL injection',$i,$ftext);
}
# scan for php injections
if (preg_match('[(include|require)(_once)\s*(\(|\s).*\$_(GET|POST|S ESSION|COOKIE|REQUEST)]', $fileh[$i],$res) ||
preg_match('[(eval)\(\$_(GET|POST|REQUEST|COOKIE)]', $fileh[$i],$res))
{
$ftext .= $fileh[$i];
$vuln = $vuln + 1;
echo show_error('Possible PHP injection',$i,$ftext);
}
# scan for xss bugs
if (preg_match('[(echo|print).*\$_(GET|POST|SESSION|COOKIE|REQUEST)]', $fileh[$i],$res) ||
preg_match("<(echo|print).*\$_SERVER\['PHP_SELF']>", $fileh[$i],$res))
{
$ftext .= $fileh[$i];
$vuln = $vuln + 1;
echo show_error('Possible XSS bug',$i,$ftext);
}
# dangerous code
if (preg_match('[\s+eval\s*\(\s*\$_(GET|POST|SESSION|COOKIE|REQUEST )]', $fileh[$i],$res) ||
preg_match('[(system|popen|shell_exec|exec)\s*\(\$_(GET|POST|CO OKIE|REQUEST).*\)]', $fileh[$i],$res))
{
$ftext .= $fileh[$i];
$vuln = $vuln + 1;
echo show_error('Dangerous code',$i,$ftext);
}
# HTTP response splitting
if (preg_match('[header\s*\("Location:.*\$_(GET|POST|SESSION|COOKIE|REQUEST).*\ )]', $fileh[$i],$res) ||
preg_match('[header\s*\(.*\$_(GET|POST|SESSION|COOKIE|REQUEST). *\)]', $fileh[$i],$res))
{
$ftext .= $fileh[$i];
$vuln = $vuln + 1;
echo show_error('HTTP response splitting',$i,$ftext);
}
}
}

if (isset($_POST['dir']))
{
$dir = opendir($_POST['dir']);
if (!$dir) die("<center><h1>Cannot open directory</h1></center>");
else
{
while (($ffile = readdir($dir)) !== false ) $filez .= $ffile."\n";
$filez= explode("\n",$filez);
$vuln = 0;
for ($b=0;$b<=count($filez);$b++)
{
$filename = $filez[$b];
if (is_file($filename)) echo scan_file($filename);
}
closedir ($dir);
}
}
?>

ground_zero
17.10.2006, 18:45
расскажи пожалуста по подробней как им пользоватса

gemaglabin
17.10.2006, 19:00
Ничего сложного ; )

Указываешь путь к папке где лежат нужные скрипты и ждешь результата

http://img136.imageshack.us/img136/5039/scanmf3.th.png (http://img136.imageshack.us/img136/5039/scanmf3.png)

Koller
17.10.2006, 19:20
Possible SQL injection in Scaner ot geb.php at 162

162: preg_match('[request.form|request.querystring ADODB.Connection]',$fileh[$i],$res) ||

Работает...
gemaglabin как всегда нас порадовал...
Лови +...

ground_zero
17.10.2006, 19:29
тоже самое 162: preg_match('[request.form|request.querystring ADODB.Connection]',$fileh[$i],$res) ||
... единственное что удручает нужно знать точный путь к папке на сервере +

gemaglabin
17.10.2006, 19:31
Это он у вас нашел уязвимости в моем же скрипте %)

EXSlim
17.10.2006, 19:39
Молодец. Просто хороший скрипт для начинающих php кодеров...молодец

ground_zero
17.10.2006, 19:40
смотрим дальше у меня там ещё e107 есть чота должен показать ...

gemaglabin
17.10.2006, 19:41
Надо конечноже расширять базу скрипта,одними регулярками тут не обойдешься.

ground_zero
17.10.2006, 19:57
не показал даже возможности sql ни в e107 ни в php_nuke но всёравно респект сканер работает

Дикс
19.10.2006, 21:03
если после ввода имени папки он ничего не выдал - это означает что в скриптах нет уязвимостей? = )
имхо, лучше побольше статей умных читать, чем полагаться на такой сканер
но всё равно респект, обожаю самовыражение в php-коде =)

gemaglabin
31.10.2006, 14:17
Сделал пару ошибок ( значительных ) никто и не заметил %)

http://underwater.cup.su/pscan.rar

guest3297
01.11.2006, 12:06
Новые версии будут?

gemaglabin
07.11.2006, 18:26
Новая версия много было улучшено и добавлено

[ + ] Возможность выбирать на какой тип уязвимостей проводить аудит
[ + ] Если выводимые данные фильтруются такой тип уязвимости будет незасчитан
[ + ] Игнорирование закомментированных строк
[ + ] Теперь проверяются нетолько суперглобальные переменные
[ + ] Проверка наличия различных подозрительных комментариев к коду
[ + ] Старые нерабочие условия проверки были заменены и добавлены новые
[ + ] Немалая нагрузка на сервер во время сканирования

Стресс тест он тоже прошел неплохо , нашел баги в php-nuke и некоторых других cms.

Это всего лишь облегчение вашего труда,не стоит полагаться на его результаты - чтото серьезное он найдет врядли , да и xss scan лучше отключить

http://www.mytempdir.com/1044423

gemaglabin
07.11.2006, 23:42
Только что вспомнил про HTTP_GET_VARS,HTTP_POST_VARS,HTTP_COOKIE_VARS и HTTP_SESSION_VARS потом допишу

KSURi
08.11.2006, 21:39
тоже по сабжу:
http://forum.milw0rm.com/showthread.php?t=3222

DIAgen
08.11.2006, 22:03
Новая версия много было улучшено и добавлено

[ + ] Возможность выбирать на какой тип уязвимостей проводить аудит......
http://www.mytempdir.com/1044423

Сделал что бы проверялись вложеные папки http://rapidshare.com/files/2526868/www.rar.html , только идет сильная нагрузка на сервак(

Darkweider
27.04.2007, 18:10
Принцип работы? Скрипт должен обязательно находится в на сервере вместе с проверяемыми файлами? Иначе ниче не выйдет? А можно сделать так чтобы можно было удаленно проверять... Или я туплю и этим можно ?

n1†R0x
27.04.2007, 18:28
я так понял, он сорцы анализирует, а не делает пост/гет запросы в формах и т.д.
так что удаленно наврядли получится проверить.

eklips13
27.04.2007, 18:53
А я чот непонял как его юзать :(
Списую строку адресс сайта (http://zone.mel.local/forum/) один хер......
Думал форум пхпбб потестить :D

Hawkins
01.05.2007, 16:51
Не хотел поднимать старую тему, но gemaglabin в пм не ответил : )
Если у кого-нибудь остался последний релиз, то не будет-ли слишком напряжным его куда-нибудь залить? :D

BlackCats
27.11.2007, 23:44
народ, у кого ещё мб осталось? нужно, для изучения\обучения. залейте, будте добры..