Anti-armenia.ORG - Forumlar - Anti SQL injection



Istifadəçi
    2012-05-09 01:22 GMT                 

AzSecurity



Gold
Mesaj Sayı : 122
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   5  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər :
Ölkə :
Məslək : Linux sys admin
Yaş :
Mesaj :

Mövzunu Paylaş!


Salam.Bu dəfə webmasterlər üçün anti sql injection scriptini paylaşmaq istədim.

Kod:
// By AzSecurity...
$sef = $_GET["sef"];
$id = $_GET["id"];

$vt_kontrol=mysql_fetch_assoc(mysql_query("SELECT * FROM makale WHERE id=$id AND sef='$sef'"));

if(!$vt_kontrol){
    echo "
<center><h1>Yemedin Getdin! <br>
</h1></center>
" ;
}
else{
    echo $vt_kontrol["baslik"];
}


Bu kodu saytınızın ən üst hissəsində <?-dan sonraya kopyalıyın və koddakı sql bazanın yolu yerinə öz bazanızın yolunu yazın.
Kodun işləmə prinsipi belədir məs:movzu.php?id=10 yazılıb kod hemin 10un bazada olub olmamasını yoxlayır əyər varsa ekrana cıxardır.10un yerinə bazada olmayan her hansısa bir şey məs:union+select,http:// və s yazılsa ekrana Yemedin getdin! yazisi cixacaq

Hazirda scripti öz saytımda istifadə eliyirəm həqiqətən etibarlıdır...

Uğular...

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

Istifadəçi
    2012-05-09 05:27 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ş!


Bu secure olmaq əvəzinə tam vulnerable skriptdir Azsecurity.
Bunu hansı hosta atsanız 2x2 pwn olacaq tezliklə.
Verdiyin skriptdə fixdən danışmalı heç nə yoxdur ümumiyyətlə.




///////////////////////////////////////////////////////////////////////////////////////////////////////


[url]http://192.168.0.15/learn/work/prob.php?id=-9999999999999999999995+UnIoN+sElEcT+repeat(benchmark(1000000000000000,md5(repeat(md5(now()),100000))),1000000000000),2,3,4+from+makale--[/url]


[url]http://192.168.0.15/learn/work/prob.php?id=(select+benchmark(10000000000000000000,sha1(md5(now()))))--[/url]


[url]http://192.168.0.15/learn/work/prob.php?id=benchmark(10000000000000000000,sha1(md5(now())))--[/url]


///////////////////////////////////////////////////////////////////////////////////////////////////////

Problemi əyani olmaq sübüt etmək üçün: at localhosta yoxla yuxarıdakı kimi:
Kod:
<?php
$mhost='192.168.0.1';
$mdbuser='xaxa';
$mpass='xaxa';
$mdb='xaxa';

$handle=@mysql_connect($mhost,$mdb,$mpass) or die('Qosula Bilmirem!');
$selectdb=@mysql_selectdb($mdb) or die('Sece Bilmirem Database-i');



// By AzSecurity...
$sef = $_GET["sef"];
$id = $_GET["id"];

$vt_kontrol=mysql_fetch_assoc(mysql_query("SELECT * FROM makale WHERE id=$id AND sef='$sef'"));

if(!$vt_kontrol){
    die(var_dump($vt_kontrol));//false
    echo "
<center><h1>Yemedin Getdin! <br>
</h1></center>
" ;
}
else{
    echo $vt_kontrol["baslik"];
    die(var_dump($vt_kontrol));//true-da
}


?>







mysql> show tables \g
+----------------+
| Tables_in_xaxa |
+----------------+
| makale |
+----------------+
1 row in set (0.00 sec)

mysql> explain makale \g
+--------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| baslik | text | NO | | NULL | |
| sef | int(11) | NO | | NULL | |
| metn | text | YES | | NULL | |
+--------+---------+------+-----+---------+----------------+
4 rows in set (0.02 sec)

mysql> show create table makale \g
+--------+-----------------------------------------------------------------------
---------------------------------------------------------------------------------
| Table | Create Table

+--------+-----------------------------------------------------------------------
---------------------------------------------------------------------------------
| makale | CREATE TABLE `makale` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`baslik` text NOT NULL,
`sef` int(11) NOT NULL,
`metn` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 |
+--------+-----------------------------------------------------------------------
---------------------------------------------------------------------------------
1 row in set (0.00 sec)

mysql> show create table makale \G
*************************** 1. row ***************************
Table: makale
Create Table: CREATE TABLE `makale` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`baslik` text NOT NULL,
`sef` int(11) NOT NULL,
`metn` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

mysql>



Fixinə qaldıqda

type casting:
$sef = (int)$_GET["sef"];
$id =(int) $_GET["id"];

yaxud ctype_digit() -lə yoxlamaq.



Kod:
<?php
$mhost='192.168.0.1';
$mdbuser='xaxa';
$mpass='xaxa';
$mdb='xaxa';

$handle=@mysql_connect($mhost,$mdb,$mpass) or die('Qosula Bilmirem!');
$selectdb=@mysql_selectdb($mdb) or die('Sece Bilmirem Database-i');


