【滲透課程】第五篇-SQL注入的原理

哈哈哈,講到注入了。我想給你們講注入的原理。這個咱們前面的前言篇就說過,所謂的SQL注入就是,繞過數據庫驗證機制直接執行SQL語句。怎麼說呢,咱們先講一個概念吧!html

網站和網頁的區別

單純的網頁是靜態的,html就是靜態的,一些簡單的網站(如某些引導頁)只有網頁和網頁之間的跳轉。而網站是動態的,是一個總體性的web應用程序,幾乎全部的網站都要用到數據庫。數據庫咱們怎麼利用呢?例如某些博客站,cms站點。它的文章並非存在網站目錄裏的,而是存在數據庫裏的,例如某些cms是經過後綴?id=321來調用數據庫內的文章內容。此時即是向數據庫傳遞變量爲ID值爲321請求,而數據庫會響應並查詢咱們的請求。程序員

整體來講原理就是經過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。具體來講,它是利用現有應用程序,將(惡意)的SQL命令注入到後臺數據庫引擎執行的能力,它能夠經過在Web表單中輸入(惡意)SQL語句獲得一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。web

例子

比方說咱們在某網站後臺登陸界面,有兩條輸入框,一條是賬號一條是密碼。那麼咱們能夠猜想數據庫中有一個admin表,表裏面有兩個字段username和password 。這樣咱們輸入用戶(好比123)密碼(好比456)並提交以後,數據庫就會執行一段查詢語句:數據庫

select id from users where username = '123 and password = '123'安全

並判斷用戶名123是錯誤的(爲假)服務器

以後返回賬號密碼錯誤信息。工具

那麼若是咱們在用戶名處輸入'or 1=1-- 而密碼隨便輸入個456呢? 咱們來看看數據庫中的查詢語句:測試

select id from users where username = '' or 1=1--  and password = '456'網站

'又 這裏呢1=1永遠爲真,後面 and password = '456'被註釋掉了。數據庫不須要考慮,這裏咱們就跳過了驗證。設計

這就是幾年前的萬能密碼,這裏只是說說邏輯。咱們再來看看下面另外一個例子。

整型參數的判斷

SQL注入通常存在於形如:

HTTP://www.xxx.xxx/text.asp?id=XX

這種帶有參數的asp或者動態網頁中,注入又分爲整形注入和字符串注入。總之只要是帶有參數的動態網頁且此網頁訪問了數據庫,那麼就有可能存在SQL注入。下以HTTP://www.xxx.xxx/test.asp?p=xx爲例進行分析,xx此處設爲整型。

當輸入的參數xx爲整型時,一般test.asp中SQL語句原貌大體以下:

select * from 表名 where 字段=xx

因此能夠用如下步驟測試SQL注入是否存在。

①HTTP://www.xxx.xxx/text.asp?p=xx’(附加一個單引號)此時abc.ASP中的SQL語句變成了

select * from 表名 where 字段=YY’

數據庫沒法處理,返回異常;

②HTTP://www.xxx.xxx/test.asp?p=xx and 1=1。1=1爲真 test.asp運行正常,並且與沒加語句以前的test.asp?p=xx運行結果同樣正常顯示;

③HTTP://www.xxx.xxx/test.asp?p=YY and 1=2,語句爲假,由於1≠2  test.asp運行異常;若是以上三步全面知足,test.asp中必定存在SQL注入漏洞

小技巧:有時管理員會在後臺設置過濾掉單引號等字符,以防止SQL注入。此時能夠用如下幾種試一試。

大小定混合法:VBS並不區分大小寫,而網站程序可能區分。而後程序員在過濾時一般要麼所有過濾大寫字符串,要麼所有過濾小寫字符串,而大小寫混合每每會被忽視。如用SelecT代替select,SELECT等;

UNICODE法:在IIS中,以UNICODE字符集實現國際化,咱們徹底能夠IE中輸入的字符串化成UNICODE字符串進行輸入。如+ =%2B,空格=%20 等;URLEncode信息能夠參加百度;

ASCII碼法:能夠把輸入的部分或所有字符所有用ASCII碼代替,如U=chr(85),a=chr(97)等,ASCII信息參見百度。

猜解內容

用過明小子、啊D的都知道,存在注入確定要猜密碼了哈哈哈,但是軟件是怎樣一個工做過程呢?

猜解表名: and exists (select * from 表名)

猜解列名: and exists (select 字段 from 表

爆指定表名內容: and 1=1 union select 1,2,3,4,5 from 表名

猜解列長度 猜解語句: and (select top 1 len(列名)from 表名)>N and (select top 1 len(列名)from 表名)=N 其中N是數字

變換這個N的值猜解列長度,

例如: and (select top 1 len(列名)from 表名)>1 and (select top 1 len(列名)from 表名)>6

若是一直猜到6都顯示正常頁面,猜到7的時候返回錯誤(大於6而且小於等於7),那麼該列的長度爲7。

阿西巴,我好睏~~好了此次注入淺談就說到這裏~ 其實網上的注入工具仍是挺多的, 如批量注入的明小子、啊D注入工具、椰樹、御劍等等。如今不會語法也沒太大關係,之後再補上也行啊。SQL 存在注入的站點小編在博客裏也送過了,你們能夠找幾個練練手(不要幹壞事)。

手機一個一個字打,賊幾把累(其實抄了一部分)~要是大家還不懂,明天來問我吧

相關文章
相關標籤/搜索