Blogda Ara

24 Mart 2017 Cuma

Sql Injection Açıkları & Bypass Engelleme

Selamün Aleyküm..

@OxyGeN arkadaşımız makaleler arşivinde aspx türleri için injection fixleme işlemini anlatmış.
Bknz : http://www.turkz.org/Forum/makaleler/sql-injection-vulnerability-engelleme.33/
Bizde bu yazımızda php türlerinde Sql injection nasıl kapatılır onu öğreneceğiz. Tavsiyem her zaman şu yöndedir kendi kurduğunuz sisteme her zaman ilk giren açığını bulan kişi olmanızdır.
Konuyu fazla uzatmadan gelelim fixleme işlemine..

Dilerseniz Panel Bypass ile başlayıp örnek fixlenmiş login formunu paylaşalım..

'=' 'or' Ve Diğer Panel Bypasslar için.
PHP:
<?php

$ourLogin 
"admin";$ourPassword "turkz";
session_start();

if (
$_SESSION['login']!=$ourLogin && $_SESSION['password']!=$ourPassword) { 


if (
$_POST['login']==$ourLogin && $_POST['password']==$ourPassword) {

$_SESSION['login'] = $_POST['login'];$_SESSION['password'] = $_POST['password'];header("Location: index.php");


}
else {


echo 
"
<form action=index.php method=post>

K. Adi :<br>
<input type=text name=login value=''><br>
Gizlilik :<br>
<input type=password name=password value=''><br>

<input type=submit value=' Tamam '>


</form>
"
;

exit;

Bu sayede admin giriş panelini filtrelemiş, gereksiz karakterleri devre dışı bırakmış olduk örnek formdur kendinize göre düzenleyiniz..

Lamer düzey Sql Atakları İçin;

KOD:
$injectcheck = preg_replace("[^À-ÿa-zA-Z0-9\\\-\.\,\:\s\r\t\n ]",'',$injectcheck);
Tüm sayfalara include ediniz.

Sql Injection Basit Ataklar ( ' -- 'a - * - 9999 vb.) İçin..

Fixlenmiş php kodları aşağıdaki gibidir, sql tehlikesi olan tüm sayfalara include ediniz. Tavsiyem sorgulama & form içeren tüm sayfalardır..


PHP:

function clearMethod($mVar){
    if(
is_array($mVar)){
        foreach(
$mVar as $gVal => $gVar){
            if(!
is_array($gVar)){
                    
$mVar[$gVal] = htmlspecialchars(strip_tags(urldecode(mysql_escape_string(addslashes(stripslashes(stripslashes(trim(htmlspecialchars_decode($gVar)))))))));  // -> Dizi olmadığını fark edip temizledik.
            
}else{
                    
$mVar[$gVal] = clearMethod($gVar);
            }
        }
    }else{
        
$mVar htmlspecialchars(strip_tags(urldecode(mysql_escape_string(addslashes(stripslashes(stripslashes(trim(htmlspecialchars_decode($mVar))))))))); // -> Dizi olmadığını fark edip temizledik.
    
}
    return 
$mVar;
    

}
// Kullanım
$_GET clearMethod($_GET); // -> GET verilerini temizledik.$_POST clearMethod($_POST); // -> POST verilerini temizledik.$_SESSION clearMethod($_SESSION); // -> SESSION verilerini temizledik.$_COOKIE clearMethod($_COOKIE); // -> COOKIE verilerini temizledik.?>
###

Basit ataklar bu yönde engellemiş olduk..
Peki bypass engelleme nasıl yapılır?


Mysql_escape_string filtreleme işlemlerini duymuşsunuzdur. Bilmeyenler googleden araştırıp öğrenebilir.. String filtreleme işlemleri bittikten sonra Sql üzerindeki kullanıcı yetkilerini gözden geçiriniz, gereksiz gördüğünüz yetkileri sınırlandırın ve ardından aşağıdaki komutlarla devam edelim..


PHP:

if(!function_exists('stripos')) {

function 
stripos_clone($haystack$needle$offset=0) {
    return 
strpos(strtoupper($haystack), strtoupper($needle), $offset);
}

} else {

function 
stripos_clone($haystack$needle$offset=0) {
    return 
stripos($haystack$needle$offset=0);
}

}

if(isset(
$_SERVER['QUERY_STRING'])) {
$queryString strtolower($_SERVER['QUERY_STRING']);

if (
stripos_clone($queryString,'%select%20') OR stripos_clone($queryString,'%20union%20') OR stripos_clone($queryString,'union/*') OR stripos_clone($queryString,'c2nyaxb0') OR stripos_clone($queryString,'+union+') OR stripos_clone($queryString,'http://') OR stripos_clone($queryString,'https://') OR (stripos_clone($queryString,'cmd=') AND !stripos_clone($queryString,'&cmd')) OR (stripos_clone($queryString,'exec') AND !stripos_clone($queryString,'execu')) OR stripos_clone($queryString,'union') OR stripos_clone($queryString,'concat') OR stripos_clone($queryString,'ftp://')) {
      
echo 
base64_decode("c2lrdGlyZ2l0IGFtaW5hIGtvZHVtdSBsYW1lciBpYm5lc2k=");
exit;

}
gerekli gördüğünüz yerlere include ediniz. Ve mutlaka POST'ları strip_tags 'den geçiriniz..

Bugünlük bu kadardı..

Selametle..

Hiç yorum yok:

Yorum Gönder

Statics