SQL注入詳解 4

2022-04-10 15:23:50 字數 2645 閱讀 4287

< doctype html public -wcdtd xhtml stricten httpwwwworgtrxhtmldtdxhtml-strictdtd> 進 階 篇

在入門篇,我們學會了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 字段,首先,我們取第一條記錄,測試長度: 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注入詳解 4

進 階 篇 在入門篇,我們學會了 注入的判斷方法,但真正要拿到 的保密內容,是遠遠不夠的。接下來,我們就繼續學習如何從資料庫中獲取想要獲得的內容,首先,我們先看看 注入的一般步驟 第一節 注入的一般步驟 首先,判斷環境,尋找注入點,判斷資料庫型別,這在入門篇已經講過了。其次,根據注入引數型別,在腦海...

sql注入詳解

我們先了解web 程式三層架構 三層架構 3 tier architecture 通常意義上就是將整個業務應用劃分為 介面層 user inte ce layer 業務邏輯層 business logic layer 資料訪問層 data access layer 區分層次的目的即為了 高內聚低耦合...

SQL注入詳解

sql 注入 sqli 是一種注入攻擊,可以執行惡意 sql 語句。它通過將任意 sql 插入資料庫查詢,使攻擊者能夠完全控制 web 應用程式後面的資料庫伺服器。攻擊者可以使用 sql 注入漏洞繞過應用程式安全措施 可以繞過網頁或 web 應用程式的身份驗證和授權,並檢索整個 sql 資料庫的內容...