1. 程式人生 > >SQL注入漏洞全接觸——進階篇

SQL注入漏洞全接觸——進階篇


接下來,我們就繼續學習如何從資料庫中獲取想要獲得的內容,首先,我們先看看SQL注入的一般步驟: 

一、SQL注入的一般步驟 

首先,判斷環境,尋找注入點,判斷資料庫型別,這在入門篇已經講過了。 

其次,根據注入引數型別,在腦海中重構SQL語句的原貌,按引數型別主要分為下面三種: 

(A) ID=49 這類注入的引數是數字型,SQL語句原貌大致如下: 

Select * from 表名 where 欄位=49 

注入的引數為ID=49 And [查詢條件],即是生成語句: 

Select * from 表名 where 欄位=49 And [查詢條件] 

(B) Class=連續劇 這類注入的引數是字元型,SQL語句原貌大致概如下: 

Select * from 表名 where 欄位=’連續劇’ 

注入的引數為Class=連續劇’ and [查詢條件] and ‘’=’ ,即是生成語句: 

Select * from 表名 where 欄位=’連續劇’ and [查詢條件] and ‘’=’’ 

(C) 搜尋時沒過濾引數的,如keyword=關鍵字,SQL語句原貌大致如下: 

Select * from 表名 where 欄位like ’%關鍵字%’ 

注入的引數為keyword=’ and [查詢條件] and ‘%25’=’, 即是生成語句: 

Select * from 表名 where欄位like ’%’ and [查詢條件] and ‘%’=’%’ 

接著,將查詢條件替換成SQL語句,猜解表名,例如: 

ID=49 And (Select Count(*) from Admin)>=0 

如果頁面就與ID=49的相同,說明附加條件成立,即表Admin存在,反之,即不存在(請牢記這種方法)。如此迴圈,直至猜到表名為止。 

表名猜出來後,將Count(*)替換成Count(欄位名),用同樣的原理猜解欄位名。 

有人會說:這裡有一些偶然的成分,如果表名起得很複雜沒規律的,那根本就沒得玩下去了。說得很對,這世界根本就不存在100%成功的黑客技術,蒼蠅不叮無縫的蛋,無論多技術多高深的黑客,都是因為別人的程式寫得不嚴密或使用者保密意識不夠,才有得下手。 

有點跑題了,話說回來,對於SQLServer的庫,還是有辦法讓程式告訴我們表名及欄位名的,我們在高階篇中會做介紹。最後,在表名和列名猜解成功後,再使用SQL語句,得出欄位的值,下面介紹一種最常用的方法-Ascii逐字解碼法,雖然這種方法速度很慢,但肯定是可行的方法。

我們舉個例子,已知表Admin中存在username欄位,首先,我們取第一條記錄,測試長度: 

http://www.19cn.com/showdetail.asp?id=49 and (select top 1 len(username) from Admin)>0 

先說明原理:如果top 1的username長度大於0,則條件成立;接著就是>1、>2、>3這樣測試下去,一直到條件不成立為止,比如>7成立,>8不成立,就是len(username)=8 

當然沒人會笨得從0,1,2,3一個個測試,怎麼樣才比較快就看各自發揮了。在得到username的長度後,用mid(username,N,1)擷取第N位字元,再asc(mid(username,N,1))得到ASCII碼,比如: 

id=49 and (select top 1 asc(mid(username,1,1)) from Admin)>0 

同樣也是用逐步縮小範圍的方法得到第1位字元的ASCII碼,注意的是英文和數字的ASCII碼在1-128之間,可以用折半法加速猜解,如果寫成程式測試,效率會有極大的提高。 

二、SQL注入常用函式 

有SQL語言基礎的人,在SQL注入的時候成功率比不熟悉的人高很多。我們有必要提高一下自己的SQL水平,特別是一些常用的函式及命令。 

Access:asc(字元) SQLServer:unicode(字元) 

作用:返回某字元的ASCII碼 

Access:chr(數字) SQLServer:nchar(數字) 

作用:與asc相反,根據ASCII碼返回字元 

Access:mid(字串,N,L) SQLServer:substring(字串,N,L) 

作用:返回字串從N個字元起長度為L的子字串,即N到N+L之間的字串 

Access:abc(數字) SQLServer:abc (數字) 

作用:返回數字的絕對值(在猜解漢字的時候會用到)  

Access:A between B And C SQLServer:A between B And C 

作用:判斷A是否界於B與C之間 

三、中文處理方法 

在注入中碰到中文字元是常有的事,有些人一碰到中文字元就想打退堂鼓了。其實只要對中文的編碼有所瞭解,“中文恐懼症”很快可以克服。 

先說一點常識: 

Access中,中文的ASCII碼可能會出現負數,取出該負數後用abs()取絕對值,漢字字元不變。 

SQLServer中,中文的ASCII為正數,但由於是UNICODE的雙位編碼,不能用函式ascii()取得ASCII碼,必須用函式unicode ()返回unicode值,再用nchar函式取得對應的中文字元。 

瞭解了上面的兩點後,是不是覺得中文猜解其實也跟英文差不多呢?除了使用的函式要注意、猜解範圍大一點外,方法是沒什麼兩樣的。 

