Anti-armenia.ORG - Forumlar - SQL injection funksiyadan bağlama



Istifadəçi
    2012-08-18 10:07 GMT                 

Worm Man



Gold
Mesaj Sayı : 159
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   7  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : Baku
Ölkə :
Məslək : Sərbəst
Yaş : 27
Mesaj :

Mövzunu Paylaş!


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

Live to die another day
Anti-armenia.ORG
    

Istifadəçi
    2012-08-18 10:35 GMT                 

PuN!Sh3r



Gold
Mesaj Sayı : 308
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   35  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : W00t W00t
Ölkə :
Məslək : Cyber Security Specialist
Yaş :
Mesaj :

Mövzunu Paylaş!


Bro əgər sqli varsa ve sən bunu işlətsən obsecure olacaq))niyə bilirsən? çünki bunu bypass etmək 2x2 kimidi.əgər mən misal üçün where əvəzinə WhERe yazsam guya 404.php yönlənəcek? yox əlbətdə.
Ondansa sqli bağla bunu da əlavə secure üçün(lamerlərə qarşı)işlət.

Vətən Sağ olsun!
Duman salamat qal, Dağ salamat qal..
Anti-armenia.ORG
    

Istifadəçi
    2012-08-18 10:48 GMT                 

Worm Man



Gold
Mesaj Sayı : 159
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   7  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : Baku
Ölkə :
Məslək : Sərbəst
Yaş : 27
Mesaj :

Mövzunu Paylaş!


Düzdü yaxşı nöqtəyə toxundun amma sql injectionda bəzi işarələr var ki onu dəyişə bilmərik məsələn "-" düzdü integerdə bypass etmək olar bunu ancaq stringdə yox çünki stringdə "'" işlədilir
indi integer üçündə tapacam
Birdəki hə 403.php nı htaccessdən silib içinə "cin" şəkli qoyasan cammat qaçar bidə gəlməz

Live to die another day
Anti-armenia.ORG
    

Istifadəçi
    2012-08-18 13:06 GMT                 

Avatar Fearless



VIP
Mesaj Sayı : 1299
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   23  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : Gävle
Ölkə :
Məslək : Hacker,Defacer,Programmer
Yaş : 26
Mesaj :

Mövzunu Paylaş!


Sitat
#11679 PuN!Sh3r :
Bro əgər sqli varsa ve sən bunu işlətsən obsecure olacaq))niyə bilirsən? çünki bunu bypass etmək 2x2 kimidi.əgər mən misal üçün where əvəzinə WhERe yazsam guya 404.php yönlənəcek? yox əlbətdə.
Ondansa sqli bağla bunu da əlavə secure üçün(lamerlərə qarşı)işlət.


Razıyam o düzdür.
@Worm Man ,
Bro Gözəl Sourcedi. Amma 1 yandanda PuN!Sh3r haqlıdı. Çünki bypass-ı 2x2 kimi orda olur bəzi quote yada nə bilim işarətlər onların çoxu Hexing yada bəzən olur URL Encoding-də belə bypass-lanır. Daha Güclü Secure üçün orda
Kod:
$badwords = array();

Bu Funksiyanın içindəki sözləri stringləri daha çox artırmaq. Hər cürlü stringi yazmaq o zaman bəlkə artar. Məsələn base64 o funksiyanı disable eləməkdə olar nə bilim helə 1-1 burda yazmaqda o zaman secure azda olsa artar. Çünki Burda sadəcə Request-ləri
$badwords = array()
Möhtərizələrin içindəki Yazılarla uyğunlaşdırır. Uyğunlaşsa helə substr_count(); funksiyası işə düşür və 403.php-yə yönəlir. baxanda düzdü Security-dır. Amma dediyim kimi String-ləri yani encodinglənmiş hallarında yazmaqla yenə security artar. Görülür əmək çəkmisən təsdiqləyirəm.
1 şeyidə qeyd edim bu passsql.php ilə 403.php 1 yerdeə qalmalıdır "\403.php\" Yani olduğu dizin\folder\qovluq nəzərdə tutulur.
Respect!

