1. 程式人生 > >SQL注入漏洞全接觸--入門篇

SQL注入漏洞全接觸--入門篇

 隨著B/S模式應用開發的發展,使用這種模式編寫應用程式的程式設計師也越來越多。但是由於這個行業的入門門檻不高,程式設計師的水平及經驗也參差不齊,相當大一部分程式設計師在編寫程式碼的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。使用者可以提交一段資料庫查詢程式碼,根據程式返回的結果,獲得某些他想得知的資料,這就是所謂的SQL Injection,即SQL注入。

    SQL注入是從正常的WWW埠訪問,而且表面看起來跟一般的Web頁面訪問沒什麼區別,所以目前市面的防火牆都不會對SQL注入發出警報,如果管理員沒檢視IIS日誌的習慣,可能被入侵很長時間都不會發覺。

   但是,SQL注入的手法相當靈活,在注入的時候會碰到很多意外的情況。能不能根據具體情況進行分析,構造巧妙的SQL語句,從而成功獲取想要的資料,是高手與“菜鳥”的根本區別。

   根據國情,國內的網站用ASP+Access或SQLServer的佔70%以上,PHP+MySQ佔L20%,其他的不足10%。在本文,我們從分入門、進階至高階講解一下ASP注入的方法及技巧,PHP注入的文章由NB聯盟的另一位朋友zwell撰寫,希望對安全工作者和程式設計師都有用處。瞭解ASP注入的朋友也請不要跳過入門篇,因為部分人對注入的基本判斷方法還存在誤區。大家準備好了嗎?Let's Go...

入 門 篇

   如果你以前沒試過SQL注入的話,那麼第一步先把IE選單=>工具=>Internet選項=>高階=>顯示友好 HTTP 錯誤資訊前面的勾去掉。否則,不論伺服器返回什麼錯誤,IE都只顯示為HTTP 500伺服器錯誤,不能獲得更多的提示資訊。

第一節、SQL注入原理

   以下我們從一個網站www.19cn.com開始(注:本文發表前已徵得該站站長同意,大部分都是真實資料)。

   在網站首頁上,有名為“IE不能開啟新視窗的多種解決方法”的連結,地址為:http://www.19cn.com/showdetail.asp?id=49,我們在這個地址後面加上單引號’,伺服器會返回下面的錯誤提示:

Microsoft JET Database Engine 錯誤 '80040e14'
字串的語法錯誤 在查詢表示式 'ID=49'' 中。
/showdetail.asp,行8

從這個錯誤提示我們能看出下面幾點:

1.網站使用的是Access資料庫,通過JET引擎連線資料庫,而不是通過ODBC。
2.程式沒有判斷客戶端提交的資料是否符合程式要求。
3.該SQL語句所查詢的表中有一名為ID的欄位。

從上面的例子我們可以知道,SQL注入的原理,就是從客戶端提交特殊的程式碼,從而收集程式及伺服器的資訊,從而獲取你想到得到的資料。

第二節、判斷能否進行SQL注入

看完第一節,有一些人會覺得:我也是經常這樣測試能否注入的,這不是很簡單嗎?其實,這並不是最好的方法,為什麼呢?

首先,不一定每臺伺服器的IIS都返回具體錯誤提示給客戶端,如果程式中加了cint(引數)之類語句的話,SQL注入是不會成功的,但伺服器同樣會報錯,具體提示資訊為處理 URL 時伺服器上出錯。請和系統管理員聯絡。

其次,部分對SQL注入有一點了解的程式設計師,認為只要把單引號過濾掉就安全了,這種情況不為少數,如果你用單引號測試,是測不到注入點的

那麼,什麼樣的測試方法才是比較準確呢?答案如下:

① http://www.19cn.com/showdetail.asp?id=49
② http://www.19cn.com/showdetail.asp?id=49 and 1=1
③ http://www.19cn.com/showdetail.asp?id=49 and 1=2

這就是經典的1=1、1=2測試法了,怎麼判斷呢?看看上面三個網址返回的結果就知道了:

可以注入的表現:

① 正常顯示(這是必然的,不然就是程式有錯誤了)
② 正常顯示,內容基本與①相同
③ 提示BOF或EOF(程式沒做任何判斷時)、或提示找不到記錄(判斷了rs.eof時)、或顯示內容為空(程式加了on error resume next)

   不可以注入就比較容易判斷了,①同樣正常顯示,②和③一般都會有程式定義的錯誤提示,或提示型別轉換時出錯。

   當然,這只是傳入引數是數字型的時候用的判斷方法,實際應用的時候會有字元型和搜尋型引數,我將在中級篇的“SQL注入一般步驟”再做分析。

第三節、判斷資料庫型別及注入方法

   不同的資料庫的函式、注入方法都是有差異的,所以在注入之前,我們還要判斷一下資料庫的型別。一般ASP最常搭配的資料庫是Access和SQLServer,網上超過99%的網站都是其中之一。

   怎麼讓程式告訴你它使用的什麼資料庫呢?來看看:

   SQLServer有一些系統變數,如果伺服器IIS提示沒關閉,並且SQLServer返回錯誤提示的話,那可以直接從出錯資訊獲取,方法如下:

http://www.19cn.com/showdetail.asp?id=49 and user>0

   這句語句很簡單,但卻包含了SQLServer特有注入方法的精髓,我自己也是在一次無意的測試中發現這種效率極高的猜解方法。讓我看來看看它的含義:首先,前面的語句是正常的,重點在and user>0,我們知道,user是SQLServer的一個內建變數,它的值是當前連線的使用者名稱,型別為nvarchar。拿一個nvarchar的值跟int的數0比較,系統會先試圖將nvarchar的值轉成int型,當然,轉的過程中肯定會出錯,SQLServer的出錯提示是:將nvarchar值 ”abc” 轉換資料型別為 int 的列時發生語法錯誤,呵呵,abc正是變數user的值,這樣,不廢吹灰之力就拿到了資料庫的使用者名稱。在以後的篇幅裡,大家會看到很多用這種方法的語句。

   順便說幾句,眾所周知,SQLServer的使用者sa是個等同Adminstrators許可權的角色,拿到了sa許可權,幾乎肯定可以拿到主機的Administrator了。上面的方法可以很方便的測試出是否是用sa登入,要注意的是:如果是sa登入,提示是將”dbo”轉換成int的列發生錯誤,而不是”sa”。

   如果伺服器IIS不允許返回錯誤提示,那怎麼判斷資料庫型別呢?我們可以從Access和SQLServer和區別入手,Access和SQLServer都有自己的系統表,比如存放資料庫中所有物件的表,Access是在系統表[msysobjects]中,但在Web環境下讀該表會提示“沒有許可權”,SQLServer是在表[sysobjects]中,在Web環境下可正常讀取。

在確認可以注入的情況下,使用下面的語句:

http://www.19cn.com/showdetail.asp?id=49 and (select count(*) from sysobjects)>0
http://www.19cn.com/showdetail.asp?id=49 and (select count(*) from msysobjects)>0

   如果資料庫是SQLServer,那麼第一個網址的頁面與原頁面http://www.19cn.com/showdetail.asp?id=49是大致相同的;而第二個網址,由於找不到表msysobjects,會提示出錯,就算程式有容錯處理,頁面也與原頁面完全不同。

   如果資料庫用的是Access,那麼情況就有所不同,第一個網址的頁面與原頁面完全不同;第二個網址,則視乎資料庫設定是否允許讀該系統表,一般來說是不允許的,所以與原網址也是完全不同。大多數情況下,用第一個網址就可以得知系統所用的資料庫型別,第二個網址只作為開啟IIS錯誤提示時的驗證。

相關推薦

SQL注入漏洞接觸--入門

 隨著B/S模式應用開發的發展,使用這種模式編寫應用程式的程式設計師也越來越多。但是由於這個行業的入門門檻不高,程式設計師的水平及經驗也參差不齊,相當大一部分程式設計師在編寫程式碼的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。使用者可以提交一段資料庫查

SQL注入漏洞接觸 入門 [1]

引  言 隨著B/S模式應用開發的發展,使用這種模式編寫應用程式的程式設計師也越來越多。但是由於這個行業的入門門檻不高,程式設計師的水平及經驗也參差不齊,相當大一部分程式設計師在編寫程式碼的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。使用者可以提交一段

【轉】SQL注入漏洞接觸--入門

隨著B/S模式應用開發的發展,使用這種模式編寫應用程式的程式設計師也越來越多。但是由於這個行業的入門門檻不高,程式設計師的水平及經驗也參差不齊,相當大一部分程式設計師在編寫程式碼的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。使用者可以提交一段資料庫

SQL注入漏洞接觸--入門 [1]

引  言 隨著B/S模式應用開發的發展,使用這種模式編寫應用程式的程式設計師也越來越 多。但是由於這個行業的入門門檻不高,程式設計師的水平及經驗也參差不齊,相當大一部分程式設計師在編寫程式碼的時候,沒有對使用者輸入資料的合法性進行判斷,使應用 程式存在安全隱患。使用者可以提交

SQL注入漏洞接觸——入門

隨著B/S模式應用開發的發展,使用這種模式編寫應用程式的程式設計師也越來越多。但是由於這個行業的入門門檻不高,程式設計師的水平及經驗也參差不齊,相當大一部分程式設計師在編寫程式碼的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。使用者可以提交一段資料庫查詢

SQL注入漏洞接觸——進階

接下來,我們就繼續學習如何從資料庫中獲取想要獲得的內容,首先,我們先看看SQL注入的一般步驟:  一、SQL注入的一般步驟  首先,判斷環境,尋找注入點,判斷資料庫型別,這在入門篇已經講過了。  其次,根據注入引數型別,在腦海中重構SQL語句的原貌,按引數型別主要分為下面

SQL注入漏洞接觸--進階

第一節、SQL注入的一般步驟 首先,判斷環境,尋找注入點,判斷資料庫型別,這在入門篇已經講過了。 其次,根據注入引數型別,在腦海中重構SQL語句的原貌,按引數型別主要分為下面三種: (A) ID=49 這類注入的引數是數字型,SQL語句原貌大致如下:Select * from

