SQL注入原理高階篇 2

2021-04-13 12:56:34 字數 1408 閱讀 7262

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

先說明原理:如果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水平,特別是一些常用的函式及命令。

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注入2 聯合查詢注入

首先要了解什麼是聯合注入,聯合查詢注入是回顯注入的一種,也可以說聯合注入的前提是,頁面上要有回顯位。那又引出了另一問題,什麼是回顯位?在乙個 的正常頁面,服務端執行sql語句查詢資料庫中的資料,客戶端將資料展示在頁面中,這個展示資料的位置就叫回顯位。聯合注入通常是有一定的步驟 1.判斷注入點 2.判...

SQL注入漏洞接觸 高階篇

第一節 利用系統表注入sqlserver資料庫 sqlserver是乙個功能強大的資料庫系統,與作業系統也有緊密的聯絡,這給開發者帶來了很大的方便,但另一方面,也為注入者提供了乙個跳板,我們先來看看幾個具體的例子 分號 在sqlserver中表示隔開前後兩句語句,表示後面的語句為注釋,所以,這句語句...

SQL注入原理 進 階 篇

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