ASP漏洞全接觸 高階篇

2022-10-07 12:42:08 字數 3030 閱讀 8795

第一節、利用系統表注入sqlserver資料庫

sqlserver是乙個功能強大的資料庫系統,與作業系統也有緊密的聯絡,這給開發者帶來了很大的方便,但另一方面,也為注入者提供了乙個跳板,我們先來看看幾個具體的例子:

分號;在sqlserver中表示隔開前後兩句語句,--表示後面的語句為注釋,所以,這句語句在sqlserver中將被分成兩句執行,先是select出id=1的記錄,然後執行儲存過程xp_cmdshell,這個儲存過程用於呼叫系統命令,於是,用net命令新建了使用者名為name、密碼為password的windows的帳號,接著:

將新建的帳號name加入管理員組,不用兩分鐘,你已經拿到了系統最高許可權!當然,這種方法只適用於用sa連線資料庫的情況,否則,是沒有許可權呼叫xp_cmdshell的。

前面有個類似的例子and user>0,作用是獲取連線使用者名稱,db_name()是另乙個系統變數,返回的是連線的資料庫名。

④http://site/url.asp?id=1;backup database 資料庫名 to disk='c:\inetpub\www程式設計客棧root\1.db';--

這是相當狠的一招,從③拿到的資料庫名,加上某些iis出錯暴露出的絕對路徑,將資料庫備份到web目錄下面,再用http把整個資料庫就完完整整的**回來,所有的管理員及使用者密碼都一覽無遺!在不知道絕對路徑的時候,還可以備份到網路位址的方法(如\\202.96.xx.xx\share\1.db),但成功率不高。

前面說過,sysobjects是sqlserver的系統表,儲存著所有的表名、檢視、約束及其它物件,xtype='u' and status>0,表示使用者建立的表名,上面的語句將第乙個表名取出,與0比較大小,讓報錯資訊把表名暴露出來。第

二、第三個表名怎麼獲取?還是留給我們聰明的讀者思考吧。

⑥http://site/url.asp?id=1 ;;and (select top 1 col_name(object_id(『表名'),1) from sysobjects)>0

從⑤拿到表名後,用object_id(『表名')獲取表名對應的內部id,col_name(表名id,1)代表該錶的第1個欄位名,將1換成2,3,4...就可以逐個程式設計客棧獲取所猜解表裡面的欄位名。

以上6點是我研究sqlserver注入半年多以來的心血結晶,可以看出,對sqlserver的了解程度,直接影響著成功率及猜解速度。在我研究sqlserver注入之後,我在開發方面的水平也得到很大的提高,呵呵,也許安全與開發本來就是相輔相成的吧。

第二節、繞過程式限制繼續注入

在入門篇提到,有很多人喜歡用'號測試注入漏洞,所以也有很多人用過濾'號的方法來「防止」注入漏洞,這也許能擋住一些入門者的攻擊,但對sql注入比較熟悉的人,還是可以利用相關的函式,達到繞過程式限制的目的。

在「sql注入的一般步驟」一節中,我所用的語句,都是經過我優化,讓其不包含程式設計客棧有單引號的;在「利用系統表注入sqlserver資料庫」中,有些語句包含有'號,我們舉個例子來看看怎麼改造這些語句:

簡單的如where xtype='u',字元u對應的ascii碼是85,所以可以用where xtype=char(85)代替;如果字元是中文的,比如where name='使用者',可以用where name=nchar(29992)+nchar(25143)代替。

第三節、經驗小結

1.有些人會過濾select、update、delete這些關鍵字,但偏偏忘記區分大小寫,所以大家可以用select這樣嘗試一下。

2.在猜不到欄位名時,不妨看看**上的登入表單,一般為了方便起見,欄位名都與表單的輸入框取相同的名字。

3.特別注意:位址列的+號傳入程式後解釋為空格,%2b解釋為+號,%25解釋為%號,具體可以參考urlencode的相關介紹。

4.用get方法注入時,iis會記錄你所有的提交字串,對post方法做則不記錄,所以能用post的**盡量不用get。

5.猜解access時只能用ascii逐字解碼法,sqlserver也可以用這種方法,只需要兩者之間的區別即可,但是如果能用sqlserver的報錯資訊把值暴露出來,那效率和準確率會有極大的程式設計客棧提高。

sql注入漏洞可謂是「千里之堤,潰於蟻穴」,這種漏洞在網上極為普遍,通常是由於程式設計師對注入不了解,或者程式過濾不嚴格,或者某個引數忘記檢查導致。在這裡,我給大家乙個函式,代替asp中的request函式,可以對一切的sql注入say no,函式如下:

function saferequest(paraname,paratype)

--- 傳入引數 ---

paraname:引數名稱-字元型

paratype:引數型別-數字型(1表示以上引數是數字,0表示以上引數為字元)

dim par**alue

par**alue=request(paraname)

if paratype=1 then

if not isnumeric(par**alue) then

response.write "引數" & paraname & 程式設計客棧"必須為數字型!"

response.end

end if

else

par**alue=replace(par**alue,"","")

end if

saferequest=par**alue

end function

本文標題: asp漏洞全接觸-高階篇

本文位址:

轉貼 ASP漏洞全接觸 高階篇

第一節 sql注入的一般步驟 首先,判斷環境,尋找注入點,判斷資料庫型別,這在入門篇已經講過了。其次,根據注入引數型別,在腦海中重構sql語句的原貌,按引數型別主要分為下面三種 a id 49 這類注入的引數是數字型,sql語句原貌大致如下 select from 表名 where 字段 49 注入...

SQL注入漏洞全接觸 高階篇

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

SQL注入漏洞全接觸 高階篇

第一節 sql注入的一般步驟 首先,判斷環境,尋找注入點,判斷資料庫型別,這在入門篇已經講過了。其次,根據注入引數型別,在腦海中重構sql語句的原貌,按引數型別主要分為下面三種 a id 49 這類注入的引數是數字型,sql語句原貌大致如下 select from 表名 where 字段 49 注入...