相關推薦

SQL注入漏洞接觸——

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

SQL注入漏洞接觸--

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

SQL注入漏洞接觸--入門

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

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

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

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

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

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

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

SQL注入漏洞接觸——入門

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

SQL Server調優系列(如何索引調優)

.cn 技術 spa 磁盤 clear 高頻 思路 ltp 覆蓋範圍 前言 上一篇我們分析了數據庫中的統計信息的作用,我們已經了解了數據庫如何通過統計信息來掌控數據庫中各個表的內容分布。不清楚的童鞋可以點擊參考。 作為調優系列的文章,數據庫的索引肯定

SQL Server調優系列(如何維護資料庫索引)

前言 上一篇我們研究瞭如何利用索引在資料庫裡面調優,簡要的介紹了索引的原理,更重要的分析瞭如何選擇索引以及索引的利弊項,有興趣的可以點選檢視。 本篇延續上一篇的內容,繼續分析索引這塊,側重索引項的日常維護以及一些注意事項等。 閒言少敘,進入本篇的主題。 技術準備 資料庫版本為SQL Server20

SQL Server調優系列(查詢語句執行幾個指標值監測)

前言 上一篇我們分析了查詢優化器的工作方式,其中包括:查詢優化器的詳細執行步驟、篩選條件分析、索引項優化等資訊。 本篇我們分析在我們執行的過程中幾個關鍵指標值的檢測。 通過這些指標值來分析語句的執行問題,並且分析其優化方式。 通過本篇我們可以學習到調優中經常利用的幾個利器! 廢話少說,開始本篇的正題

SQL Server調優系列(查詢優化器的執行方式)

前言 前面我們的幾篇文章介紹了一系列關於運算子的基礎介紹,以及各個運算子的優化方式和技巧。其中涵蓋:檢視執行計劃的方式、幾種資料集常用的連線方式、聯合運算子方式、並行運算子等一系列的我們常見的運算子。有興趣的童鞋可以點選檢視。 本篇介紹在SQL Server中查詢優化器的工作方式,也就是一個好的執行計劃的

SQL Server調優系列(深入剖析統計資訊)

前言 經過前幾篇的分析,其實大體已經初窺到SQL Server統計資訊的重要性了,所以本篇就要祭出這個神器了。 該篇內容會很長,坐好板凳,瓜子零食之類... 不廢話,進正題 技術準備 資料庫版本為SQL Server2008R2,利用微軟的以前的案例庫(Northwind)進行分析,部分內容也會應用

SQL手工注入

0.前言   上一篇我們介紹了SQL手工注入的流程以及步驟,但在實際的安全問題以及CTF題目中,查詢語句多種多樣,而且是肯定會對使用者的輸入進行一個安全過濾的,而這些過濾並不一定是百分百安全的,如何利用一些技巧繞過一些安全過濾,這就是我們這一篇要介紹的事情。   如果你還不熟悉SQL注入的流程以及步驟,請

文件包含漏洞

com http base64編碼 style 本地文件 遠程 存在 size 宋體 前言: 文件包含漏洞雖然在前面已經說過,但是感覺還不到火候。這次在度 深入了解。 目錄: 本地文件包含漏洞的進階 遠程文件包含漏洞 正文: 進入之後選擇文件包含漏洞,如下圖

mysql 開發系列 5 SQL 優化

其它 目的 block 垂直拆分 例如 info 分析 設計 plain 一. 使用sql提示 sql 提示(sql hint)是優化數據庫的一個重要手段, 是在sql語句中加入一些人為的提示來達到優化操作的目的。   1.1 use index

SQL簡單使用-

部分 mit 記錄 form create 表示 count 並且 ora 與上一篇的《SQL簡單使用-基礎篇》相連續的篇章,《SQL簡單使用-基礎篇》以下簡稱《基礎篇》。在《基礎篇》中,主要簡單的帶大家了解一下SQL命令中最主要的增刪改查命令的使用,增INSERT INT

【Python+selenium】:js注入,沒有我click不到節點

經常寫指令碼的你,偶爾會碰到一些比較煩人的情況就是,明明選到了元素但是click就是沒有反應,可能的情況有以下幾種: 1.沒錯,你就是選錯元素了,對,是你自己的原因; 2.有其它的元素層給擋住了,比如隔壁元素的透明外邊框,當然這種問題正常點就點不到; 3.python操作瀏覽器時可能

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

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

Spark修煉之道()——Spark入門到精通:第十節 Spark SQL案例實戰(一)

作者:周志湖 放假了,終於能抽出時間更新部落格了……. 1. 獲取資料 本文通過將github上的Spark專案git日誌作為資料,對SparkSQL的內容進行詳細介紹 資料獲取命令如下: [[email protected] spa

Spark修煉之道()——Spark入門到精通:第十三節 Spark Streaming—— Spark SQL、DataFrame與Spark Streaming

主要內容 Spark SQL、DataFrame與Spark Streaming 1. Spark SQL、DataFrame與Spark Streaming import org.apache.spark.SparkConf import org