導航:首頁 > 程序命令 > 命令注入攻擊

命令注入攻擊

發布時間:2022-11-21 08:23:12

1. sql注入攻擊方法有哪些

1.沒有正確過濾轉義字元 在用戶的輸入沒有為轉義字元過濾時,就會發生這種形式的注入式攻擊,它會被傳遞給一個SQL語句。這樣就會導致應用程序的終端用戶對資料庫上的語句實施操縱。比方說,下面的這行代碼就會演示這種漏洞: statement := "SELECT * FROM users WHERE name ='" userName "';" 這種代碼的設計目的是將一個特定的用戶從其用戶表中取出,但是,如果用戶名被一個惡意的用戶用一種特定的方式偽造,這個語句所執行的操作可能就不僅僅是代碼的作者所期望的那樣了。例如,將用戶名變數(即username)設置為: a' or 't'='t,此時原始語句發生了變化: SELECT * FROM users WHERE name = 'a' OR 't'='t'; 如果這種代碼被用於一個認證過程,那麼這個例子就能夠強迫選擇一個合法的用戶名,因為賦值't'='t永遠是正確的。 在一些SQL伺服器上,如在SQLServer中,任何一個SQL命令都可以通過這種方法被注入,包括執行多個語句。下面語句中的username的值將會導致刪除「users」表,又可以從「data」表中選擇所有的數據(實際上就是透露了每一個用戶的信息)。 a';DROP TABLE users; SELECT * FROM data WHERE name LIKE'% 這就將最終的SQL語句變成下面這個樣子: SELECT * FROM users WHERE name = 'a';DROP TABLE users;SELECT * FROM DATA WHERE name LIKE '%'; 其它的SQL執行不會將執行同樣查詢中的多個命令作為一項安全措施。這會防止攻擊者注入完全獨立的查詢,不過卻不會阻止攻擊者修改查詢。
2.Incorrecttype handling 如果一個用戶提供的欄位並非一個強類型,或者沒有實施類型強制,就會發生這種形式的攻擊。當在一個SQL語句中使用一個數字欄位時,如果程序員沒有檢查用戶輸入的合法性(是否為數字型)就會發生這種攻擊。例如: statement := "SELECT * FROM data WHERE id = " a_variable ";" 從這個語句可以看出,作者希望a_variable是一個與「id」欄位有關的數字。不過,如果終端用戶選擇一個字元串,就繞過了對轉義字元的需要。例如,將a_variable設置為:1;DROP TABLEusers,它會將「users」表從資料庫中刪除,SQL語句變成:SELECT * FROM DATA WHERE id = 1;DROP TABLE users;
3.資料庫伺服器中的漏洞 有時,資料庫伺服器軟體中也存在著漏洞,如MYSQL伺服器中mysql_real_escape_string()函數漏洞。這種漏洞允許一個攻擊者根據錯誤的統一字元編碼執行一次成功的SQL注入式攻擊。
4.盲目SQL注入式攻擊 當一個Web應用程序易於遭受攻擊而其結果對攻擊者卻不見時,就會發生所謂的盲目SQL注入式攻擊。有漏洞的網頁可能並不會顯示數據,而是根據 注入到合法語句中的邏輯語句的結果顯示不同的內容。這種攻擊相當耗時,因為必須為每一個獲得的位元組而精心構造一個新的語句。但是一旦漏洞的位置和目標信息的位置被確立以後,一種稱為Absinthe的工具就可以使這種攻擊自動化。
5.條件響應 注意,有一種SQL注入迫使資料庫在一個普通的應用程序屏幕上計算一個邏輯語句的值: SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd'AND 1=1 這會導致一個標準的面面,而語句 SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd'AND 1=2在頁面易於受到SQL注入式攻擊時,它有可能給出一個不同的結果。如此這般的一次注入將會證明盲目的SQL注入是可能的,它會使攻擊者根據另外一個 表中的某欄位內容設計可以評判真偽的語句。
6.條件性差錯 如果WHERE語句為真,這種類型的盲目SQL注入會迫使資料庫評判一個引起錯誤的語句,從而導致一個SQL錯誤。例如: SELECT 1/0 FROM users WHERE username='Ralph'。顯然,如果用戶Ralph存在的話,被零除將導致錯誤。
7.時間延誤 時間延誤是一種盲目的SQL注入,根據所注入的邏輯,它可以導致SQL引擎執行一個長隊列或者是一個時間延誤語句。攻擊者可以衡量頁面載入的時間,從而決定所注入的語句是否為真。 以上僅是對SQL攻擊的粗略分類。但從技術上講,如今的SQL注入攻擊者們在如何找出有漏洞的網站方面更加聰明,也更加全面了。出現了一些新型的SQL攻擊手段。黑客們可以使用各種工具來加速漏洞的利用過程。我們不妨看看theAsprox Trojan這種木馬,它主要通過一個發布郵件的僵屍網路來傳播,其整個工作過程可以這樣描述:首先,通過受到控制的主機發送的垃圾郵件將此木馬安裝到電腦上,然後,受到此木馬感染的電腦會下載一段二進制代碼,在其啟動時,它會使用搜索引擎搜索用微軟的 ASP技術建立表單的、有漏洞的網站。搜索的結果就成為SQL注入攻擊的靶子清單。接著,這個木馬會向這些站點發動SQL注入式攻擊,使有些網站受到控制、破壞。訪問這些受到控制和破壞的網站的用戶將會受到欺騙,從另外一個站點下載一段惡意的JavaScript代碼。最後,這段代碼將用戶指引到第三個站點,這里有更多的惡意軟體,如竊取口令的木馬。 以前,經常有人警告或建議Web應用程序的程序員們對其代碼進行測試並打補丁,雖然SQL注入漏洞被發現和利用的機率並不太高。但近來攻擊者們越來越多地發現並惡意地利用這些漏洞。因此,在部署其軟體之前,開發人員應當更加主動地測試其代碼,並在新的漏洞出現後立即對代碼打補丁。
如果你是一個開發者,那麼你需要:

1.使用參數化的過濾性語句 要防禦SQL注入,用戶的輸入就絕對不能直接被嵌入到SQL語句中。恰恰相反,用戶的輸入必須進行過濾,或者使用參數化的語句。參數化的語句使用參數而不是將用戶輸入嵌入到語句中。在多數情況中,SQL語句就得以修正。然後,用戶輸入就被限於一個參數。下面是一個使用Java和JDBC API例子: PreparedStatement prep =conn.prepareStatement("SELECT * FROM USERS WHERE PASSWORD=?"); prep.setString(1, pwd); 總體上講,有兩種方法可以保證應用程序不易受到SQL注入的攻擊,一是使用代碼復查,二是強迫使用參數化語句的。強迫使用參數化的語句意味著嵌入用戶輸入的SQL語句在運行時將被拒絕。不過,目前支持這種特性的並不多。如H2 資料庫引擎就支持。
2.還要避免使用解釋程序,因為這正是黑客們藉以執行非法命令的手段。
3.防範SQL注入,還要避免出現一些詳細的錯誤消息,因為黑客們可以利用這些消息。要使用一種標準的輸入確認機制來驗證所有的輸入數據的長度、類型、語句、企業規則等。
4.使用專業的漏洞掃描工具。但防禦SQL注入攻擊也是不夠的。攻擊者們目前正在自動搜索攻擊目標並實施攻擊。其技術甚至可以輕易地被應用於其它的Web架構中的漏洞。企業應當投資於一些專業的漏洞掃描工具,如大名鼎鼎的Acunetix的Web漏洞掃描程序等。一個完善的漏洞掃描程序不同於網 絡掃描程序,它專門查找網站上的SQL注入式漏洞。最新的漏洞掃描程序可以查找最新發現的漏洞。
5.最後一點,企業要在Web應用程序開發過程的所有階段實施代碼的安全檢查。首先,要在部署Web應用之前實施安全測試,這種措施的意義比以前更大、更深遠。企業還應當在部署之後用漏洞掃描工具和站點監視工具對網站進行測試。