if(isset($_GET['sef']) && isset($_GET['id']))//yoxla hemise inisialize olub ya yox?
         {
// By AzSecurity...
$sef = mysql_real_escape_string((int)$_GET["sef"]);// her ehtimal ucun mysql_real_escape_string() de yerindedir.
$id =mysql_real_escape_string((int)$_GET["id"]);

$vt_kontrol=mysql_fetch_assoc(mysql_query("SELECT * FROM makale WHERE id='$id' AND sef='$sef'"));

if(!$vt_kontrol){
    //die(mysql_error());//false
    echo "
<center><h1>Yemedin Getdin! <br>
</h1></center>
" ;
}
else{
    echo $vt_kontrol["baslik"];
    //die(var_dump($vt_kontrol));//true-da
}
         }

?>



Ümumiyyətlə isə:red-hatz.org da sırf $_GET requestdən gələn bu tipli "payload"-ın qarşısını almaq üçün:
Orda Anti sql injection adlı mövzu var idi öz əlavəmi etmişdim ora da baxa bilərsən.


[url]http://192.168.0.15/learn/work/prob.php?id=1&sef=-9999999999999999999995+UnIoN+sElEcT+repeat(benchmark(1000000000000000,md5(repeat(md5(now()),100000))),1000000000000),2,3,4+from+makale--[/url]

və s.

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

Istifadəçi
    2012-05-09 08:16 GMT                 

FleXDowN



İstifadəçi
Mesaj Sayı : 33
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ş!


Hər ikinizə təüəkkürlər!

Anti-armenia.ORG
    

Istifadəçi
    2012-05-09 11:16 GMT                 

AzSecurity



Gold
Mesaj Sayı : 122
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   5  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər :
Ölkə :
Məslək : Linux sys admin
Yaş :
Mesaj :

Mövzunu Paylaş!


BlackMinD məncə bir yerdə səhv edirsən.Sən scripti yoxlayan zaman SELECT * FROM makale WHERE id=$id AND sef='$sef' burdakı bazanın yolunu dəyişmirsən.Bəlkədə mən səhv edirəm ancaq dedim bəlkə fikir verməmisen scriptdə.

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

Istifadəçi
    2012-05-09 13:54 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ş!


Azsecurity
yox onu əyani misal üçün göstərdim sənə ki,necə SQL querylər ilə manipulyasiya etmək olur.

fakt bax verdiyin yuxarıdakı skriptdə:
Peace of Vulnerable SQL querydir.Yəni SQL injectiona vulnerabledir.
SELECT * FROM makale WHERE id=$id AND sef='$sef'

Sən orda

if(!$vt_kontrol){
//die(mysql_error());//false
echo "
<center><h1>Yemedin Getdin! <br>
</h1></center>
" ;

etməklə skripti qorumursan.
Bilirsən niyə?
Çünki 1 sətr yuxarıda

$vt_kontrol=mysql_fetch_assoc(mysql_query("SELECT * FROM makale WHERE id=$id AND sef='$sef'"));

bu 1-ci icra olunur və vulnerable olduğundan SQL querylərlə manipulyasiya etməklə

$vt_kontrol biz burada array halına gətiririk.Və true verir o artıq.

if(!$vt_kontrol){
//die(mysql_error());//false
echo "
<center><h1>Yemedin Getdin! <br>
</h1></center>
" ;

isə onu görmür ümumiyyətlə.

Həmin

if(!$vt_kontrol)
{
//bla bla bla
}

eyni şeydir bununla:

$vt_kontrol=mysql_fetch_assoc(mysql_query("SELECT * FROM makale WHERE id=$id AND sef='$sef'")) or die("Yemedin Getdi bla bla bla");

Burda və yuxarıdakı if(!$vt_kontrol) isə ümumiyyətlə fixə aidiyyatı yoxdur bax sözümün canı da odur məhz.

Fixi isə bir daha qeyd edirəm type casting~type juggling+mysql_real_escape_string()+
mysql_query("SELECT * FROM makale WHERE id='$id' AND sef='$sef'")

bu tipli query vermək lazımdır.

belədə isə redhatz.org da verdiyim $_SERVER['QUERY_STRING'];- ləri parse etməklə bu tipli vulnların həyata keçməsinə maneə törədə bilərik.
Attackerin işi ən azından çox çətinləşəcək.

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

Istifadəçi
    2012-05-09 14:01 GMT                 

TheRock



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

Mövzunu Paylaş!


Ən yaxşı Anti SQL isteyirsinizsə. Seditionun Revolution versiyasında var və AkaStepin özünə aitdir elə. ))

AATeam | EH
Anti-armenia.ORG
    

Istifadəçi
    2012-05-09 20:21 GMT                 

MetaizM



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

Mövzunu Paylaş!


telnenem cox sey yazmayacam azsecurity fikir versen
step gelen id deyerini inisialize yeni bos gelerse vs.
sonra gelen melumati gonderib mysql escape string'e
onuda kecenden sonra meselen aaaaaaaa yazsaq php
burda string tipli deyeri integer edib (typecasting) 0 olaraq
sorgu gonderecek artiq burdada sqlin kecme shansi demek olarki yoxdur

Anti-armenia.ORG
    

Istifadəçi
    2012-05-09 20:32 GMT                 

AzSecurity



Gold
Mesaj Sayı : 122
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   5  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər :
Ölkə :
Məslək : Linux sys admin
Yaş :
Mesaj :

Mövzunu Paylaş!


MetaizM və BlackMinD geniş anlatım üçün təşəkkürlər.BlackMinD inboxdada başa saldı mövzunu silmək istədim dediki qalsın bəlkə kiməsə lazım olar.Ona görə mövzu qalır bir daha təşəkkürlər.

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