ASP漏洞接觸-入門

  隨著B/S模式應用開發的發展,使用這種模式編寫應用程式的程式設計師也越來越多。但是由於這個行業的入門門檻不高,程式設計師的水平及經驗也參差不齊,相當大一部分程式設計師在編寫程式碼的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。使用者可以提交一段資料

sqlmap查詢SQL注入漏洞入門

sqlmap查詢SQL注入漏洞入門 1、安裝sqlmap sqlmap是一款非常強大的開源sql自動化注入工具,可以用來檢測和利用sql注入漏洞。注意:sqlmap只是用來檢測和利用sql注入點的,使用前請先使用掃描工具掃出sql注入點。 它由python語言開發而成,因此執行需要安

ecshop 系列版本網站漏洞 遠端程式碼執行sql注入漏洞

ecshop漏洞於2018年9月12日被某安全組織披露爆出,該漏洞受影響範圍較廣,ecshop2.73版本以及目前最新的3.0、3.6、4.0版本都受此次ecshop漏洞的影響,主要漏洞是利用遠端程式碼執行sql注入語句漏洞,導致可以插入sql查詢程式碼以及寫入程式碼到網站伺

[分析]-DedeCMS版本通殺SQL注入漏洞

[利用]: http://p2j.cn/?p=798 [補丁]: http://www.dedecms.com/pl/#u20140228_5 -----------------------------------------------------------------

齊博CMS1.0版本的sql注入漏洞

詳見:http://dingody.iteye.com/blog/2195864這裡只說一下最後的利用,還是使用原作者指出的那個注入點,雖然value值儲存在了兩個sql語句裡面,這兩個語句的列不一樣,如果利用第二個語句,會在第一個語句的時候報列不一致的錯誤;嘗試利用第一個語

ThinkPHP 5.1.x SQL注入漏洞分析

一、背景引見 ThinkPHP 是一個疾速、複雜的基於 MVC 和麵向物件的輕量級 PHP 開發框架,遵照 Apache2 開源協議釋出。ThinkPHP從降生以來不斷秉承簡潔適用的設計準繩,在堅持出色的功能和至簡的程式碼的同時,也注重開發體驗和易用性,為 WEB 使用和 API 開發提供了強無

SQL注入漏洞筆記

一:注入原理 SQL注入是一種常見的Web安全漏洞,攻擊者利用這個問題,可以訪問或修改資料,或者利用潛在的資料庫漏洞進行攻擊 SQL注入是一種將SQL語句插入或天機到應用(使用者)的輸入引數中的攻擊,之後再將這些引數傳遞給後臺的SQL伺服器加以解析並執行 常見的web架構 表示層 :訪問網址

PHP程式碼審計-SQL注入漏洞挖掘

SQL注入經常出現在登入頁面,HTTP頭(user-agent/client-ip/cookies等),訂單處理等地方,在發生多個互動的地方經常會發生二次注入。 普通注入 $uid = $_GET[‘id’]; $sql = “select * from user where id=$

PHP SQL注入漏洞防範

在PHP中採用魔術引號進行過濾,但是PHP5.4之後被取消了,同時在遇到int型注入也不會那麼有效,所以用的最多的還是過濾函式和類(例如discuz,dedecms,phpcms),如果單純的過濾函式寫的不嚴謹,就會出現繞過的情況,最好的解決方法還是預編譯的方式。 GPC/runtime魔術

怎麼修復網站漏洞之metinfo遠端SQL注入漏洞修補

2018年11月23日SINE網站安全檢測平臺,檢測到MetInfo最新版本爆出高危漏洞,危害性較大,影響目前MetInfo 5.3版本到最新的 MetInfo 6.1.3版本,該網站漏洞產生的主要原因是MetInfo的上傳程式碼裡的引數值沒有進行安全過濾,導致上傳路徑這裡進行偽造路徑,並可以插入惡意的程式碼

CNVD-2018-20024——MetInfo 6.1.2 SQL注入漏洞

0x00漏洞簡介 metinfo是一個cms 6.1.2版本中存在一個sql盲注漏洞 0x01漏洞細節與漏洞利用 在\app\system\message\web\message.class.php的add函式。 get_one這裡有個columnid 這個地方是傳入int型別

思科修復Prime License Manager中的關鍵SQL注入漏洞

思科剛剛修補了一個關鍵的SQL注入漏洞,該漏洞存在於Cisco Prime License Manager(PLM)的Web框架程式碼中,旨在幫助管理員在企業範圍內管理使用者許可。 在成功利用CVE-2018-15441安全問題之後,潛在的遠端攻擊者可以在脆弱的機器上執行任意SQL查詢。 根據思科在Cis

【程式碼審計】五指CMS_v4.1.0 copyfrom.php 頁面存在SQL注入漏洞分析

  0x00 環境準備 五指CMS官網:https://www.wuzhicms.com/ 網站原始碼版本:五指CMS v4.1.0 UTF-8 開源版 程式原始碼下載:https://www.wuzhicms.com/download/ 測試網站首頁:   0x01 程式碼