http://s017.radikal.ru/i404/1202/c6/a2947080a3c4.png
Anti-armenia.ORG
    

Istifadəçi
    2012-08-18 13:25 GMT                 

Worm Man



Gold
Mesaj Sayı : 159
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   7  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : Baku
Ölkə :
Məslək : Sərbəst
Yaş : 27
Mesaj :

Mövzunu Paylaş!


hə düzdür avatar querydən necə bağlanır bilmirsən script yığıram sql-i var mən istiyirəm tamam bağlansın

Fulldu hər şeyi var ckeditorda qoşmuşam

Live to die another day
Anti-armenia.ORG
    

Istifadəçi
    2012-08-19 11:09 GMT                 

BlackMinD



Pr0grammer
Mesaj Sayı : 1677
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   62  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : KARABAKH IS AZERBAIJAN!
Ölkə :
Məslək :
Yaş :
Mesaj :

Mövzunu Paylaş!


Kod:
foreach($badwords as strtolower(urldecode($word)))



Çünki substr_count() funksiyası needle-ni case Sensitive axtarır.
+urldecode() lazımdır.


Black listing texnikası....Əvvəl axır hardasa bypass etmək olur belə şeyləri.
Problemin həlli skriptdə vulnlu ssenarini tapıb fixləməkdir +düzgün yazmaqdır skripti.

Ana VƏTƏN!
Anti-armenia.ORG
    

Istifadəçi
    2012-08-19 11:51 GMT                 

Avatar Fearless



VIP
Mesaj Sayı : 1299
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   23  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : Gävle
Ölkə :
Məslək : Hacker,Defacer,Programmer
Yaş : 26
Mesaj :

Mövzunu Paylaş!


Sitat
#11683 Worm Man :
hə düzdür avatar querydən necə bağlanır bilmirsən script yığıram sql-i var mən istiyirəm tamam bağlansın

Fulldu hər şeyi var ckeditorda qoşmuşam



Respect Bro! Uğurlar


Sitat
#11715 BlackMinD :
Kod:
foreach($badwords as strtolower(urldecode($word)))



Çünki substr_count() funksiyası needle-ni case Sensitive axtarır.
+urldecode() lazımdır.


Black listing texnikası....Əvvəl axır hardasa bypass etmək olur belə şeyləri.
Problemin həlli skriptdə vulnlu ssenarini tapıb fixləməkdir +düzgün yazmaqdır skripti.


1 şey soruşum. məsələn biz burda belə 1 şey eləsək olar? include 'secure.php'
secure.php :
Kod:
<?php
//Anti-armenia.ORG & Avatar Fearless



$id=array('id','cid','sid','pid','forum','gp','storyid');



$page =$_SERVER['HTTP_HOST'];   


foreach ($id as $gid)
{
if (isset($_GET[$gid]))
{
if   (!is_int_val($_GET[$gid]))
{
//echo $page;
header('Location: http://'.$page);
exit;
}
}
}

function is_int_val($data)
{
if (is_int($data) === true) return true;
elseif (is_string($data) === true && is_numeric($data) === true)
{
return (strpos($data, '.') === false);

return false;
}


?>

Bu Source ilə bağlamaq olar ?
p.s : misal üçün verdim

http://s017.radikal.ru/i404/1202/c6/a2947080a3c4.png
Anti-armenia.ORG
    

Istifadəçi
    2012-08-19 12:36 GMT                 

faiq77



Banned
Mesaj Sayı : 2
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   0  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər :
Ölkə :
Məslək :
Yaş :
Mesaj :

Mövzunu Paylaş!


çox sağ ol

Anti-armenia.ORG
    

Istifadəçi
    2012-08-19 14:48 GMT                 

BlackMinD



Pr0grammer
Mesaj Sayı : 1677
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   62  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : KARABAKH IS AZERBAIJAN!
Ölkə :
Məslək :
Yaş :
Mesaj :

Mövzunu Paylaş!


Ə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.



%)

Ana VƏTƏN!
Anti-armenia.ORG
    

