[20191127]表 full Hash Value的計算.txt

来源:https://www.cnblogs.com/lfree/archive/2019/11/27/11943049.html
-Advertisement-
Play Games

[20191127]表 full Hash Value的計算.txt--//曾經做過表full Hash Value的計算,當時我是通過建立簡單的schema以及表名的形式,使用hashcat破解oracle的--//表 full Hash Value的計算,參考鏈接:http://blog.itp ...


[20191127]表 full Hash Value的計算.txt

--//曾經做過表full Hash Value的計算,當時我是通過建立簡單的schema以及表名的形式,使用hashcat破解oracle的
--//表 full Hash Value的計算,參考鏈接:

http://blog.itpub.net/267265/viewspace-2149366/ => [20171227]表的FULL_HASH_VALUE值的計算
http://blog.itpub.net/267265/viewspace-2214232/ => [20180914]oracle 12c 表 full_hash_value如何計算.txt

--//得到的結論是:
--//表的FULL_HASH_VALUE計算就是table_name.owner加上"\01\0\0\0".
--//12c引入了PDB,表的full_hash_value是table_name.owner.con_name\01\0\0\0的md5sum值.

--//昨天看了一篇博客,鏈接https://mvelikikh.blogspot.com/2019/07/vdbpipes-unveiling-truth-of-oracle-hash.html
--//作者通過DebugTrace獲得oracle內部函數,主要通過kggmd5Update,確定裡面參與運算的字元.
--//我僅僅重覆作者的測試驗證這個過程:

1.環境:
SYS@book> @ ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

2. 定位相關內部函數:

$ gdb $(which oracle )
GNU gdb (GDB) Red Hat Enterprise Linux (7.0.1-45.el5)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle...(no debugging symbols found)...done.

(gdb) disassemble kglComputeHash
...
0x00000000098445d8 <kglComputeHash+96>: movl   $0xefcdab89,0x4(%r9)
0x00000000098445e0 <kglComputeHash+104>:        mov    -0x48(%rbp),%r10
0x00000000098445e4 <kglComputeHash+108>:        movl   $0x98badcfe,0x8(%r10)
0x00000000098445ec <kglComputeHash+116>:        mov    -0x48(%rbp),%r11
0x00000000098445f0 <kglComputeHash+120>:        movl   $0x10325476,0xc(%r11)
0x00000000098445f8 <kglComputeHash+128>:        mov    0x10(%r15),%rsi
0x00000000098445fc <kglComputeHash+132>:        mov    (%r15),%edx
0x00000000098445ff <kglComputeHash+135>:        callq  0x97f09a4 <kggmd5Update>
0x0000000009844604 <kglComputeHash+140>:        movzbl 0x8(%r15),%eax
0x0000000009844609 <kglComputeHash+145>:        test   %eax,%eax
0x000000000984460b <kglComputeHash+147>:        je     0x984463a <kglComputeHash+194>
0x000000000984460d <kglComputeHash+149>:        lea    -0x90(%rbp),%rdi
0x0000000009844614 <kglComputeHash+156>:        lea    0x6359d1(%rip),%rsi        # 0x9e79fec <_2__STRING.98.0>
0x000000000984461b <kglComputeHash+163>:        mov    $0x1,%edx
0x0000000009844620 <kglComputeHash+168>:        callq  0x97f09a4 <kggmd5Update>
...
--//你可以發現多處kggmd5Update的調用.

3.建立gdb腳本:
$ cat md5.gdb
set pagination off

break kggmd5Update
  commands
    printf "Length: %d\n",$rdx
    x/8xc $rsi
    c
  end

break kglComputeHash
  commands
    c
  end

break kggmd5Process
  commands
    c
  end

break kggmd5Finish
  commands
    c
  end

--//session 1:
SCOTT@book> @ spid
       SID    SERIAL# PROCESS                  SERVER    SPID       PID  P_SERIAL# C50
---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
        75        751 21617                    DEDICATED 21618       29        156 alter system kill session '75,751' immediate;

--//session 2:
$ gdb -p 21618 -x md5.gdb
...
Breakpoint 1 at 0x97f09a8
Breakpoint 2 at 0x984457c
Breakpoint 3 at 0x97f14be
Breakpoint 4 at 0x97f0830

--//session 1:
SCOTT@book> desc emp
Name     Null?    Type
-------- -------- ------------
EMPNO    NOT NULL NUMBER(4)
ENAME             VARCHAR2(10)
JOB               VARCHAR2(9)
MGR               NUMBER(4)
HIREDATE          DATE
SAL               NUMBER(7,2)
COMM              NUMBER(7,2)
DEPTNO            NUMBER(2)

--//session 2,按c繼續:
Breakpoint 2, 0x000000000984457c in kglComputeHash ()

Breakpoint 1, 0x00000000097f09a8 in kggmd5Update ()
Length: 3
0x7faa77e1fca8: 69 'E'  77 'M'  80 'P'  0 '\000'        0 '\000'        0 '\000'        0 '\000'        0 '\000'
--//length=3,EMP對應表

