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 ...
拯救頻繁跳槽的必殺技!
對於任何乙個公司而言,員工的不穩定是最大的隱患,這不僅導致公司招聘成本的增加,也破壞了工作的延續性。所以在面試過程中,公司也會特別關注應聘者的跳槽頻率。我對於頻繁跳槽的人並沒有太多的鄙夷。很多任務作在應聘時是看不出好壞的。就像公司對新錄用的員工有乙個所謂的試用期,那麼員工也可以在 試用期 後因為自己...
職場必殺技之有效溝通
作為理工科畢業的學生,溝通方面的能力相比於經管文史類學生而言要差一些。當然,也有很多具有出色溝通能力的人,我說的一般情況。我工作之前,根本就沒有把溝通作為一種特別的技能來訓練,簡單把說話和溝通等價了。這也導致我在以後的工作中吃盡了苦頭,我希望即將走入職場的理工科學生能夠在進入職場前培養這種能力,這就...