Istifadəçi
    2012-08-19 15:02 GMT                 

Avatar Fearless



VIP
Mesaj Sayı : 1299
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   23  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : Gävle
Ölkə :
Məslək : Hacker,Defacer,Programmer
Yaş : 26
Mesaj :

Mövzunu Paylaş!


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

http://s017.radikal.ru/i404/1202/c6/a2947080a3c4.png
Anti-armenia.ORG
    

Istifadəçi
    2012-08-19 15:36 GMT                 

Worm Man



Gold
Mesaj Sayı : 159
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   7  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : Baku
Ölkə :
Məslək : Sərbəst
Yaş : 27
Mesaj :

Mövzunu Paylaş!


ok step çox sağol mənədə bu lazim idi
bidəki stringdə sql injectionı bağlayanda ' bu işarəyə hələ error verir amma sql injection getmir mysql_real_escape_string addslashes kimi di
hə bu da məzələnmək üçün yazdığım funksiyadı baxın görün deniala gedər?

Kod:
function secureurl() {
$bad = array("/'/",'/union/i','/select/i','/information_schema/i','/benchmark/i');
foreach($bad as $bads) {
foreach($_REQUEST as $requests) {
if(preg_match($bads,$requests)) {
die("Agillisan?");
}
}
}
}

Live to die another day
Anti-armenia.ORG
    

Istifadəçi
    2012-08-19 16:59 GMT                 

BlackMinD



Pr0grammer
Mesaj Sayı : 1677
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   62  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : KARABAKH IS AZERBAIJAN!
Ölkə :
Məslək :
Yaş :
Mesaj :

Mövzunu Paylaş!


Vulnu bu kimi metodlarla ört basdır etməyə dəyməz cəmi cümlətanı 10 saniyə heç çəkmir skriptdəki sqli fixləməyə.
XSS-i fixləmək sqli fixlməkdən çətindir.
Deyirsənki error verir error nədir?Ya skipti copy paste elə baxım və fixləyim.

mysql_real_escape_string etmisənsə və error verirsə məsələn ' işarəsinə bu o deməkdirki skriptin düz yazılmayıb yoxlamır result var ya yox elə bir başa out etməyə başlayır.

Əksinə sən çalışmalısan ki,skripti düz yazasan nəticə yoxdursa sorğudan ya default value- vermək ya da adi die('redirect');

Ana VƏTƏN!
Anti-armenia.ORG
    

Istifadəçi
    2012-08-19 17:52 GMT                 

Worm Man



Gold
Mesaj Sayı : 159
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   7  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : Baku
Ölkə :
Məslək : Sərbəst
Yaş : 27
Mesaj :

Mövzunu Paylaş!


Kod:
$page = mysql_real_escape_string($_GET['page']);
$content = mysql_query("SELECT * FROM `".$page."`",$chandle);
if(mysql_errno($chandle)!='') {
echo "MYSQL Says =>".mysql_errno($chandle).":<b>".mysql_error($chandle)."</b>";
}

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>";
}
echo "";

Burda mysql_real_escape_string '-nı \' kimi çıxardır düzdü sql getmək mümkün olmur amma yenədə error verir

Live to die another day
Anti-armenia.ORG
    

Istifadəçi
    2012-08-19 20:18 GMT                 

BlackMinD



Pr0grammer
Mesaj Sayı : 1677
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   62  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : KARABAKH IS AZERBAIJAN!
Ölkə :
Məslək :
Yaş :
Mesaj :

Mövzunu Paylaş!


Sözsüz ki, sən bu yuxarıdakı kodla səhv almalısan)
Ona görəki sql query səndə pramoy table-a reference götürür.Database-də də o table olmadığına görə (userin ' yaxud BLAHHHHHHH daxil etdiyi halda)
mysql_error() həmin səhvi sənə göstərir.


Çalış məntiqi tutasan:
Oxuxaqlar:

http://pastebin.com/ZjFBA7CV
http://pastebin.com/RSgb2Dj9

Ana VƏTƏN!
Anti-armenia.ORG
    

Istifadəçi
    2012-08-20 07:59 GMT                 

Worm Man



Gold
Mesaj Sayı : 159
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   7  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : Baku
Ölkə :
Məslək : Sərbəst
Yaş : 27
Mesaj :

Mövzunu Paylaş!


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>";
}

