Bismillâhirrahmânirrahîm
Essalâmü aleyküm ve rahmetullâhi ve berakâtû. Sevgili TurkHackTeam ferdleri, bu konumda sizlere SQLMAP ile WAF bypass yöntemlerini anlataacağım. Bu konuda göreceğiniz başlıklar şunlardır:
KIsaca SQLMAP Nedir?
Kısaca WAF Nedir ve SQL MAP ile WAF Bypass?
Tamper Script Nedir?
Örnek Komutlar ve Tamper Script Kullanımı
Ek olarak, tamperleri ve tamperlerin mantığını anlayabileceğiniz kaynaklara buradan ulaşabilirsiniz:
Medium - SQLMap Tamper Scripts (SQL Injection and WAF bypass) Tips
Github - sqlmap-tamper repository
Alfa Threat - SQLMAP TAMPER SCRIPTS
Github - sqlmap tamper scripts by v3rlly
SQLMAP Nedir?
SQLMAP, web uygulamalarında SQL saldırısını tespit etmek ve bu zafiyeti sömürmek için kullanılan bir araçtır. Hedef sisteme SQL sorguları gönderir ve veritabanına erişim sağlar. SQLMAP, bize bazı SQL için bazı özellikler sunar.
Farklı türdeki SQL tekniklerinin (Blind SQL, Error-Based SQL, Time-Based v.b) yapılmasına olanak sağlar.
Database içerinde bulunan verileri çekmemize, listelememize ve verilerde oynama yapmamıza olanak sağlar.
WAF gibi güvenlik sistemleri için özel betikler sağlar.
Tamper Script Nedir?
Tamper Script, SQLMAP için geliştirilmiş, SQL sorgularını değiştirmeye yarıdayan manipületik betiklerdir. Bu betikler, güncelik mekanizmalarını daha kolay aşılacak hale getirmek için tasarlanmıştır. Harfler, özel karakterler bazı kurallara göre değiştirilir. Sorgular, rasthele karakter, şifreleme ve yorumlar sayesinde atlatılır.
Örnek Komutlar ve Tamper Script Kullanımı
Tamper kullanımı çeşitli databaseler için değişebilir ancak mantıksal olarak çoğunda bu tamperler de çalışmaktadır. Yine de databaselere göre kategorize etmek istiyorum. Önde gelen databaselere bakacak olursak şu şekilde önümüze çıkacaktır:
Oracle Database
MySQL
Microsoft SQL Server
Postgre SQL Server
MongoDB
IBM Db2
Redis
Casssandra
SQLite
Bu databaselere göre de farklı tamper şenecekleri uygulanabilmektedir. Hali gelin beraber bakalım.
Oracle Database
Oracle, özellikle karmaşık sorgu yapıları ve ifadeleri ile ön plana çıkmaktadır. Bunun için de Kullanılacak tamperler şunlardır:
space2plus = Boşluk karakterlerini "+" karakteri ile değiştirir. Eğer WAF, boşluk karakterlerini algılıyorsa bu şekidle atlatılabilir.
escapequotes = Tek tırnak (') işaretinden kaçmak için "\" karakteri kullanılır. Bu sayede tırnak işareti engellenir.
appendnullbyte = Eğer, WAF tam sorgulama yapısına bakıyor ve kontrolden geçiriyor ise sorguya "\0" eklenerek atlatmaya çalışır.
randomcase = Harflere duyarsız sorgular için geçerlidir. SELECT, harfleri duyarsız olarak seçtiği için harfleri rastgele değiştirir ve atlatmaya çalışır.
MySQL
MySQL, büyük ve küçük harf kullanıma duyarsız ve söz dizilimleri dstekler. Bunun için de kullanılan tamperler şunlardır:
space2comment = Boşlukları yorum satırına çevirir.
unionalltounionselect = "UNION ALL SELECT" ifadeleri "UNION SELECT" ifadesine çevrilir. Bu tamper genellikle "ALL" kelimesinin algılandığı durumlarda kullanılır.
equaltolike = "=" işaretini "LIKE" ifadesi ile değiştirir. Eşittir işareti tespit edildiğinde kullanılır.
randomcase = Harflere duyarsız sorgular için geçerlidir. Anahtar kelimedeki büyük ve küçük harfleri değiştirir.
Microsoft SQL Server
MSSQL'in prosedür temelli yapısı ve sistem prosedürlerine destek verir.
sp_password = MSSQL'in sistem prosedürlerini çalıştırıyormuş gibi sorgular göndermemize ya da değiştirmemize yardımcı olur.
space2mssqlblank = Boşluk karakterleri MSSQL'in özel boşluk karakterine denk gelen değere (%20) çevirir.
charencode = SQL sorgularını ASCII formatında gönderir.
randomcase = Anahtar kelimedeki büyük ve küçük harfleri değiştirir.
PostgreSQL
PostgreSQL, uyumluluğu güçlü olan, harflere duyarlılığı ile bilinen bir yapıya sahiptir. Bunun için, önceki tamperler yerine daha farklı ve özel tamper kullanır.
between = "=" işaretini "BETWEEN" ifadesi ile değiştirir.
space2dash = Boşluk ifadelerini (- -) ile değiştirerek boşluk algılamalarını bypass eder.
versionedkeywords = Kelimelere PostgreSQL versiyon bilgisi ekler. Bu sayede değişen anahtar kelimeler ile bypass edilebilir.
MongoDB
MongoDB, HTTP parametreleriyle beraber bypass edilebilir.
base64encode = Gönderilen sorguları base64 ile şifrelenmiş bir şekilde gönderir.
randomcomments = Yorumlar, satırlar ekleyerek statik sorguyu tespit eden WAF'ları atlamaya yardımcı olur.
IBM Db2
Karmaşık bir SQL yapısıyla çalışmaktadır.
space2hash = Boşluk ifadelerini yorum satırına çevirmek için "#" işaretine çevirir.
appendnullbyte = Sorguya null byte ekleyerek sorgu bütünlüğünü kontrol eden WAF'ları atlatmaya yardımcı olur.
Redis
NoSQL veritabanıdır. HTTP sorguları gibi sorgular gönderildiğinde cevap vermektedir.
base64encode = Gönderilen sorguları base64 ile şifrelenmiş bir şekilde gönderir.
Cassandra
Apache Cassandra, NoSQL tabanlıdır ve kendi sorgu (CQL) dilini kullanır.
space2randomblank = Boşluk karakterlerini farklı alternatiflerle değiştirir. %20, +, -- gibi ifadeler örnek verilebilir.
hexencode = Gönderilen sorgular hex haline çevirilmiş şekilde gönderilir. Bu sayde düz metin algılamaya yönelik olan WAF'lar atlatılabilir.
SQLite
SQLite, birçok uygulamaya gömülü olarak gelen hafif bir veritabanıdır.
space2randomblank = Boşluk karakterlerini farklı alternatiflerle değiştirir. %20, +, -- gibi ifadeler örnek verilebilir.
hexencode = Gönderilen sorgular hex haline çevirilmiş şekilde gönderilir. Bu sayde düz metin algılamaya yönelik olan WAF'lar atlatılabilir.
Essalâmü aleyküm ve rahmetullâhi ve berakâtû. Sevgili TurkHackTeam ferdleri, bu konumda sizlere SQLMAP ile WAF bypass yöntemlerini anlataacağım. Bu konuda göreceğiniz başlıklar şunlardır:
KIsaca SQLMAP Nedir?
Kısaca WAF Nedir ve SQL MAP ile WAF Bypass?
Tamper Script Nedir?
Örnek Komutlar ve Tamper Script Kullanımı
Ek olarak, tamperleri ve tamperlerin mantığını anlayabileceğiniz kaynaklara buradan ulaşabilirsiniz:
Medium - SQLMap Tamper Scripts (SQL Injection and WAF bypass) Tips
Github - sqlmap-tamper repository
Alfa Threat - SQLMAP TAMPER SCRIPTS
Github - sqlmap tamper scripts by v3rlly
SQLMAP Nedir?
SQLMAP, web uygulamalarında SQL saldırısını tespit etmek ve bu zafiyeti sömürmek için kullanılan bir araçtır. Hedef sisteme SQL sorguları gönderir ve veritabanına erişim sağlar. SQLMAP, bize bazı SQL için bazı özellikler sunar.
Farklı türdeki SQL tekniklerinin (Blind SQL, Error-Based SQL, Time-Based v.b) yapılmasına olanak sağlar.
Database içerinde bulunan verileri çekmemize, listelememize ve verilerde oynama yapmamıza olanak sağlar.
WAF gibi güvenlik sistemleri için özel betikler sağlar.
Tamper Script Nedir?
Tamper Script, SQLMAP için geliştirilmiş, SQL sorgularını değiştirmeye yarıdayan manipületik betiklerdir. Bu betikler, güncelik mekanizmalarını daha kolay aşılacak hale getirmek için tasarlanmıştır. Harfler, özel karakterler bazı kurallara göre değiştirilir. Sorgular, rasthele karakter, şifreleme ve yorumlar sayesinde atlatılır.
Örnek Komutlar ve Tamper Script Kullanımı
Tamper kullanımı çeşitli databaseler için değişebilir ancak mantıksal olarak çoğunda bu tamperler de çalışmaktadır. Yine de databaselere göre kategorize etmek istiyorum. Önde gelen databaselere bakacak olursak şu şekilde önümüze çıkacaktır:
Oracle Database
MySQL
Microsoft SQL Server
Postgre SQL Server
MongoDB
IBM Db2
Redis
Casssandra
SQLite
Bu databaselere göre de farklı tamper şenecekleri uygulanabilmektedir. Hali gelin beraber bakalım.
Oracle Database
Oracle, özellikle karmaşık sorgu yapıları ve ifadeleri ile ön plana çıkmaktadır. Bunun için de Kullanılacak tamperler şunlardır:
space2plus = Boşluk karakterlerini "+" karakteri ile değiştirir. Eğer WAF, boşluk karakterlerini algılıyorsa bu şekidle atlatılabilir.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="space2plus"
escapequotes = Tek tırnak (') işaretinden kaçmak için "\" karakteri kullanılır. Bu sayede tırnak işareti engellenir.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="escapequotes"
appendnullbyte = Eğer, WAF tam sorgulama yapısına bakıyor ve kontrolden geçiriyor ise sorguya "\0" eklenerek atlatmaya çalışır.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="appendnullbyte"
randomcase = Harflere duyarsız sorgular için geçerlidir. SELECT, harfleri duyarsız olarak seçtiği için harfleri rastgele değiştirir ve atlatmaya çalışır.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="randomcase"
MySQL
MySQL, büyük ve küçük harf kullanıma duyarsız ve söz dizilimleri dstekler. Bunun için de kullanılan tamperler şunlardır:
space2comment = Boşlukları yorum satırına çevirir.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="space2comment"
unionalltounionselect = "UNION ALL SELECT" ifadeleri "UNION SELECT" ifadesine çevrilir. Bu tamper genellikle "ALL" kelimesinin algılandığı durumlarda kullanılır.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="unionalltounionselect"
equaltolike = "=" işaretini "LIKE" ifadesi ile değiştirir. Eşittir işareti tespit edildiğinde kullanılır.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="equaltolike"
randomcase = Harflere duyarsız sorgular için geçerlidir. Anahtar kelimedeki büyük ve küçük harfleri değiştirir.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="randomcase"
Microsoft SQL Server
MSSQL'in prosedür temelli yapısı ve sistem prosedürlerine destek verir.
sp_password = MSSQL'in sistem prosedürlerini çalıştırıyormuş gibi sorgular göndermemize ya da değiştirmemize yardımcı olur.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="sp_password"
space2mssqlblank = Boşluk karakterleri MSSQL'in özel boşluk karakterine denk gelen değere (%20) çevirir.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="space2mssqlblank"
charencode = SQL sorgularını ASCII formatında gönderir.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="charencode"
randomcase = Anahtar kelimedeki büyük ve küçük harfleri değiştirir.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="randomcase"
PostgreSQL
PostgreSQL, uyumluluğu güçlü olan, harflere duyarlılığı ile bilinen bir yapıya sahiptir. Bunun için, önceki tamperler yerine daha farklı ve özel tamper kullanır.
between = "=" işaretini "BETWEEN" ifadesi ile değiştirir.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="between"
space2dash = Boşluk ifadelerini (- -) ile değiştirerek boşluk algılamalarını bypass eder.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="space2dash"
versionedkeywords = Kelimelere PostgreSQL versiyon bilgisi ekler. Bu sayede değişen anahtar kelimeler ile bypass edilebilir.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="versionedkeywords"
MongoDB
MongoDB, HTTP parametreleriyle beraber bypass edilebilir.
base64encode = Gönderilen sorguları base64 ile şifrelenmiş bir şekilde gönderir.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="base64encode"
randomcomments = Yorumlar, satırlar ekleyerek statik sorguyu tespit eden WAF'ları atlamaya yardımcı olur.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="randomcomments"
IBM Db2
Karmaşık bir SQL yapısıyla çalışmaktadır.
space2hash = Boşluk ifadelerini yorum satırına çevirmek için "#" işaretine çevirir.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="space2hash"
appendnullbyte = Sorguya null byte ekleyerek sorgu bütünlüğünü kontrol eden WAF'ları atlatmaya yardımcı olur.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="appendnullbyte"
Redis
NoSQL veritabanıdır. HTTP sorguları gibi sorgular gönderildiğinde cevap vermektedir.
base64encode = Gönderilen sorguları base64 ile şifrelenmiş bir şekilde gönderir.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="base64encode"
Cassandra
Apache Cassandra, NoSQL tabanlıdır ve kendi sorgu (CQL) dilini kullanır.
space2randomblank = Boşluk karakterlerini farklı alternatiflerle değiştirir. %20, +, -- gibi ifadeler örnek verilebilir.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="space2randomblank"
hexencode = Gönderilen sorgular hex haline çevirilmiş şekilde gönderilir. Bu sayde düz metin algılamaya yönelik olan WAF'lar atlatılabilir.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="hexencode"
SQLite
SQLite, birçok uygulamaya gömülü olarak gelen hafif bir veritabanıdır.
space2randomblank = Boşluk karakterlerini farklı alternatiflerle değiştirir. %20, +, -- gibi ifadeler örnek verilebilir.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="space2randomblank"
hexencode = Gönderilen sorgular hex haline çevirilmiş şekilde gönderilir. Bu sayde düz metin algılamaya yönelik olan WAF'lar atlatılabilir.
Bash:
sqlmap -u "http://target.com/page?id=1" --tamper="hexencode"
Son düzenleme:


