版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、SQL注入漏洞基礎(chǔ),王朋濤,深信服北京安全團(tuán)隊(duì),SQL注入背景簡(jiǎn)介 SQL注入攻擊原理 SQL注入分類(lèi) SQL注入滲透測(cè)試框架 SQL盲注入 SQL登錄繞過(guò)攻擊 總結(jié),培訓(xùn)提綱,SQL注入背景介紹,SQL注入背景簡(jiǎn)介,什么是SQL? SQL=Structured Query Language 結(jié)構(gòu)化查詢語(yǔ)言 SQL語(yǔ)言提供了我們?cè)L問(wèn)操作數(shù)據(jù)庫(kù)的能力,分為: - DML(Data Manipulation Language,數(shù)據(jù)操作語(yǔ)言) - DDL(Data Definition Language,數(shù)據(jù)定義語(yǔ)言) - DCL(Data Control Language,數(shù)據(jù)控制語(yǔ)言) - DQ
2、L(Data Query Language,數(shù)據(jù)查詢語(yǔ)言) SQL能夠: - 執(zhí)行對(duì)數(shù)據(jù)庫(kù)的查詢,DQL - 插入修改刪除數(shù)據(jù)庫(kù)數(shù)據(jù),DML - 定義數(shù)據(jù)庫(kù)實(shí)體對(duì)象結(jié)構(gòu),DDL - 設(shè)置或更改數(shù)據(jù)庫(kù)用戶角色權(quán)限信息等,DCL,SQL注入背景簡(jiǎn)介,產(chǎn)生背景 SQL注入的出現(xiàn)是Web安全史上的一個(gè)里程碑,它大概出現(xiàn)在1999年,并很快就成為Web安全的頭號(hào)大敵。 黑客們發(fā)現(xiàn)通過(guò)SQL注入攻擊,可以獲取很多重要的、敏感的數(shù)據(jù),甚至能夠獲取系統(tǒng)訪問(wèn)權(quán)限,這種效果并不比直接攻擊系統(tǒng)軟件差,Web攻擊一下子就流行起來(lái)。,SQL注入攻擊原理,SQL注入攻擊原理,Web應(yīng)用工作原理,SQL注入攻擊原理,Web
3、應(yīng)用工作原理,SQL注入攻擊原理,攻擊原理 注入攻擊的根源在于用戶數(shù)據(jù)與程序代碼沒(méi)有分離,使得攻擊者有機(jī)會(huì)將程序代碼當(dāng)作用戶輸入數(shù)據(jù)提交給Web應(yīng)用程序執(zhí)行。SQL注入作為注入攻擊的一種,Web應(yīng)用程序動(dòng)態(tài)生成SQL命令時(shí)沒(méi)有對(duì)用戶輸入的數(shù)據(jù)進(jìn)行驗(yàn)證過(guò)濾,使得用戶輸入的SQL語(yǔ)句得以執(zhí)行。,SQL注入攻擊原理,示例代碼 id = request.QueryString(“id”); set rs = server.createobject(“adodb.recordset”); sql = “select * from admin where id=” 說(shuō)明:第一行代碼獲取HTTP請(qǐng)求的查詢字
4、符串?dāng)?shù)據(jù)(外部數(shù)據(jù))id,并把該id直接用于SQL語(yǔ)句拼串,這樣對(duì)用戶數(shù)據(jù)沒(méi)有過(guò)濾,導(dǎo)致了SQL注入漏洞。,SQL注入攻擊分類(lèi),區(qū)分?jǐn)?shù)字和字符串 要想構(gòu)造有效的SQL注入語(yǔ)句,需要對(duì)SQL語(yǔ)言有基本的了解。執(zhí)行SQL注入利用,首先要清楚數(shù)據(jù)庫(kù)包含不同的數(shù)據(jù)類(lèi)型,他們都具有不同的表示方式,可以將它們分為兩類(lèi): - 數(shù)字:不需要使用單引號(hào)來(lái)表示 - 字符串:需要單引號(hào)來(lái)表示 使用數(shù)字值的例子: select * from products where id=3 使用字符串值的例子: select * from products where name=peta,SQL注入攻擊分類(lèi),內(nèi)聯(lián)和終止 內(nèi)聯(lián)注
5、入是指向查詢注入一些SQL代碼后,原來(lái)的查詢?nèi)匀粫?huì)全部執(zhí)行。,SQL注入攻擊分類(lèi),內(nèi)聯(lián)和終止 終止式注入是指攻擊者在注入SQL代碼時(shí),通過(guò)注釋剩下的查詢來(lái)成功終止了SQL語(yǔ)句。除終止了該語(yǔ)句外,還需要注釋剩下的查詢以使其不會(huì)被執(zhí)行。,SQL注入攻擊分類(lèi),常規(guī)注入和盲注入 常規(guī)注入是指攻擊者通過(guò)構(gòu)造一系列有目的、有規(guī)律的HTTP請(qǐng)求,從返回的HTTP響應(yīng)中直接提取數(shù)據(jù)庫(kù)數(shù)據(jù)的攻擊。常規(guī)注入之所以稱為常規(guī)是由于它的普遍性、適用性,它最主要的一個(gè)特點(diǎn)是請(qǐng)求返回的響應(yīng)可以“直接”獲取想要的數(shù)據(jù)。,SQL注入攻擊分類(lèi),常規(guī)注入和盲注入 與常規(guī)注入相比,盲注就是一種非常規(guī)注入,它不能從HTTP請(qǐng)求返回的響
6、應(yīng)中直接提取想要的數(shù)據(jù),但是可以利用多個(gè)請(qǐng)求響應(yīng)的細(xì)微差別間接推斷出數(shù)據(jù)庫(kù)數(shù)據(jù)。,SQL注入攻擊分類(lèi),按攻擊方法劃分 基于時(shí)間,基于WEB應(yīng)用響應(yīng)時(shí)間上的差異來(lái)尋找利用SQL注入漏洞 - /sql.asp?id=1;if+(system_user=sa)+waitfor+delay+0:0:5- - /sql.asp?id=1 union select if(substring(user(),1,4)=root,benchmark(100000000,rand(),1); - /sql.asp?id=1 union select #MYSQL if(substring(user(),1,4)=
7、root,sleep(5),1); - select utl_http.request() from dual; - select HTTPURITYPE().getclob() from dual; - select decode(substr(user,1,1),A,(select count(*) from all_objects,all_objects,all_objects,all_objects),0),SQL注入攻擊分類(lèi),按攻擊方法劃分 基于錯(cuò)誤,基于錯(cuò)誤的用法需要與特定數(shù)據(jù)庫(kù)錯(cuò)誤相結(jié)合使用,下面是一個(gè)MSSQL基于錯(cuò)誤的攻
8、擊探測(cè)方法: - /sql.asp?id=12/is_srvrolemember(sysadmin); 說(shuō)明:is_srvrolemember是MSSQL用于探測(cè)當(dāng)前數(shù)據(jù)庫(kù)用戶是否擁有固定數(shù)據(jù)庫(kù)角色,如上面請(qǐng)求,如果用戶有sysadmin數(shù)據(jù)庫(kù)角色,函數(shù)返回1,沒(méi)有返回0。類(lèi)似的函數(shù)還有is_member、has_dbaccess?;阱e(cuò)誤的方法還可以結(jié)合基于條件的攻擊手法一起使用,如下請(qǐng)求: /sql.asp?id=12/(case when (system_user=sa) then 1 else 0 end);,SQL注入攻擊分類(lèi),按攻擊方法劃分 基于內(nèi)容,基于錯(cuò)誤的方法可能會(huì)觸發(fā)許多不
9、需要的錯(cuò)誤,基于內(nèi)容的攻擊手法是對(duì)基于錯(cuò)誤的方法的改進(jìn),它避免了錯(cuò)誤的產(chǎn)生,通過(guò)不同的響應(yīng)來(lái)判斷信息位。 - /sql.asp?id=12%2B(case when (system_user=sa) then 1 else 0 end); 說(shuō)明:與基于錯(cuò)誤的唯一差別是用%2B替換了“/”字符。%2B是“+”的URL編碼。,SQL注入攻擊分類(lèi),特定數(shù)據(jù)庫(kù)的攻擊 PL/SQL對(duì)于Oracle就像T-SQL對(duì)于MSSQL一樣,它們都是對(duì)標(biāo)準(zhǔn)數(shù)據(jù)查詢語(yǔ)言(SQL)的擴(kuò)展。PL/SQL不是一個(gè)獨(dú)立的產(chǎn)品,它是一個(gè)整合到Oracle服務(wù)器和Oracle工具中的技術(shù),可以把PL/SQL看作Oracle服務(wù)器
10、內(nèi)的一個(gè)引擎,SQL語(yǔ)句執(zhí)行者處理單個(gè)的SQL語(yǔ)句,PL/SQL引擎處理PL/SQL程序塊。當(dāng)PL/SQL程序塊在PL/SQL引擎處理時(shí),Oracle服務(wù)器中的SQL語(yǔ)句執(zhí)行器處理PL/SQL程序塊中的SQL語(yǔ)句。 PL/SQL注入是Oracle特有的一種SQL注入,它不同于一般SQL注入的地方是PL/SQL注入可以執(zhí)行PL/SQL代碼,而一般的SQL注入只能執(zhí)行SQL語(yǔ)句。,SQL注入攻擊分類(lèi),SQL注入滲透測(cè)試框架,SQL注入滲透測(cè)試框架,SQL注入滲透測(cè)試框架,收集應(yīng)用程序可測(cè)試點(diǎn) 應(yīng)用程序可測(cè)試點(diǎn)指的是Web應(yīng)用程序頁(yè)面中用戶可控?cái)?shù)據(jù)的入口點(diǎn)。用戶通過(guò)入口點(diǎn)輸入的數(shù)據(jù),如果沒(méi)有經(jīng)過(guò)驗(yàn)證
11、過(guò)濾而被用于操作數(shù)據(jù)庫(kù),就有可能存在SQL注入漏洞。所以在收集可測(cè)試點(diǎn)的過(guò)程中,應(yīng)盡量確保覆蓋范圍,不遺漏每一個(gè)可測(cè)試點(diǎn)。常見(jiàn)的可測(cè)試點(diǎn)有url查詢字符串參數(shù)、post表單數(shù)據(jù)、cookie數(shù)據(jù),post表單數(shù)據(jù)往往還包含一些隱藏字段。,SQL注入滲透測(cè)試框架,確定可測(cè)試點(diǎn)是否是可注入點(diǎn) 確定可測(cè)試點(diǎn)是否是可注入點(diǎn),是SQL注入滲透測(cè)試最重要的一個(gè)環(huán)節(jié)。確定的依據(jù)主要有兩種,一種是依據(jù)用戶輸入數(shù)據(jù)是否會(huì)導(dǎo)致應(yīng)用程序出現(xiàn)SQL語(yǔ)法錯(cuò)誤,另一種是依據(jù)用戶輸入數(shù)據(jù)執(zhí)行的差異性。 - 單引號(hào)測(cè)試 - and 1=1與and 1=2測(cè)試,SQL注入滲透測(cè)試框架,數(shù)據(jù)庫(kù)類(lèi)型探測(cè) 發(fā)現(xiàn)了SQL注入漏洞相當(dāng)于
12、找到了切入點(diǎn),對(duì)于攻擊者沒(méi)有任何意義,對(duì)于滲透測(cè)試人員沒(méi)有令人信服的憑證,所以萬(wàn)里長(zhǎng)征要想取得成功,我們還需一步步走。如果說(shuō)發(fā)現(xiàn)SQL注入漏洞為我們指明了革命的方向,那么探測(cè)清楚數(shù)據(jù)庫(kù)類(lèi)型就是革命的路線方針,它可以讓我們?cè)谡麄€(gè)滲透測(cè)試過(guò)程中少走彎路,為我們進(jìn)一步的發(fā)起總攻提供強(qiáng)有力的支持。 - oracle特有dual數(shù)據(jù)表 - oracle錯(cuò)誤信息 - oracle版本信息 - oracle特有拼串操作 - oracle特有函數(shù),SQL注入滲透測(cè)試框架,數(shù)據(jù)庫(kù)基本信息探測(cè) 探測(cè)數(shù)據(jù)庫(kù)類(lèi)型也是探測(cè)基本信息的一步,但知道了數(shù)據(jù)類(lèi)型與版本還遠(yuǎn)遠(yuǎn)不夠,還不足以為進(jìn)一步滲透提供足夠的信息,還有一些基本
13、信息需要探測(cè)清楚,包括當(dāng)前用戶名、當(dāng)前用戶權(quán)限、當(dāng)前數(shù)據(jù)庫(kù)名、當(dāng)前數(shù)據(jù)庫(kù)表信息、當(dāng)前數(shù)據(jù)庫(kù)列信息。 - 爆破(access) - 全局變量version servername(MSSQL) - 特有函數(shù)db_name()(MSSQL) - 數(shù)據(jù)庫(kù)系統(tǒng)元數(shù)據(jù)信息(mssql、mysql、oracle),SQL注入滲透測(cè)試框架,爆取數(shù)據(jù)庫(kù)數(shù)據(jù) 利用SQL注入漏洞爆取數(shù)據(jù)庫(kù)數(shù)據(jù),是SQL注入攻擊的最直接的價(jià)值體現(xiàn)。有了基本信息探測(cè)階段探測(cè)的數(shù)據(jù)庫(kù)表信息與數(shù)據(jù)庫(kù)列信息,爆取數(shù)據(jù)庫(kù)數(shù)據(jù)是水到渠成的事情。直接構(gòu)造SQL語(yǔ)句“select 列名 from 表名”爆取數(shù)據(jù)。,SQL注入滲透測(cè)試框架,提權(quán) 所有
14、現(xiàn)代DBMS均為其管理員提供了對(duì)用戶可執(zhí)行操作的細(xì)微控制,可以通過(guò)為每個(gè)用戶賦予指定的權(quán)限來(lái)管理并控制其對(duì)存儲(chǔ)信息的訪問(wèn)。如我們攻擊的后臺(tái)DBMS可能包含多個(gè)數(shù)據(jù)庫(kù),但執(zhí)行查詢的用戶可能只能訪問(wèn)其中的某一個(gè),該數(shù)據(jù)庫(kù)可能并未包含我們想要的信息。還有可能用戶只能讀取數(shù)據(jù),而我們測(cè)試的目的是檢查是否能夠以未授權(quán)的方式修改數(shù)據(jù)。換言之:執(zhí)行查詢的用戶只是一個(gè)普通的用戶,其權(quán)限遠(yuǎn)低于DBA。這時(shí)就需要提權(quán),不同數(shù)據(jù)庫(kù)的提權(quán)方式也是不同的,大體可分為一下類(lèi)別: - 爆破(MSSQL爆破sa口令) - 具體DBMS漏洞,SQL注入滲透測(cè)試框架,讀寫(xiě)文件 MySQL的LOAD DATA INFILE語(yǔ)句和L
15、OAD_FILE函數(shù)讀取文件 MySQL的SELECT.INTO DUMPFILE/OUTFILE語(yǔ)句用于寫(xiě)入文件 MSSQL的bulk insert語(yǔ)句可以讀取源文件、配置文件以及證書(shū)文件 MSSQL的一系列系統(tǒng)存儲(chǔ)過(guò)程sp_oamethod、sp_oacreate、xp_fileexist等。 ORACLE的utl_file包、JAVA存儲(chǔ)過(guò)程,執(zhí)行系統(tǒng)命令 MSSQL的xp_cmdshell擴(kuò)展 ORACLE的JAVA存儲(chǔ)過(guò)程,SQL注入滲透測(cè)試框架,SQL盲注入,一般推斷技術(shù):分兩步,第一步推斷某個(gè)要探測(cè)的數(shù)據(jù)的長(zhǎng)度N;第二步推斷N個(gè)字節(jié)的值。第一步推斷長(zhǎng)度是非常重要的,如果沒(méi)有推斷出
16、長(zhǎng)度,就無(wú)法確定第二步要推斷多少個(gè)字節(jié)的值。以推斷用戶名為例它的推斷公式是: - and (select length(sys_context(userenv,current_user) from dual)=d,d是整數(shù) - and (select substr(sys_context(userenv,current_user),i,1) from dual)= w,i取0.N-1,w取A-Z,a-z,0-9,_,SQL盲注入,二分法推斷技術(shù):從推斷過(guò)程看二分法推斷技術(shù)同一般推斷技術(shù)一樣分兩步,第一步推斷要探測(cè)的數(shù)據(jù)的個(gè)數(shù)或長(zhǎng)度或者兩者都有;第二步利用二分法發(fā)送8個(gè)請(qǐng)求推斷要探測(cè)的數(shù)據(jù)的每一
17、個(gè)字節(jié)值。以推斷數(shù)據(jù)表表名為例它的推斷公式是: - and (select ascii(substr(table_name,i,1) from (select rownum,table_name from user_tables where rownumN,i取0.n-1,n是探測(cè)的數(shù)據(jù)表長(zhǎng)度,j取2.m+1,m是探測(cè)的數(shù)據(jù)表的個(gè)數(shù),N取0.255,SQL盲注入,逐位推斷技術(shù):在逐位推斷技術(shù)中,長(zhǎng)度個(gè)數(shù)的推斷也是必不可少的,以推斷TB_USRS數(shù)據(jù)表數(shù)據(jù)列的列名為例它的推斷公式是: - and bitand(select ascii(substr(column_name,i,1) from (
18、select rownum,column_name from user_tab_columns where table_name=TB_USERS and rownumj order by 1 desc) where rownum=1),2的N次方)=2的N次方,i取0.n-1,n是探測(cè)的TB_USERS第j-1個(gè)數(shù)據(jù)列的長(zhǎng)度,j取2.m+1,m是探測(cè)的TB_USERS數(shù)據(jù)列的個(gè)數(shù),N取0.7,SQL盲注入,SQL繞過(guò)攻擊,利用注入漏洞繞過(guò)認(rèn)證不同于常規(guī)注入和盲注,它的目的只是利用內(nèi)聯(lián)和終止式注入繞過(guò)應(yīng)用程序認(rèn)證,這種注入漏洞主要存在于應(yīng)用程序登錄頁(yè)面。 - 字符串式內(nèi)聯(lián)注入繞過(guò) - 字符串式
19、終止注入繞過(guò) - 數(shù)字式內(nèi)聯(lián)注入繞過(guò) - 數(shù)字式終止注入繞過(guò),SQL繞過(guò)攻擊,字符串式內(nèi)聯(lián)注入繞過(guò) 某公司W(wǎng)eb站點(diǎn)要求用戶輸入正確的用戶名和密碼進(jìn)行表單身份認(rèn)證,用戶輸入用戶名和密碼后,應(yīng)用向數(shù)據(jù)庫(kù)發(fā)送一個(gè)查詢以對(duì)用戶進(jìn)行認(rèn)證,查詢的格式為: - select * from administrators where username=USER ENTRY and password=USER ENTRY 通過(guò)增加一個(gè)新的or條件( or 1=1 or 1=1)繞過(guò)認(rèn)證,語(yǔ)句為:- select * from administrators where username= or 1=1 or 1=1 and password=,SQL繞過(guò)攻擊,字符串式終止式注入繞過(guò) 某公司W(wǎng)eb站點(diǎn)要求用戶輸入正確的用戶名和密碼進(jìn)行表單身份認(rèn)證,用戶輸入用戶名和密碼后,應(yīng)用向數(shù)據(jù)庫(kù)發(fā)送一個(gè)查詢以對(duì)用戶進(jìn)行認(rèn)證,查詢的格式為: - select * from administrators where username=USER ENTRY and password=USER ENTRY 通過(guò)username字段中
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年健康協(xié)議模板
- 2025年會(huì)員注冊(cè)合同書(shū)
- 2025年食品進(jìn)口與代理銷(xiāo)售一體化合同范本3篇
- 期末復(fù)習(xí)綜合模擬卷 統(tǒng)編版語(yǔ)文八年級(jí)上冊(cè)
- 二零二五年度西餐廚師聘用合同3篇
- 二零二五年度二手房買(mǎi)賣(mài)合同交易信息保密協(xié)議3篇
- 二零二五版科研實(shí)驗(yàn)室場(chǎng)地租賃與科研設(shè)備維護(hù)保養(yǎng)協(xié)議3篇
- 2025年度新能源汽車(chē)整車(chē)買(mǎi)賣(mài)交易合同4篇
- 二零二五年度馬戲團(tuán)安全設(shè)施與人員培訓(xùn)合同4篇
- 門(mén)衛(wèi)安全責(zé)任書(shū)2025年版:智能化社區(qū)安全協(xié)議2篇
- 人教版高中數(shù)學(xué)必修二《第十章 概率》單元同步練習(xí)及答案
- 智慧校園信息化建設(shè)項(xiàng)目組織人員安排方案
- 浙教版七年級(jí)上冊(cè)數(shù)學(xué)第4章代數(shù)式單元測(cè)試卷(含答案)
- 一病一品成果護(hù)理匯報(bào)
- AQ-T 1009-2021礦山救護(hù)隊(duì)標(biāo)準(zhǔn)化考核規(guī)范
- 鹽酸埃克替尼臨床療效、不良反應(yīng)與藥代動(dòng)力學(xué)的相關(guān)性分析的開(kāi)題報(bào)告
- 消防設(shè)施安全檢查表
- 組合結(jié)構(gòu)設(shè)計(jì)原理 第2版 課件 第6、7章 鋼-混凝土組合梁、鋼-混凝土組合剪力墻
- 建筑公司資質(zhì)常識(shí)培訓(xùn)課件
- GB/T 26316-2023市場(chǎng)、民意和社會(huì)調(diào)查(包括洞察與數(shù)據(jù)分析)術(shù)語(yǔ)和服務(wù)要求
- 春節(jié)值班安全教育培訓(xùn)
評(píng)論
0/150
提交評(píng)論