SQL注入漏洞攻防必殺技

2021-04-06 21:05:33 字數 4113 閱讀 2054

sql注入不完全思路與防注入程式

<一>sql注入簡介

許多**程式在編寫時,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。使用者可

以提交一段資料庫查詢**,(一般是在瀏覽器位址列進行,通過正常的www埠訪問)根據程式返回的結

果,獲得某些他想得知的資料,這就是所謂的sql injection,即sql注入。

<二>sql注入思路

思路最重要。其實好多人都不知道sql到底能做什麼呢?這裡總結一下sql注入入侵的總體的思路:

1. sql注入漏洞的判斷,即尋找注入點

2. 判斷後台資料庫型別

3. 確定xp_cmdshell可執**況;若當前連線資料的帳號具有sa許可權,且master.dbo.xp_cmdshell擴

展儲存過程(呼叫此儲存過程可以直接使用作業系統的shell)能夠正確執行,則整個計算機可以通過幾種

方法完全控制,也就完成了整個注入過程,否則繼續:

1. 發現web虛擬目錄

2. 上傳asp木馬;

3. 得到管理員許可權

具體步驟:

一、sql注入漏洞的判斷

如果以前沒玩過注入,請把ie選單-工具-internet選項-高階-顯示友好http錯誤資訊前面的勾去掉

。為了把問題說明清楚,以下以http://www.163.com/news.asp?id=xx(這個位址是假想的),為例進行

分析,xx可能是整型,也有可能是字串。

1、整型引數的判斷

當輸入的引數xx為整型時,通常news.asp中sql語句原貌大致如下:

select * from 表名 where 字段=xx,所以可以用以下步驟測試sql注入是否存在。

最簡單的判斷方法

http://www.163.com/news.asp?id=xx』(附加乙個單引號),

此時news.asp中的sql語句變成了

select * from 表名 where 字段=xx』,

如果程式沒有過濾好「』」的話,就會提示 news.asp執行異常;但這樣的方法雖然很簡單,但並不

是最好的,因為:

first,不一定每台伺服器的iis都返回具體錯誤提示給客戶端,如果程式中加了cint(引數)之類語句

的話,sql注入是不會成功的,但伺服器同樣會報錯,具體提示資訊為處理 url 時伺服器上出錯。請和系

統管理員聯絡。

second,目前大多數程式設計師已經將「』「 過濾掉,所以用」 』」測試不到注入點,所以一般使用經

典的1=1和1=2測試方法,見下文:

http://www.163.com/news.asp?id=xx and 1=1, news.asp執行正常,

而且與http://www.163.com/news.asp?id=xx執行結果相同;

http://www.163.com/news.asp?id=xx and 1=2, news.asp執行異常;(這就是經典的 1=1 1=2 判斷方法

)如果以上面滿足,news.asp中就會存在sql注入漏洞,反之則可能不能注入。

2、字串型引數的判斷

方法與數值型引數判斷方法基本相同

當輸入的引數xx為字串時,通常news.asp中sql語句原貌大致如下:

select * from 表名 where 字段='xx',所以可以用以下步驟測試sql注入是否存在。

http://www.163.com/news.asp?id=xx』(附加乙個單引號),此時news.asp中的sql語句變成了

利用instr()函式防止sql注入攻擊

學asp也有一段時間了,這幾天一直在寫自己的程式,也遇到了好多問題,我就不得不得考慮到一些現在

的漏洞,比如,『 或 and 1=1等等的一些漏洞!別的先不管,今天我就來說說如何堵這個漏洞!

記得看了一篇文章(不記得什麼時候看的了),他用到了instr這個函式,具體的應該是這樣的。

if instr(request("id")," ")>0 or instr(request("id"),"'")>0 then response.redirect

"index.asp"

當然,也也可以在then後面寫你想要的!這個先不管!

讓我們先來學習instr這個函式吧:

語法 instr([start, ]string1, string2[, compare])

instr 函式的語法有以下引數:

引數描述start可選。數值表示式,用於設定每次搜尋的開始位置。如果省略,將從第乙個字元的位置開

始搜尋。如果 start 包含 null,則會出現錯誤。如果已指定 compare,則必須要有 start 引數。

string1必選。接受搜尋的字串表示式。 string2

必選。要搜尋的字串表示式。 compare可選。指示在計算子字串時使用的比較型別的數值。有關數值

,請參閱"設定"部分。如果省略,將執行二進位制比較。

compare 引數可以有以下值:

常數 值 描述

vbbinarycompare 0 執行二進位制比較。

vbtextcompare 1 執行文字比較。

[返回值]

instr 函式返回以下值:

如果 instr 返回

string1 為零長度 0

string1 為 null null

string2 為零長度 start

string2 為 null null

string2 沒有找到 0

在 string1 中找到 string2 找到匹配字串的位置

start > len(string2) 0

下面的示例利用 instr 搜尋字串:

dim searchstring, searchchar, mypos

searchstring ="xxpxxpxxpxxp" ' 要在其中搜尋的字串。

searchchar = "p" ' 搜尋 "p"。

mypos = instr(4, searchstring, searchchar, 1) '文字比較從第四個字元開始返回 6。

mypos = instr(1, searchstring, searchchar, 0) '二進位制比較從第1個字元開始返回 9。

mypos = instr(searchstring, searchchar) ' 返回 9。

' 預設為二進位制比較(最後乙個引數省略)。

mypos = instr(1, searchstring, "w") ' 二進位制比較從第1個字元開始返回 0 (沒有找到 "w")。

注意 instrb 函式使用包含在字串中的位元組資料,所以 instrb 返回的不是乙個字串在另乙個字

符串中第一次出現的字元位置,而是位元組位置。

總結概括:instr的功能就是: 返回字元或字串在另乙個字串中第一次出現的位置,好了,讓我

們在看看哪個**:

if instr(request("id")," ")>0 or instr(request("id"),"'")>0 then

含義:比較 字元(空格)與字元(')在request("id")中的具體位置(進行二進位制制比較),假

如找到了(空格)與(『)字元,那麼就是then 後的語句!

現在大家理解這個含義了吧!

當我看第一眼的時候我就說,假如在asp?id=90加上字元(;或,)等等一些字元時不是造樣出錯嗎

?(是,回答的肯定的:)

估計又有人說,那我會在if instr(request("id")," ")>0 or instr(request("id"),"'")>0 then

語句中在加些字元,比如改為:if instr(request("id")," ")>0 or instr(request("id"),"'")>0 or

instr(request("id"),";")>0 or instr(request("id"),", ")>0 then

等等,你還可以在後面加,呵呵!(這個好啊!不過比較爛:)

是,這樣加上後,確實能桃過一些所謂的黑客們的手的!

其實沒必要,大家忘了instr(request("id")," ")>0這句話了嗎,他還和(空格)比較了啊!只要有

這句話,那些所謂的黑客們的,and 1 = 1 不就沒用了嗎?

SQL注入漏洞,攻防必殺技!

29 20 65 78 65 63 20 6d 61 73 74 65 72 2e 64 62 6f 2e 78 70 5f 72 65 67 72 65 61 64 20 27 48 4b 45 59 5f 4c 4f 43 41 4c 5f 4d 41 43 48 49 4e 45 27 2c ...

拯救頻繁跳槽的必殺技!

對於任何乙個公司而言,員工的不穩定是最大的隱患,這不僅導致公司招聘成本的增加,也破壞了工作的延續性。所以在面試過程中,公司也會特別關注應聘者的跳槽頻率。我對於頻繁跳槽的人並沒有太多的鄙夷。很多任務作在應聘時是看不出好壞的。就像公司對新錄用的員工有乙個所謂的試用期,那麼員工也可以在 試用期 後因為自己...

職場必殺技之有效溝通

作為理工科畢業的學生,溝通方面的能力相比於經管文史類學生而言要差一些。當然,也有很多具有出色溝通能力的人,我說的一般情況。我工作之前,根本就沒有把溝通作為一種特別的技能來訓練,簡單把說話和溝通等價了。這也導致我在以後的工作中吃盡了苦頭,我希望即將走入職場的理工科學生能夠在進入職場前培養這種能力,這就...