SQL注入天書 ASP注入漏洞全接觸

2021-04-29 19:43:14 字數 2968 閱讀 6546

在入門篇,我們學會了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欄位,首先,我們取第一條記錄,測試長度:  

先說明原理:如果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注入天書 asp注入漏洞全接觸

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

SQL注入天書 注入漏洞全接觸

引 言 隨著b s模式應用開發的發展,使用這種模式編寫應用程式的程式設計師也越來越多。但是由於這個行業的入門門檻不高,程式設計師的水平及經驗也參差不齊,相當大一部分程式設計師在編寫 的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在隱患。使用者可以提交一段查詢 根據程式返回的結果,獲得某些...

破解asp網頁sql注入漏洞

dim fy post,fy get,fy cook,fy in,fy inf,fy xh,fy db,fy dbstr,aa on error resume next fy in exec insert select delete update count chr truncate char de...