2. 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注入攻擊。

;

3. php網站要防哪幾種常見方式攻擊

常見攻擊方式:1、命令注入,2、eval注入,3、客戶端腳本攻擊,4、跨網站腳本攻擊,5、SQL注入攻擊,6、跨網站請求偽造攻擊,7、Session 會話劫持,8、Session 固定攻擊,9、HTTP響應拆分攻擊,10、文件上傳漏洞,11、目錄穿越漏洞,12、遠程文件包含攻擊,13、動態函數注入攻擊,14、URL攻擊,15、表單提交欺騙攻擊,16、HTTP請求欺騙攻擊

4. 什麼叫"注入攻擊"麻煩具體解釋一下

1、什麼是注入式攻擊

注入式攻擊是通過傳遞一些帶有特定的字元的參數來改變執行的SQL語句,從而達到破壞的效果。

2、如何來防範注入式攻擊
注入式攻擊主要是因為沒有對request.QueryString帶的參數進行驗證,從而給攻擊者有機會進行注入攻擊。

5. 怎樣在web應用防火牆上設置操作系統命令注入攻擊的防護措施

這個是waf具有的防護手段,默認會啟用策略,可以防護的,您操作的是什麼廠商的
web應用防火牆
?銥迅信息的web應用防火牆默認是開啟的。

6. SQL注入攻擊的種類和防範手段有哪些

所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的查詢字元串,欺騙伺服器執行惡意的SQL命令。

在某些表單中,用戶輸入的內容直接用來構造(或者影響)動態SQL命令,或作為存儲過程的輸入參數,這類表單特別容易受到SQL注入式攻擊。常見的SQL注入式攻擊過程類如:


⑴ 某個ASP.NET Web應用有一個登錄頁面,這個登錄頁面控制著用戶是否有權訪問應用,它要求用戶輸入一個名稱和密碼。


⑵ 登錄頁面中輸入的內容將直接用來構造動態的SQL命令,或者直接用作存儲過程的參數。

7. 常見WEB攻擊之命令注入

即 Command Injection。是指通過提交惡意構造的參數破壞命令語句結構,從而達到執行惡意命令的目的。

在Web應用中,有時候會用到一些命令執行的函數,如php中system、exec、shell_exec等,當對用戶輸入的命令沒有進行限制或者過濾不嚴導致用戶可以執行任意命令時,就會造成命令執行漏洞。

黑客將構造好的命令發送給web伺服器,伺服器根據拼接命令執行注入的命令,最後講結果顯示給黑客。

以DVWA為例,下面使用ping命令測試IP,正常輸入一個IP或者域名會返回一個正常的返回結果。
當輸入惡意構造的語句 www..com && netstat -an,會把後面的語句也給執行了:

執行結果:

PHP的常見命令執行函數:
system(),exec(),shell_exec(),passthru()

1、system()

system — 執行外部程序,並且顯示輸出

常規用法:

使用PHP執行:
php test1.php www..com

exec — 執行一個外部程序

3、shell_exec()

shell_exec — 通過 shell 環境執行命令,並且將完整的輸出以字元串的方式返回。

4、passthru()

passthru() 函數與 exec() 函數類似,執行外部程序並且顯示原始輸出。

Windows:

用^轉義<

如果加上單引號會寫不進去,如果加雙引號會把雙引號一起寫進去,所以要用^轉義<

linux

linux下需要用來轉義<,不過很多php都默認開啟gpc,可以先用16進制轉換一句話再用xxd命令把16進制還原.

<?php eval($_POST[pass]);>
轉換為16進制:


由於我用的是Linux,所以使用payload寫入一句話:

寫入成功:

1、採用白名單,或使用正則表達式進行過濾。

2、不要讓用戶可以直接控制eval()、system、exec、shell_exec等函數的參數。

