程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL注入漏洞全接觸--進階篇(二)

SQL注入漏洞全接觸--進階篇(二)

編輯:關於SqlServer

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

  http://www.19cn.com/showdetail.ASP?id=49 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函數取得對應的中文字符。  

  了解了上面的兩點後,是不是覺得中文猜解其實也跟英文差不多呢?除了使用的函數要注意、猜解范圍大一點外,方法是沒什麼兩樣的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved