Istifadəçi |
2012-08-18 10:07 GMT |
|
|
|
Gold |
|
Mesaj Sayı : 159 |
Mövzu Sayı : |
Rep Ver : |
Rep Sayı : 7 |
Indi Saytda : |
Cinsiyyət : Oğlan |
|
Şəhər : Baku |
Ölkə : |
Məslək : Sərbəst |
Yaş : 27 |
Mesaj : |
|
Salamlar sizlərə sql injectionı bağlayan php kodu təqdim edəcəm
Kod: if (!function_exists('sql_inject_chec')) {
function sql_inject_chec(){
// Anti-SQL Injection
$badwords = array("--",";","'",'"',"DROP","ORDER", "GROUP", "SELECT", "UPDATE", "DELETE", "drop", "order", "group","if","IF", "information_schema.tables", "INFORMATION_SHEMA.TABLES", "/**/", "/*--*", "/*!50000", "select(", "SELECT(", "select", "update", "delete", "WHERE", "where","exec","EXEC","procedure","PROCEDURE");
foreach($_REQUEST as $value) {
foreach($badwords as $word)
if(substr_count($value, $word) > 0) {
die("<script type=\"text/javascript\">javascript:location=\"403.php\"</script>");
}
}
}
}
deməli bu kodu atırsız saytınızda passsql.php ya yəni bu faylı yaradırsız sql injection olan səhifəyə bu kodu yazırsız
Kod: include('passsql.php');
sql_inject_chec();
sonra 403.php adlı fayl yaradırsız faylı boş buraxırsız
sonra .htaccess faylını açırsız və bu kodu əlavə edirsiz
Kod: <Files 403.php>
Deny From all
</Files>
və bu qədər sql injection açığı bağlanır script arraydakı sözləri urlda tutanda 403 forbidden olur siz bunu dəyişib alert də qoya bilərsiz hər şey sizdən aslıdı
arraya XSS LFİ açığının kodlarınıda qoyub xss lfinidə bağlaya bilərsiz uğurlar
|
Anti-armenia.ORG |
|
Istifadəçi |
2012-08-18 10:48 GMT |
|
|
|
Gold |
|
Mesaj Sayı : 159 |
Mövzu Sayı : |
Rep Ver : |
Rep Sayı : 7 |
Indi Saytda : |
Cinsiyyət : Oğlan |
|
Şəhər : Baku |
Ölkə : |
Məslək : Sərbəst |
Yaş : 27 |
Mesaj : |
|
|
Anti-armenia.ORG |
|
Istifadəçi |
2012-08-19 14:48 GMT |
|
|
|
Pr0grammer |
|
Mesaj Sayı : 1677 |
Mövzu Sayı : |
Rep Ver : |
Rep Sayı : 62 |
Indi Saytda : |
Cinsiyyət : Oğlan |
|
Şəhər : KARABAKH IS AZERBAIJAN! |
Ölkə : |
Məslək : |
Yaş : |
Mesaj : |
|
Əgər cid nə bilim sid və s. kimi $_GET parametrlər səndə yalnız integer olmalıdırsa ctype_digit() funksiyası bəs edir mənası yoxdur
custom "funksiyalar" yazmağa.
İkinci header() funksiyası serveri yoran və Denial Of Service-ə qədər belə apara bilən funksiyadır.
Yuxarıdakı skriptdə attacker:
site.tld/fayl.php?cid=BLAHHHHHHHHHHH
daxil etdikdə
header() funksiyası artıq serverdən istifadə edir çünki HTTP HEADER-lər göndərir klientə.
attacker saniyədə çox yox 10-larla belə zapros göndərib serveri Denial of Service halına salacaq.
Yenə də deyirəm bu kimi şeylər vulnu bağlamır vuln fakt qalır sadəcə exploitable olunması ya çətinləşir ya da ümumiyyətlə sərf etmir attackerə
(vaxt sərf etmək cəhətdən)
Əgər integer expect edirsənsə belə şeylərə ehtiyyac yoxdur + heç mysql_real_escape_string() funksiyasına belə ehtiyyac olmur o şərtlə ki
skriptdə type casting yaxud da type juggling edib normal qaydada inputu *int*-ə force edəsən.
Məsələn:
Kod: <?php
if isset($_GET['cid'])
{
$val=(int)$_GET['cid'];// type casting Attacker nə daxil edir etsin illegal nəsə varsa 0-a çevrilir intdirsə o halda elə normalda qalır.
$doquery=@mysql_result(mysql_query("SELECT * FROM `bla_table` WHERE `val`=$val"),0);
if (!$doquery) die('JAVASCRIPT_REDIRECTION_CUNKI_HECNE_CIXMADI_QUERYDEN');
/*
Fakt casting etməsəydik vulnerable olacaqdı.
İnt-ə force etdiyimizə görə attacker exploit edə bilmir.
Yox əgər int deyil artıq string expect edirsənsə applicationun APİ-ından o halda mütləq
mysql_real_escape_string() variableni (yəni $val-i) sql query-yə soxmamışdan əvvəl istifadə olunmalıdır.
+ aşağıdakı şəkildə sql query olmalıdır:
//$val=mysql_real_escape_string($val);
//$doquery=@mysql_result(mysql_query("SELECT * FROM `bla_table` WHERE `val`='$val'"),0);
Əks halda SQL injection olacaq.
*/
}
?> L injection olacaq.
*/
}
?>
[/code]
[code]
<?php
error_reporting(0);
/***************************************************
* O sertleki array() daki elementleri int expect edirsense.
* Loru dilde $_GET['param']=VALUE tam digit olduguna emin olmaq ucun. *
* Configde include etmelisenki mysql query-ye catmamis yoxlaya bilsin.
* require_once 'secure.php';
*
*
***************************************************/
//Direct access olmaz
if(!strcasecmp(basename(str_ireplace('\\','/',$_SERVER['SCRIPT_NAME'])),basename(__FILE__))) die('Agillisan?;)');//Direct accessin qasisini aliriq.
$id=array('id',
'cid',
'sid',
'pid',
'forum',
'gp',
'storyid');
$page='/';
foreach($id as $gid)
{
//ehtiyyac yoxdur custom "funksiyalara" ctype_digit bes edir bu meqsedle.
if (isset($_GET[$gid]) && !ctype_digit($_GET[$gid]))
{
//HEADER funksiyasi serveri yorandir coxlu false http query polnu serveri downa gondere bilir..
//Evezine client side redirection
die("<h1>Ucacaqsin+Ucacaqsin+Haralara Ucacaqsin?)</h1><script>location.replace(\"{$page}\");</script>");
}
}
unset($gid);// Unset.
?>
[/code]
+
Metod $_POST-dursa öldü bu metod çünki yalnız $_GET-i "control" edir.
%)
|
Anti-armenia.ORG |
|
Istifadəçi |
2012-08-19 15:02 GMT |
|
|
|
VIP |
|
Mesaj Sayı : 1299 |
Mövzu Sayı : |
Rep Ver : |
Rep Sayı : 23 |
Indi Saytda : |
Cinsiyyət : Oğlan |
|
Şəhər : Gävle |
Ölkə : |
Məslək : Hacker,Defacer,Programmer |
Yaş : 26 |
Mesaj : |
|
Sitat #11721 BlackMinD :
Əgər cid nə bilim sid və s. kimi $_GET parametrlər səndə yalnız integer olmalıdırsa ctype_digit() funksiyası bəs edir mənası yoxdur
custom "funksiyalar" yazmağa.
İkinci header() funksiyası serveri yoran və Denial Of Service-ə qədər belə apara bilən funksiyadır.
Yuxarıdakı skriptdə attacker:
site.tld/fayl.php?cid=BLAHHHHHHHHHHH
daxil etdikdə
header() funksiyası artıq serverdən istifadə edir çünki HTTP HEADER-lər göndərir klientə.
attacker saniyədə çox yox 10-larla belə zapros göndərib serveri Denial of Service halına salacaq.
Yenə də deyirəm bu kimi şeylər vulnu bağlamır vuln fakt qalır sadəcə exploitable olunması ya çətinləşir ya da ümumiyyətlə sərf etmir attackerə
(vaxt sərf etmək cəhətdən)
Əgər integer expect edirsənsə belə şeylərə ehtiyyac yoxdur + heç mysql_real_escape_string() funksiyasına belə ehtiyyac olmur o şərtlə ki
skriptdə type casting yaxud da type juggling edib normal qaydada inputu *int*-ə force edəsən.
Məsələn:
Kod: <?php
if isset($_GET['cid'])
{
$val=(int)$_GET['cid'];// type casting Attacker nə daxil edir etsin illegal nəsə varsa 0-a çevrilir intdirsə o halda elə normalda qalır.
$doquery=@mysql_result(mysql_query("SELECT * FROM `bla_table` WHERE `val`=$val"),0);
if (!$doquery) die('JAVASCRIPT_REDIRECTION_CUNKI_HECNE_CIXMADI_QUERYDEN');
/*
Fakt casting etməsəydik vulnerable olacaqdı.
İnt-ə force etdiyimizə görə attacker exploit edə bilmir.
Yox əgər int deyil artıq string expect edirsənsə applicationun APİ-ından o halda mütləq
mysql_real_escape_string() variableni (yəni $val-i) sql query-yə soxmamışdan əvvəl istifadə olunmalıdır.
+ aşağıdakı şəkildə sql query olmalıdır:
//$val=mysql_real_escape_string($val);
//$doquery=@mysql_result(mysql_query("SELECT * FROM `bla_table` WHERE `val`='$val'"),0);
Əks halda SQL injection olacaq.
*/
}
?> L injection olacaq.
*/
}
?>
[/code]
[code]
<?php
error_reporting(0);
/***************************************************
* O sertleki array() daki elementleri int expect edirsense.
* Loru dilde $_GET['param']=VALUE tam digit olduguna emin olmaq ucun. *
* Configde include etmelisenki mysql query-ye catmamis yoxlaya bilsin.
* require_once 'secure.php';
*
*
***************************************************/
//Direct access olmaz
if(!strcasecmp(basename(str_ireplace('\\','/',$_SERVER['SCRIPT_NAME'])),basename(__FILE__))) die('Agillisan?;)');//Direct accessin qasisini aliriq.
$id=array('id',
'cid',
'sid',
'pid',
'forum',
'gp',
'storyid');
$page='/';
foreach($id as $gid)
{
//ehtiyyac yoxdur custom "funksiyalara" ctype_digit bes edir bu meqsedle.
if (isset($_GET[$gid]) && !ctype_digit($_GET[$gid]))
{
//HEADER funksiyasi serveri yorandir coxlu false http query polnu serveri downa gondere bilir..
//Evezine client side redirection
die("<h1>Ucacaqsin+Ucacaqsin+Haralara Ucacaqsin?)</h1><script>location.replace(\"{$page}\");</script>");
}
}
unset($gid);// Unset.
?>
[/code]
+
Metod $_POST-dursa öldü bu metod çünki yalnız $_GET-i "control" edir.
%)
Təşəkkürlər Ətraflı açıqlamağa görə
Bunu Random yazdım. php.***-dən(Reklam kimi çixmasın) biraz oxudum Source-lər hakkında ordan birləşdirib yaratdım. burda ən çox belə necə deyim custom sən demişkən yada nə bilim bu hissədə biraz başım qarışdı :
[code]//echo $page;
header('Location: http://'.$page);
exit;[/code]
Əvvəl əmin olmadım bu header(); -i qoymağa sonra nədənsə qoydum. Yenədə məlumat üçün minnətdaram dediyin kimi header(); serverdən istifadə edir buda Denial Of Service-yə qədər gedir. Təşəkkürlər
|
Anti-armenia.ORG |
|
Istifadəçi |
2012-08-20 07:59 GMT |
|
|
|
Gold |
|
Mesaj Sayı : 159 |
Mövzu Sayı : |
Rep Ver : |
Rep Sayı : 7 |
Indi Saytda : |
Cinsiyyət : Oğlan |
|
Şəhər : Baku |
Ölkə : |
Məslək : Sərbəst |
Yaş : 27 |
Mesaj : |
|
hə çox sağol qaqa yoxluyub nəticəni deyəcəm => 1 saat sonra
Nəticədə belə funksiya yazdım bu bağladı məncə
Kod: function menu_if_exists($table) {
include('dbconn.php');
$menuquery = mysql_query("SELECT Menuname from `menu2`");
while($menuquery2 = mysql_fetch_array($menuquery)) {
$menus .=$menuquery2['Menuname']."|";
}
$menus = explode("|",$menus);
if(!in_array($table,$menus,TRUE)) die("<script>alert(\"No data found for $table\");location.replace(\"/\");</script>");
return $table;
}
Scriptə aid olan tableların adı menu2də Menuname adlı kolumnda mövcuddu ordan in_array nan təmizlədim əvvəlki kodda belə oldu
Kod: error_reporting(0);
if(empty($_GET['page'])) {
$_GET['page'] = 'Home';
}
$page = mysql_real_escape_string(menu_if_exists($_GET['page']));
$content = @mysql_query("SELECT * FROM `".$page."`",$chandle);
while($row2 = @mysql_fetch_array($content)) {
echo "<div class=\"between\">";
echo "\n</div>\n<br>\n<center>\n<h1>\n<div class=\"title\">".$row2['title']."\n</div></h1>\n</center><a class=\"simp\" href=\"index.php?page=".$_GET['page']."&subpage=".$row2['id']."\">See</a>\n<center>";
echo "<div class=\"con\" style=\"text-overflow:ellipsis;\">".$row2['text']."...</div>".$admonline;
echo "</center>";
}
|
Anti-armenia.ORG |
|
Istifadəçi |
2012-08-20 10:04 GMT |
|
|
|
Pr0grammer |
|
Mesaj Sayı : 1677 |
Mövzu Sayı : |
Rep Ver : |
Rep Sayı : 62 |
Indi Saytda : |
Cinsiyyət : Oğlan |
|
Şəhər : KARABAKH IS AZERBAIJAN! |
Ölkə : |
Məslək : |
Yaş : |
Mesaj : |
|
Sevindim ki, o məntiqi tutdun amma 2 qəşəng vuln yaratdın indi öz əllərinlə.
1-cisi databasedəki table-ların enumerasiyası
2-cisi isə XSS
Kod: if(!in_array($table,$menus,TRUE)) die("<script>alert(\"No data found for $table\");location.replace(\"/\");</script>");
Kod: /script.php?page=");</script><script>document.write(String.fromCharCode(60,115,99,114,105,112,116,62,97,108,101,114,116,40,34,80,119,78,69,100,34,32,43,32,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,41,59,60,47,115,99,114,105,112,116,62));</script><!--
Fix:
$page = mysql_real_escape_string(menu_if_exists(htmlentities($_GET['page'])));
+
Məsləhət görməzdim
die("<script>alert(\"No data found for $table\");location.replace(\"/\");</script>");
etməyinə.
Table enumerationdan başqa bir şey deyil.
|
Anti-armenia.ORG |
|