3、在進入執行命令函數和方法前,對變數進行過濾,對敏感字元進行轉義。

8. 什麼是SQL注入攻擊

SQL 注入是注入式攻擊中的常見類型。 SQL 注入式攻擊是未將代碼與數據進行嚴格的隔離 ,導致在讀取用戶數據的時候 , 錯誤地把數據作為代碼的一部分執行 , 從而導致一些安全問題。

SQL 注入自誕生以來以其巨大的殺傷力聞名。典型的 SQL 注入的例子是當對 SQL 語旬進行字元串拼接操作時 , 直接使用未加轉義的用戶輸入內容作為變數 ,比如 :

實例

在上面的例子中 ,如果用戶輸入的 ID 只是一個數字是沒有問題的 , 可以執行正常的查詢語句。但如果直接用「;」隔開,在 testCondition 里插入其他 SQL 語旬,會帶來意想不到的結果,比如輸入 drop 、 delete 等。

9. 如何進行SQL注入攻擊

SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令,首先你要熟悉SQL語句和語法
猜表名
And (Select count(*) from 表名)<>0
猜列名
And (Select count(列名) from 表名)<>0
也可以這樣
and exists (select * from 表名)
and exists (select 列名 from 表名)

10. 怎樣防止CRLF注入攻擊的

轉自http://www.ericfish.com/?q=100014

什麼是CRLF注入?

CRLF的意思就是回車(CR, ASCII 13, \r) 換行(LF, ASCII 10, \n)。
這兩個ACSII字元不會在屏幕有任何輸出,但在Windows中廣泛使用來標識一行的結束。而在Linux/UNIX系統中只有換行符。
CR和LF組合在一起即CRLF命令,它表示鍵盤上的"Enter"鍵。

CRLF注入就是說黑客能夠將CRLF命令注入到系統中。它不是系統或伺服器軟體的漏洞,而是網站應用開發時,有些開發者沒有意識到此類攻擊存在的可能而造成的。

針對這個漏洞黑客能夠做什麼?

就算黑客發現網站存在CRLF注入,他們仍然受到應用結構和這個缺陷的嚴重程度的限制。

對有些站點它將非常嚴重,而有些站點它只是很小的bug。

HTTP Header CRLF Injection

許多網路協議,包括HTTP也使用CRLF來表示每一行的結束。這就意味著用戶可以通過CRLF注入自定義HTTP header,導致用戶可以不經過應用層直接與Server對話。

HTTP header的定義就是基於這樣的"Key: Value"的結構,用CRLF命令表示一行的結尾。
"Location:"頭用來表示重定向的URL地址,"Set-Cookie:"頭用來設置cookies。
如果用戶的輸入經過驗證,其中存在CRLF的字元就可以被用來達到欺騙的目的。

如何預防?

過濾用戶輸入,可能存在CRLF注入的地方過濾掉CRLF字元。

閱讀全文

與命令注入攻擊相關的資料

熱點內容
簡訊刪除助手文件夾 瀏覽:686
java辦公自動化 瀏覽:340
php中超鏈接 瀏覽:253
linux默認路由設置 瀏覽:36
linux如何掛載iso 瀏覽:432
vs程序換文件夾後不能編譯 瀏覽:557
安卓源碼編譯輸入腳本沒反應 瀏覽:47
phpmysql自增 瀏覽:167
把ppt保存為pdf 瀏覽:533
汽車密封件加密配件 瀏覽:887
黑馬程序員15天基礎班 瀏覽:560
java調整格式 瀏覽:521
香港雲伺服器租用價 瀏覽:78
linuxsublime3 瀏覽:560
imac混合硬碟命令 瀏覽:277
沈陽用什麼app租房車 瀏覽:857
00後高中生都用什麼app 瀏覽:238
戴爾塔式伺服器怎麼打開獨立顯卡 瀏覽:807
醫療程序員招聘 瀏覽:598
住宿app可砍價是什麼意思 瀏覽:133