Live to die another day
Anti-armenia.ORG
    

Istifadəçi
    2012-08-20 10:04 GMT                 

BlackMinD



Pr0grammer
Mesaj Sayı : 1677
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   62  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : KARABAKH IS AZERBAIJAN!
Ölkə :
Məslək :
Yaş :
Mesaj :

Mövzunu Paylaş!


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.

Ana VƏTƏN!
Anti-armenia.ORG
    

Istifadəçi
    2012-08-20 10:38 GMT                 

Worm Man



Gold
Mesaj Sayı : 159
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   7  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : Baku
Ölkə :
Məslək : Sərbəst
Yaş : 27
Mesaj :

Mövzunu Paylaş!


XSS i başa düşdüm table enumeration nədi anlamadım yəni tableların adların tapacaqlar?
$menuquery = mysql_query("SELECT Menuname from `menu2`");
bax elə bil ki mən məlumatı home və news table-ndan götürürəm və bu tableların adı menu2 table-nda var hansı ki menu_if_exists funksiyası ordan o table-ların adını götürür başqa table-lara no data found deyir

Live to die another day
Anti-armenia.ORG
    

Istifadəçi
    2012-08-20 10:58 GMT                 

BlackMinD



Pr0grammer
Mesaj Sayı : 1677
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   62  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : KARABAKH IS AZERBAIJAN!
Ölkə :
Məslək :
Yaş :
Mesaj :

Mövzunu Paylaş!


Yalnız o menu2 table- saxlanılan digər table adları üçün bəli.
Sən artıq table blabblab not found deməklə attackerə ipucu vermiş olursanki bu adlı table yoxdur.
Attackerdə artıq skriptin hansı prinsiplə işlədiyi başa düşməyə başlayır.Bu hal o qədər kritiki sayılmır yenə də amma applicationun necə işlədiyini -prinsipini expose etmiş olur.

Kod:
die("<script>location.replace(\"/\");</script>");

Belə daha münasibdir.Ən azından sən attackerə demirsən: *FİLAN TABLE YOXDUR*
Attacker artıq təqrib edir:
1 ) parameter page column name-dir
2 ) parameter page table-dır.
3 ) parametere page məsələn include-dir

və s.
Fikir ver hansı daha çaşdırıcıdır:

TABLE BLAB NOT FOUND

YOXSA

Yuxarıdakı (1,2,3 təqrib metodları)?

Ana VƏTƏN!
Anti-armenia.ORG
    

Istifadəçi
    2012-08-20 11:02 GMT                 

Worm Man



Gold
Mesaj Sayı : 159
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   7  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : Baku
Ölkə :
Məslək : Sərbəst
Yaş : 27
Mesaj :

Mövzunu Paylaş!


ok anladım
bidə qaqa sən bilərsən bu localhostda htaccessnən rewrite niyə işləmir internal server error olur?

Live to die another day
Anti-armenia.ORG
    

Istifadəçi
    2012-08-20 11:11 GMT                 

BlackMinD



Pr0grammer
Mesaj Sayı : 1677
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   62  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : KARABAKH IS AZERBAIJAN!
Ölkə :
Məslək :
Yaş :
Mesaj :

Mövzunu Paylaş!


httpd.conf da (Apache configdə)

#LoadModule rewrite_module modules/mod_rewrite.so

qarşısındakı # işarəsini poz restart ver Apache-yə işləməlidir.

Ana VƏTƏN!
Anti-armenia.ORG
    

Istifadəçi
    2012-08-20 11:18 GMT                 

Worm Man



Gold
Mesaj Sayı : 159
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   7  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər : Baku
Ölkə :
Məslək : Sərbəst
Yaş : 27
Mesaj :

Mövzunu Paylaş!


ok çox sağol

Live to die another day
Anti-armenia.ORG