學資料庫不得不了解的概念:sql注入
說明:使用nbsi-nb聯盟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之間,可以用折半法加速猜解,如果寫成程式測試,效率會有極大的提高。
隨著b/s模式應用開發的發展,使用這種模式編寫應用程式的程式設計師也越來越多。但是由於程式設計師的水平及經驗也參差不齊,相當大一部分程式設計師在編寫**的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。使用者可以提交一段資料庫查詢**,根
據程式返回的結果,獲得某些他想得知的資料,這就是所謂的sql injection,即sql注入。
sql注入是從正常的www埠訪問,而且表面看起來跟一般的web頁面訪問沒什麼區別,所以目前市面的防火牆都不會對sql注入發出警報,如果管理員沒檢視iis日誌的習慣,可能被入侵很長時間都不會發覺。但是,sql注入的手法相當靈活,在注入的時候會碰到很多意外的情況。能不能根據具體情況進行分析,構造巧妙的sql語句,從而成功獲取想要的資料。
據統計,**用asp+access或sqlserver的佔70%以上,php+mysq佔l20%,其他的不足10%。在本文,以sql-server+asp例說明sql注入的原理、方法與過程。(php注入的文章由nb聯盟的另一位朋友zwell撰寫的有關文章)
sql注入攻擊的總體思路是:
發現sql注入位置;
判斷後台資料庫型別;
確定xp_cmdshell可執**況
發現web虛擬目錄
上傳asp木馬;
得到管理員許可權;
說明:使用nbsi-nb聯盟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之間,可以用折半法加速猜解,如果寫成程式測試,效率會有極大的提高。
不得不了解的優質幣
林奇簡介 歡迎加入linkey lky 林奇幣目前在bcex的eth交易區進行交易。從私募價0.68元,現在已到達1.6多元左右。未來值得期待!基本資訊 1.linkey基於區塊鏈底層技術支援下的金融一站式服務平台!落地應用正在逐步推進中!2.linkey總量1.95億,前期流通量5000萬,剩下的...
C 之不得不了解的 類模板
與函式模板基本一致 template classt1,class t2 class person include include using namespace std template class t1 string,classt2 int 看這裡 class person int main 請主...
Redis高階不得不了解的記憶體優化細節
宣告 本文內容來自 redis開發與運維 一書第八章。redis所有的資料都在記憶體中,而記憶體又是非常寶貴的資源。對於如何優化記憶體使用一直是redis使用者非常關注的問題。本文讓我們深入到redis細節中,學習記憶體優化的技巧。分為如下幾個部分 一.redisobject物件 二.縮減鍵值物件 ...