Oracle injection
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.
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,
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
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
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
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.
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.
Unaweza pia kutumia hii kufanya uchunguzi wa bandari za msingi kwa kutumia maswali kama vile
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;
Last updated