Arka plan
Bu günlerde neredeyse Her web sitesi bir veritabanı kullanır. Bir sunucu uygulaması formüle edilecek bir sorgu Bu, bir ziyaretçi siteden veri istediğinde veritabanına gönderilir. Bu sorgularda kullanılan programlama dili genellikle SQL’dir. Veritabanı sorgusunu oluştururken bir sunucu uygulamasının istekte bulunan kullanıcının erişim düzeylerini dikkate alması gerekir; yalnızca kullanıcının erişebildiği veriler döndürülmelidir.
Peki ya bu süreçte bir yerde size izin veren bir kusur varsa sorguyu işlemek bu veritabanına gönderiliyor mu? Binlerce okul kaydına, özel finansal verilere veya saldırıya uğramış bir güvenlik duvarına sahip olabilirsiniz. Ciddi şeyler, veri sızıntıları köşedeler.
SQL Enjeksiyonları (SQLi) bu nedenle kritik hatalar olarak kabul edilirhata ödül programlarında genellikle sizi en yüksek ödemelerle ödüllendirirler.
HEMA
Daha önceki raporumda anlatıldığı gibi; HEMA’yı seviyorum. Bir müşteri olarak yüksek kaliteli ürünlerinden memnunum ve bir güvenlik araştırmacısı olarak iletişim kurma biçiminden (duyarlı ve arkadaş canlısı) memnunum. Ayrıca, hata raporlarını açıklamama izin veriyorlar, böylece onların hatalarından ders alabilirsiniz ve son olarak ama bir o kadar da önemlisi, eğer iyi hatalar bulursanız gerçekten harika sonuçlarla karşılaşabilirsiniz. en kötüsü veya elmalı turta.
Müşteri verilerini daha güvenli hale getirerek onlara tekrar yardımcı olmak için iyi nedenler; kendi resimlerim de dahil.
Keşif, fotoğraf projeleri
Bugün etrafı tıklatarak başlıyoruz Fotoğraf Projesi web sitesinin bir parçası. Fotoğraf projeleri oluşturmanıza (fotoğraf kitaplarını düşünün) ve toplu fotoğraf basmanıza olanak tanıyan bir hizmet oluşturmanıza olanak tanır. Birkaç saat sonra fiziksel mağazadan alabileceğiniz fotoğraflar. HEMA’nın kullandığı farklı alt alanlar hizmetleri için; her birinin kendi API’si var.
Savunmasız uç nokta
Sorgu dizesi Ve POST parametreleri yakından takip ettiğim kişilerdir. Doğrudan bir SQL sorgusuna ayrıştırılabileceğine dair bana ipucu veren bir şey var mı?
SQL sorgularından tanıdığım sözcükleri tetikliyorum; from, where, order by, select, limit, offset, id
bunlardan bazılarıdır. SQL hakkında biraz bilgi sahibi olmanızın faydası olur; yani bu konuda yeniyseniz, freeCodeCamp’e gidin ve hızlı bir kursa katılın :-).
HEMA şunu kullanır: harici alt alan adı belirli fotoğraf projeleri için: https://fasteditor.hema.com/
Birisi bu URL’yi her açtığında, ilk istekler web tarayıcısı tarafından yapılacak uç noktaya bir tanesidir: https://fasteditor.hema.com/api/user/
Bu uç nokta önceki fotoğraf projelerinin bir listesini döndürür. Kimliğe uygulanan azalan düzende düzgün şekilde sıralanmış.
Eğer yaparsak ne olur? bir tane ekle '
içine orderby
değer? Sorguyu kırabilir miyiz?
Bir hatamız var umut verici görünen arka kısım; bize PDO (PHP Veri Nesneleri) kullanıldığını ve hatta SQL sorgusunun bir parçasını içerdiğini öğrenir. Gerçek şu ki bizim '
Bu hata mesajının içinde kaçış yok büyük kırmızı bayrak.
Yapmaya çalıştığımızda her zaman yardımcı olur yeniden inşa etmek hatadan yararlanmaya çalışırken sunucu kodu. Hatanın farklı kısımlarını Google’da araştırıp bulgularımı birleştirmeye çalışıyorum. sözde kod. Örneğin, sunucu tarafında yapılmakta olan olası bir hata hakkında ipucu veren bu yığın akışı gönderisini buldum.
Ancak asıl sebebin ne olduğundan emin değilim; Bu nedenle olası temel neden hakkındaki düşüncelerinizi paylaşmaktan çekinmeyin, bunu yorumlara bırakın!
Sözde kod
$dbh = new PDO("photos");$orderToUse = $_GET['orderby'];
$stmt = $dbh->prepare('SELECT * FROM photos where userId = :username ORDER BY '.$orderToUse.' LIMIT :limit');
$stmt->execute( array(':username' => $_REQUEST['username'], ':limit' => $_REQUEST['limit']) );
SQL Haritası
Size yardımcı olacak harika bir araç SQL enjeksiyon hatalarını keşfedin ve kullanın SQLMap’tir. Size kavram yüklerinin kanıtını döndürebilir ve hatta kurban veritabanının tam dökümünü yapmak bile mümkündür.
Haydi kaydetmek şüpheli savunmasız bir metin dosyasındaki istek ve SQLMap’i çalıştırın: kullanın -r
dosyanızı yüklemek için şunu kullanın: -p
test etmek ve kullanmak istediğiniz parametreyi belirtmek için -f
kapsamlı veritabanı sürümü parmak izi alma.