<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Ömer Tüfekci on Medium]]></title>
        <description><![CDATA[Stories by Ömer Tüfekci on Medium]]></description>
        <link>https://medium.com/@omertufekci?source=rss-7efa1bb84c53------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*oPUJYmc2uhaJkxPhh1UEDw.jpeg</url>
            <title>Stories by Ömer Tüfekci on Medium</title>
            <link>https://medium.com/@omertufekci?source=rss-7efa1bb84c53------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 30 May 2026 17:33:51 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@omertufekci/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[SQL Açığı ve SQLMap]]></title>
            <link>https://medium.com/@omertufekci/sql-a%C3%A7%C4%B1%C4%9F%C4%B1-ve-sqlmap-43ef292fc5ae?source=rss-7efa1bb84c53------2</link>
            <guid isPermaLink="false">https://medium.com/p/43ef292fc5ae</guid>
            <category><![CDATA[white-hat-hacker]]></category>
            <category><![CDATA[sql]]></category>
            <category><![CDATA[sql-injection]]></category>
            <category><![CDATA[hacking]]></category>
            <dc:creator><![CDATA[Ömer Tüfekci]]></dc:creator>
            <pubDate>Sat, 10 Oct 2020 09:50:19 GMT</pubDate>
            <atom:updated>2020-10-10T09:50:19.517Z</atom:updated>
            <content:encoded><![CDATA[<p>Öncelikle SQL kavramından çok kısa bahsedelim. SQL, diğer veritabanları gibi kendine has syntax biçimleri olan bir veri tabanı türüdür. PostgreSQL, MySQL, MsSQL gibi türleri vardır fakat bu konulara yazımda değinmeyeceğim.</p><p>SQL kavramı kelime anlamı olarak ”Yapılandırılmış Sorgu Dili” (Structured Query Language) anlamına gelmektedir. Yani ortada bir sorgu-yanıt ilişkisi vardır. Örneğin bir sosyal medya uygulamasında veya bir e-ticaret sitesinde sizin kayıt olurken girdiğiniz kullanıcı adı ve şifreler bir veri tabanına kaydedilir ve bundan sonraki login işlemlerinizde, sistem kullanıcı adı şifre kombinasyonlarınızı veri tabanından sorgulayarak eşleştirmeye çalışır. Eşleşirse girersiniz, eşleşmezse giremezsiniz. Dolayısıyla SQL veritabanları bir <strong>request-response</strong> altyapısıyla çalışır.</p><p>Şimdi gelelim asıl konumuza,</p><h4>SQL neden bir açık haline gelir ve nasıl sömürülür?</h4><p>Öncelikle burada anlattığım her şey etik amaçlı kullanımlar içindir. <em>Yasadışı kullanımın sorumlulukları tamamen </em><strong><em>SİZE</em></strong><em> aittir.</em></p><p>Üstte dediğim gibi veritabanları, tıpkı yazılım dilleri gibi standart bir syntax türüne sahiptir ve bu veri tabanlarını yazan yazılımcıların yaptığı mantıksal hatalar doğrultusunda belirli sistemsel zafiyetler ortaya çıkar. SQL açığının asıl nedeni kullanıcıdan gelen request’i sorgulamadan ona karşılık gelen response’u kullanıcıya vermesidir. Maalesef bu zafiyet ne kadar hafife alınsa da veri güvenliği açısından şirketler için hiç iyi sonuçlar doğurmayabilir. Zira SQL Injection zafiyeti sayesinde veri tabanlarıyla root izni olmadan gerekli request’i yöneltip istediğiniz response’u alabilirsiniz.</p><p>Bu işlem iki şekilde olur. Birincisi olan Manuel Injection, Tester’ımızın elle yazılan sorgularla veri tabanında kayıtlı olan verilerin çekmesi işlemidir. İkincisi ve bana göre en tehlikelisi SQLMap…</p><h4>SQL Açığı Nasıl Anlaşılır?</h4><p>SQL Injection site URL’lerinde belli olan bir zafiyettir. Tabi bu siteleri burada paylaşmamız etik olmayacağından ornek-site.com üzerinden gösterecek olursak;</p><p><a href="https://www.ornek-site.com/page.php?id=5">https://www.ornek-site.com/page.php?id=5</a></p><p>Sonunda gördüğümüz ‘sayfa.php?id=x&#39; yapısı bütün SQL Injection zafiyetlerinde bulunmaktadır. Fakat bu ibare bulunan bütün sistemlerde SQL açığı olmayabilir.</p><p>Bu bahsettiğimiz ibare aslında bir veri tabanının giriş kapısıdır ve bu işi yapabilmek için girişteki güvenlikten kaçmamız gerekir. Bu nedenle kılık değiştiririz. Bu işlem tırnak (‘) işaretiyle string bölümünden kaçmak demektir. Bu işlem sonrasında alacağınız hata şu şekilde olabilir:</p><h4>You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near &#39;’index.php?id=2’’&#39; at line 1</h4><p>Eğer bu hata varsa SQL açığı mevcuttur, hatta daha ilerisi olarak şunu söyleyebilirim; sayfa görüntüsünde bir değişiklik var ise zafiyetin mevcut olma ihtimali yüksektir. Fakat ileri seviye zafiyetleri sömürmek için biraz daha farklı parametreleri kullanacağız.</p><p>Manuel Injection kısmında istediğimiz SQL cümlesini elle URL çubuğuna girebiliriz veya benim anlatacağım kısım olan SQLMap parametreleriyle sömürme işlemine devam edebiliriz. Manuel Injection konusuna derin bir şekilde girmeyeceğim çünkü biraz profesyonellik gerektiren bir konu ve bazen başarısız olabiliyor. Fakat SQLMap bir sistemde zafiyet varsa kesinlikle veri çekme işlemi yapabilir hatta konu, ileri seviyelerde sistemlere shell sokarak root olmaya kadar gidebilir.</p><p>SQLMap, security Linux dağıtımlarında (örneğin: Kali, Parrot vs.) default olarak yüklenen bir hack tool’udur.</p><p>Veri tabanlarından veriler tıpkı bir rafta kitap saklamak gibidir. O kitabı almak için önce odaya, sonra dolaba, ardından rafa yaklaşıp kitaba erişirsiniz ya, veriler de aynı şekilde saklanır.</p><p>Burada oda veritabanı, dolap tablo, raf kolonlar, kitap ise verilere benzetilmiştir. Önce oda benzerindeki yapılar olan veri tabanlarını çekeriz. Daha sonra veri tabanının içinde bulunan ve dolap benzeri yapı olan “Tablo” yapılarını, raf benzetmesi yaptığımız “Kolon” yapılarını çekeriz. En son eriştiğimiz kademe olan “Veriler” kısmı da zaten kitabın ta kendisi oluyor.</p><p>SQLMap’te bu kitaba erişmek için attığınız adımların her biri birer parametre olarak karşımıza çıkmaktadır. Hemen bir örnek ile inceleyelim.</p><blockquote>sqlmap -u https://www.ornek-site.com/page.php?id=5 - -dbs</blockquote><h4>-u</h4><p>Öncelikle -u parametresiyle başlayalım. “-u” parametresi tool’a, sitenin girileceğini belirtir.</p><h4>--dbs</h4><p>“Databases” kelimesinin kısaltmasıdır. Sitede bulunan veri tabanlarını. Çekmeye yarar.</p><h4>Kısaca biz parametrelerle programa şunu söylemekteyiz, “Bana bu URL’in veri tabanlarını ver. ”</h4><p>Geldik ikinci aşamaya. Neredeyse her sistemde information_schema adlı bir veritabanı mevcuttur. İsterseniz merak ederseniz onun içine de bakabilirsiniz fakat bu veritabanları genellikle boştur. Asıl veriler mevcut olan diğer veri tabanlarında tutulur. Örneğin “database” adlı bir veritabanı bulunduğunu düşünürsek:</p><blockquote>sqlmap -u https://www.ornek-site.com/page.php?id=5 - D database --tables</blockquote><h4>--tables</h4><p>“tables” parametresi üstte bahsettiğim tablo yapılarına tekabül etmektedir. Buradaki cümlecikle tool’a söylediğimiz şudur; <strong>“database veri tabanındaki tabloları bana getir. ”</strong></p><p>Ayriyeten az önce veri tabanlarını çekmek için kullandığımız --dbs parametresi, -D olmuş durumda.</p><blockquote><strong>Bir parametrenin bir sonraki adımına geçerken ‘-’ karakterlerinden biri silinir ve parametrenin baş harfi kullanılarak diğer adıma geçer. Örn;</strong></blockquote><blockquote>--dbs → -D</blockquote><blockquote>--tables →- T</blockquote><p>Haydi üçüncü ve veriye ulaşmadan önceki son aşamaya geçelim.</p><p>Veritabanı ağacında tablodan sonra ne geldiğini hatırlıyorsunuzdur. Hatırlamayan arkadaşlar için tekrar hatırlatayım, sıra <strong>kolonlarda</strong>.</p><p>Diyelim ki “<em>table</em>” adında bir adet tablomuz olsun. Bunun kolonlarına erişmek için kullanacağımız komut;</p><blockquote>sqlmap -u https://www.ornek-site.com/page.php?id=5 - D database -T table --columns</blockquote><p><em>--columns</em> parametresinin ne olduğunu açıklamamıza sanırım gerek yok. Tool’a dediğimiz cümle tam olarak şu: “<em>database</em> veri tabanındaki <em>table</em> tablosundan kolonları çek.”</p><p>Gelelim son adım olan veri çekme işlemine. Yukarıda sırasıyla veri tabanlarını, tabloları ve kolonları çektik. Yani ilk başlarda verdiğim örneğe göre sırasıyla odanın, dolabın ve rafın bir nevi fotoğrafını çekmiş olduk.</p><p>Bu durumda aldığımız kolonların şu şekilde olduğunu düşünürsek;</p><p>column1, column2, column3…column8</p><blockquote>sqlmap -u https://www.ornek-site.com/page.php?id=5 - D database -T table -C column1 --dump</blockquote><p>Burada bir kolondaki verileri çekmek için bu şekilde bir komut girdisi yapabiliriz. Birden fazla kolondaki veriyi çekmek için ise (örn; username,password veya id,username,password gibi);</p><blockquote>sqlmap -u <a href="https://www.ornek-site.com/page.php?id=5">https://www.ornek-site.com/page.php?id=5</a> — D database -T table -C column1,column2 --dump</blockquote><p>şeklinde bir komut satırı kullanabiliriz. Genellikle iki adet kolonu çekmenin amacı birbirleriyle bağlantılı veri kolonlarının karışmaması içindir. Örneğin bir sistemde admin kullanıcının id’si <em>1</em>, kullanıcı adı <em>admin</em>, şifresi <em>admin123 </em>gibi şeyler olabilir. SQLMap bu bilgileri tek tek çekince karışık vaziyette karşınıza çıkarsa da hepsini birlikte çekince bir tablo şeklinde önünüze sunar.</p><p>Bu yazımda şimdilik bu kadarlığa değineceğim. Sıradaki SQLMap yazımda level ve risk parametreleri gibi biraz daha işin zorlu konularına değinmeyi düşünüyorum. Sağlıcakla kalın, okuduğunuz için teşekkür ediyorum.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=43ef292fc5ae" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>