Breakpoint 1, 0x00000000097f09a8 in kggmd5Update ()
Length: 1
0x9e79fec <_2__STRING.98.0>:    46 '.'  0 '\000'        0 '\000'        0 '\000'        107 'k' 116 't' 99 'c'  110 'n'
--//length=1 ,小數點.

Breakpoint 1, 0x00000000097f09a8 in kggmd5Update ()
Length: 5
0x863db2f4:     83 'S'  67 'C'  79 'O'  84 'T'  84 'T'  0 '\000'        0 '\000'        0 '\000'
--//length=5 ,SCOTT就是owner.

Breakpoint 1, 0x00000000097f09a8 in kggmd5Update ()
Length: 4
0x7fffbb155800: 1 '\001'        0 '\000'        0 '\000'        0 '\000'        -1 ''  127 '\177'      0 '\000'        0 '\000'
--//length=4 ,字元'\001\000\000\000'

Breakpoint 4, 0x00000000097f0830 in kggmd5Finish ()

Breakpoint 1, 0x00000000097f09a8 in kggmd5Update ()
Length: 43
0xbefbe20 <kggmd5padding.0>:    -128 '\200'     0 '\000'        0 '\000'        0 '\000'        0 '\000'        0 '\000'        0 '\000'        0 '\000'

Breakpoint 1, 0x00000000097f09a8 in kggmd5Update ()
Length: 8
0x7fffbb155750: 104 'h' 0 '\000'        0 '\000'        0 '\000'        0 '\000'        0 '\000'        0 '\000'        0 '\000'

--//這些字元拼接起來就是EMP.SCOTT\001\000\000\000,也就是表md5按照此內容計算.

SYS@book> select dbms_crypto.hash(rawtohex('EMP.SCOTT'||chr(1)||chr(0)||chr(0)||chr(0)), 2) c40 from dual;
C40
----------------------------------------
1EA14E682B60AB3ED11D8E77D1E781E2

--//1EA14E682B60AB3ED11D8E77D1E781E 按照4位反轉就是 684ea11e 3eab602b 778e1dd1 0081e7d1
--//驗證看看:

SYS@book> select owner,name,namespace,type,hash_value,full_hash_value from V$DB_OBJECT_CACHE where owner='SCOTT' and name='EMP';
OWNER  NAME NAMESPACE       TYPE  HASH_VALUE FULL_HASH_VALUE
------ ---- --------------- ----- ---------- --------------------------------
SCOTT  EMP  TABLE/PROCEDURE TABLE 3800164305 684ea11e3eab602b778e1dd1e281e7d1

--//對比反轉後結果完全能對上.後面的chr(1)||chr(0)||chr(0)||chr(0)實際上與namespace有關.可以執行如下確定:
--//select distinct kglhdnsp,kglhdnsd,kglobtyd from x$kglob order by 1;

--//使用操作系統命令計算如下:

$ echo -e -n  'EMP.SCOTT\01\0\0\0' | md5sum | sed 's/  -//' | xxd -r -p | od -t x4 | sed  -n  -e 's/^0000000 //' -e 's/ //gp'
684ea11e3eab602b778e1dd1e281e7d1

--//可以發現完成能對上.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 點擊web application ...
  • 1.InnoDB and Online DDL ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE; https://dev.mysql.com/doc/refman/8.0/en/innodb-on ...
  • sql函數設計: 一開始本來是直接用Java的jdbc直接傳輸操作語句的。但後來學了存儲過程發現存儲過程可以提高不少的效率。就重構了自己對資料庫的操作代碼。包括:開啟,查找,修改,關閉。 開啟:直接使用的構造函數,以後使用的時候可以直接把對象new成一個static的變數,可以一直使用,直到使用關閉 ...
  • 問題描述:orcl伺服器要連接orclstd 想要sqlplus sys/410526@orclstd as sysdba 連接orclstd資料庫,但是發現啥意思密碼不對,就對sys密碼進行重新設置 1.在orcl伺服器上連接orclstd伺服器 [oracle@orcl orcl]$ sqlpl ...
  • 最近狀態很不好,一直暈暈暈暈暈暈乎乎的,一個測試實例,下班前修改了一下root的密碼,接著就下班走人,第二天來發現root密碼忘了 剛好自動化安裝腳本整理好了,本來想著算了直接重裝實例得了,簡單省事也花不了半分鐘,反正是測試實例,沒什麼大問題發現有些思維定勢,所以最近一直暗示自己要做一些一上來就排斥 ...
  • 創建資料庫 [root@localhost ~]# sqlite3 testDB.db ...
  • 場景:應用剛上線排除大批量請求的問題線上多次出現的Deadlock found when trying to get lock錯誤代碼:async batchUpdate(skus, { transaction }) { const result = await Promise.all(skus.m... ...
  • 方法 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...