『壹』 [高危]sql注入漏洞(盲注)
意思是不是說 strSQL = "select top 1 * from nts_Hr" 沒有where條件限制呢?是不是id是空的時候也能查到記錄 360就認為是漏洞了?
『貳』 什麼是sql注入,如何防止sql注入
SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令。具體來說,它是利用現有應用程序,將(惡意)的SQL命令注入到後台資料庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的資料庫,而不是按照設計者意圖去執行SQL語句。比如先前的很多影視網站泄露VIP會員密碼大多就是通過WEB表單遞交查詢字元暴出的,這類表單特別容易受到SQL注入式攻擊.
SQL注入攻擊實例:
比如在一個登錄界面,要求輸入用戶名和密碼:
可以這樣輸入實現免帳號登錄:
用戶名: 『or 1 = 1 –
密 碼:
點登陸,如若沒有做特殊處理,那麼這個非法用戶就很得意的登陸進去了.(當然現在的有些語言的資料庫API已經處理了這些問題)
這是為什麼呢? 下面我們分析一下:
從理論上說,後台認證程序中會有如下的SQL語句:
String sql = "select * from user_table where username=
' "+userName+" ' and password=' "+password+" '";
當輸入了上面的用戶名和密碼,上面的SQL語句變成:
SELECT * FROM user_table WHERE username=
'』or 1 = 1 -- and password='』
分析SQL語句:
條件後面username=」or 1=1 用戶名等於 」 或1=1 那麼這個條件一定會成功;
然後後面加兩個-,這意味著注釋,它將後面的語句注釋,讓他們不起作用,這樣語句永遠都能正確執行,用戶輕易騙過系統,獲取合法身份。
這還是比較溫柔的,如果是執行
SELECT * FROM user_table WHERE
username='' ;DROP DATABASE (DB Name) --' and password=''
….其後果可想而知…
防SQL注入:
下面我針對JSP,說一下應對方法:
1.(簡單又有效的方法)PreparedStatement
採用預編譯語句集,它內置了處理SQL注入的能力,只要使用它的setXXX方法傳值即可。
使用好處:
(1).代碼的可讀性和可維護性.
(2).PreparedStatement盡最大可能提高性能.
(3).最重要的一點是極大地提高了安全性.
原理:
sql注入只對sql語句的准備(編譯)過程有破壞作用
而PreparedStatement已經准備好了,執行階段只是把輸入串作為數據處理,
而不再對sql語句進行解析,准備,因此也就避免了sql注入問題.
2.使用正則表達式過濾傳入的參數
要引入的包:
import java.util.regex.*;
正則表達式:
private String CHECKSQL = 「^(.+)\sand\s(.+)|(.+)\sor(.+)\s$」;
判斷是否匹配:
Pattern.matches(CHECKSQL,targerStr);
下面是具體的正則表達式:
檢測SQL meta-characters的正則表達式 :
/(\%27)|(』)|(--)|(\%23)|(#)/ix
修正檢測SQL meta-characters的正則表達式 :/((\%3D)|(=))[^ ]*((\%27)|(』)|(--)|(\%3B)|(:))/i
典型的SQL 注入攻擊的正則表達式 :/w*((\%27)|(』))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix
檢測SQL注入,UNION查詢關鍵字的正則表達式 :/((\%27)|(』))union/ix(\%27)|(』)
檢測MS SQL Server SQL注入攻擊的正則表達式:
/exec(s|+)+(s|x)pw+/ix
等等…..
3.字元串過濾
比較通用的一個方法:
(||之間的參數可以根據自己程序的需要添加)
publicstaticbooleansql_inj(Stringstr)
{
Stringinj_str="'|and|exec|insert|select|delete|update|
count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,";
Stringinj_stra[]=split(inj_str,"|");
for(inti=0;i<inj_stra.length;i++)
{
if(str.indexOf(inj_stra[i])>=0)
{
returntrue;
}
}
returnfalse;
}
『叄』 SQL注入漏洞(盲注)危害大不
有漏洞當然就要去處理,不然有些人可能就會利用漏洞進行獲取網站許可權,做一些不正當的操作,關於程序安全方面可能幫不上你,你可以咨詢下空間商或者程序提供者 到SEO研究中心網站查看回答詳情>>
『肆』 sql盲注攻擊是什麼意思
SQL盲注是一種SQL注入漏洞,攻擊者可以操縱SQL語句,應用會針對真假條件返回不同的值。但是攻擊者無法檢索查詢結果。
由於SQL盲注漏洞非常耗時且需要向Web服務發送很多請求,因而要想利用該漏洞,就需要採用自動的技術。
SQL盲注是一種很常見的漏洞,但有時它非常細微,經驗不豐富的攻擊者可能會檢測不到。
『伍』 Web網站sql盲注怎麼解決
用一些網站防護工具吧,然後再用一些cdn加速防黑防盜鏈。網路、360的都可以。安全聯盟、加速樂、安全狗等等
『陸』 SQL盲注的簡單語句怎麼寫
拿個簡單的查詢來說
select * from table where 條件='' or 1=1 --'
也就是在你的查詢參數中加入:' or 1=1 --
其他改、刪類似,注入的方式有很多種,以上只是最基本的一種
『柒』 什麼是sql盲注
SQL盲註:用SQL查詢語句去猜解表名、欄位、數據。
拿個簡單的查詢來說
select * from table where 條件='' or 1=1 --'
也就是在你的查詢參數中加入:' or 1=1 --
其他改、刪類似,注入的方式有很多種,以上只是最基本的一種。
『捌』 sql盲注和注入的區別
在我的理解力sql注入就是盲注,沒有區別,只是另一種叫法而已。就是通過sql去猜測、獲取甚至修改資料庫信息,比如表名、欄位、數據等等。一般針對bs系統,只要web設計的有問題或者有漏洞,就能夠搞定。目前來說竊取信息可能違法,所以還是不要輕易嘗試。原理很簡單,查一下一大堆,現在很多設計人員和開發人員都會關注這些問題了,所以攻擊一下小系統還是可以的,大的太困難幾乎不可能實現。
『玖』 如何用SQLMap進行SQL盲注測試
如何用SQLMap進行SQL盲注測試
SQL盲註:用SQL查詢語句去猜解表名、欄位、數據。
拿個簡單的查詢來說
select * from table where 條件='' or 1=1 --'
也就是在你的查詢參數中加入:' or 1=1 --
其他改、刪類似,注入的方式有很多種,以上只是最基本的一種。
『拾』 什麼是sql注入如何注入的呢
SQL注入一定意義上可能是目前互聯網上存在的最豐富的編程缺陷,是未經授權的人可以訪問各種關鍵和私人數據的漏洞。 SQL注入不是Web或資料庫伺服器中的缺陷,而是由於編程實踐較差且缺乏經驗而導致的。 它是從遠程位置執行的最致命和最容易的攻擊之一。
from 樹懶學堂