java sqlserver ssl_拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)...
工作準備
?一臺SQLSERVER 2005/SQLSERVER 2008服務
?SQLSERVER jdbc驅動程序
?Java開發環境eclipse + jdk1.8
?java反編譯工具JD-Core
反編譯JDBC分析SQLSERVER客戶端與服務器通信原理
SQLServerConnection.class
1、經過反編譯分析SQLServerConnection.class文件我們可以看到登錄時所執行的算法,代碼如下圖所示:
由此可見sqlserver在用戶名密碼傳輸過程中使用了SSL加密,從上圖中我們可以看到在啟用SSL加密前執行了Prelogin(String param,int param2)函數,該函數算法大致如下圖所示:
2、經過一些列分析得知,在啟用SSL加密前客戶端向服務器發送了客戶端驅動信息之后立即讀取服務返回的版本內容以作判斷當前所使用的驅動是否支持。
3、在反編譯分析代碼過程中可以看到用戶名密碼加密算法分別所示:
由此可以通過逆向推算得出用戶名密碼解密算法如下所示:
TDSChannel.class
1、經過反編譯分析SQLServerConnection.class 文件得知通過調用TDSChannel.class 中的函數enableSSL(String param,int param2),那么經過反編譯TDSChannel.class文件分析得知該函數主要代碼段如下所示:
2、由此可見SQLSERVER客戶端僅在傳輸用戶名密碼時啟用了ssl加密,登錄認證前后數據傳輸均采取明文傳輸。
SSL通道攔截設計
1、SQLSERVER原始SSL通信如下:
2、攔截后通信如下:
程序設計
1、認證服務偽代碼如下:
2、讀取客戶端驅動版本等信息并模擬sqlserver返回的版本信息,偽代碼如下所示:
3、完成以上兩步操作后立即開啟SSL通道等待客戶端開啟SSL并握手,偽代碼如下:
4、若SSL握手成功則接收客戶端發送的用戶名密碼信息,并立即連接目標服務偽代碼如下:
5、若連接成功則模擬客戶端發送驅動版本信息并讀取目標服務返回的信息反饋給真正的用戶,緊接著開始SSL握手,若握手成功則立即發送真實的用戶名密碼,偽代碼如下所示:
SSL通道用戶名密碼替換以及實時監控
1、使用SQLSERVER標準客戶端工具填寫堡壘主機地址和端口號用戶名密碼以及目標主機信息,如下所示:
2、點擊“連接”登錄實現轉發連接功能,登錄成功如下所示:
3、通過實時監控窗口查看SQLSERVER客戶端執行的命令,如下圖所示:
4、新建查詢執行命令,如下所示:
5、通過實時監控查看執行的命令信息,如下所示:
到此為止已完成所有工作。
總結
以上是生活随笔為你收集整理的java sqlserver ssl_拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: w10家庭版安装java不_小编为你分析
- 下一篇: java 内存数据库 sql_ssm+r