版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Day2-01SQL注入漏洞基礎(chǔ)第一頁,共43頁。SQL注入背景簡介SQL注入攻擊原理SQL注入分類SQL注入滲透測試框架SQL盲注入SQL登錄繞過攻擊總結(jié)培訓(xùn)提綱第二頁,共43頁。SQL注入背景介紹第三頁,共43頁。SQL注入背景簡介什么是SQL?SQL=StructuredQueryLanguage結(jié)構(gòu)化查詢語言SQL語言提供了我們訪問操作數(shù)據(jù)庫的能力,分為:- DML(DataManipulationLanguage,數(shù)據(jù)操作語言)- DDL(DataDefinitionLanguage,數(shù)據(jù)定義語言)- DCL(DataControlLanguage,數(shù)據(jù)控制語言)- DQL(DataQueryLanguage,數(shù)據(jù)查詢語言)SQL能夠:-執(zhí)行對數(shù)據(jù)庫的查詢,DQL- 插入修改刪除數(shù)據(jù)庫數(shù)據(jù),DML- 定義數(shù)據(jù)庫實(shí)體對象結(jié)構(gòu),DDL- 設(shè)置或更改數(shù)據(jù)庫用戶角色權(quán)限信息等,DCL第四頁,共43頁。SQL注入背景簡介產(chǎn)生背景SQL注入的出現(xiàn)是Web安全史上的一個(gè)里程碑,它大概出現(xiàn)在1999年,并很快就成為Web安全的頭號大敵。黑客們發(fā)現(xiàn)通過SQL注入攻擊,可以獲取很多重要的、敏感的數(shù)據(jù),甚至能夠獲取系統(tǒng)訪問權(quán)限,這種效果并不比直接攻擊系統(tǒng)軟件差,Web攻擊一下子就流行起來。第五頁,共43頁。SQL注入攻擊原理第六頁,共43頁。SQL注入攻擊原理Web應(yīng)用工作原理第七頁,共43頁。SQL注入攻擊原理Web應(yīng)用工作原理第八頁,共43頁。SQL注入攻擊原理攻擊原理注入攻擊的根源在于用戶數(shù)據(jù)與程序代碼沒有分離,使得攻擊者有機(jī)會將程序代碼當(dāng)作用戶輸入數(shù)據(jù)提交給Web應(yīng)用程序執(zhí)行。SQL注入作為注入攻擊的一種,Web應(yīng)用程序動態(tài)生成SQL命令時(shí)沒有對用戶輸入的數(shù)據(jù)進(jìn)行驗(yàn)證過濾,使得用戶輸入的SQL語句得以執(zhí)行。第九頁,共43頁。SQL注入攻擊原理示例代碼
id=request.QueryString(“id”); setrs=server.createobject(“adodb.recordset”); sql=“select*fromadminwhereid=”&id;說明:第一行代碼獲取HTTP請求的查詢字符串?dāng)?shù)據(jù)(外部數(shù)據(jù))id,并把該id直接用于SQL語句拼串,這樣對用戶數(shù)據(jù)沒有過濾,導(dǎo)致了SQL注入漏洞。第十頁,共43頁。SQL注入攻擊分類第十一頁,共43頁。區(qū)分?jǐn)?shù)字和字符串要想構(gòu)造有效的SQL注入語句,需要對SQL語言有基本的了解。執(zhí)行SQL注入利用,首先要清楚數(shù)據(jù)庫包含不同的數(shù)據(jù)類型,他們都具有不同的表示方式,可以將它們分為兩類:-數(shù)字:不需要使用單引號來表示-字符串:需要單引號來表示使用數(shù)字值的例子:
select*fromproductswhereid=3使用字符串值的例子:
select*fromproductswherename='peta'SQL注入攻擊分類第十二頁,共43頁。內(nèi)聯(lián)和終止內(nèi)聯(lián)注入是指向查詢注入一些SQL代碼后,原來的查詢?nèi)匀粫繄?zhí)行。SQL注入攻擊分類第十三頁,共43頁。內(nèi)聯(lián)和終止終止式注入是指攻擊者在注入SQL代碼時(shí),通過注釋剩下的查詢來成功終止了SQL語句。除終止了該語句外,還需要注釋剩下的查詢以使其不會被執(zhí)行。SQL注入攻擊分類第十四頁,共43頁。常規(guī)注入和盲注入常規(guī)注入是指攻擊者通過構(gòu)造一系列有目的、有規(guī)律的HTTP請求,從返回的HTTP響應(yīng)中直接提取數(shù)據(jù)庫數(shù)據(jù)的攻擊。常規(guī)注入之所以稱為常規(guī)是由于它的普遍性、適用性,它最主要的一個(gè)特點(diǎn)是請求返回的響應(yīng)可以“直接”獲取想要的數(shù)據(jù)。SQL注入攻擊分類第十五頁,共43頁。常規(guī)注入和盲注入與常規(guī)注入相比,盲注就是一種非常規(guī)注入,它不能從HTTP請求返回的響應(yīng)中直接提取想要的數(shù)據(jù),但是可以利用多個(gè)請求響應(yīng)的細(xì)微差別間接推斷出數(shù)據(jù)庫數(shù)據(jù)。SQL注入攻擊分類第十六頁,共43頁。按攻擊方法劃分基于時(shí)間,基于WEB應(yīng)用響應(yīng)時(shí)間上的差異來尋找利用SQL注入漏洞
-/sql.asp?id=1;if+(system_user=’sa’)+waitfor+delay+’0:0:5’---/sql.asp?id=1unionselectif(substring(user(),1,4)=’root’,benchmark(100000000,rand()),1);-/sql.asp?id=1unionselect#MYSQLif(substring(user(),1,4)=’root’,sleep(5),1);-selectutl_http.request(‘’)fromdual;-selectHTTPURITYPE(‘’).getclob()fromdual;-selectdecode(substr(user,1,1),’A’,(selectcount(*)fromall_objects,all_objects,all_objects,all_objects),0)
SQL注入攻擊分類第十七頁,共43頁。按攻擊方法劃分基于錯(cuò)誤,基于錯(cuò)誤的用法需要與特定數(shù)據(jù)庫錯(cuò)誤相結(jié)合使用,下面是一個(gè)MSSQL基于錯(cuò)誤的攻擊探測方法:
-/sql.asp?id=12/is_srvrolemember(‘sysadmin’);說明:is_srvrolemember是MSSQL用于探測當(dāng)前數(shù)據(jù)庫用戶是否擁有固定數(shù)據(jù)庫角色,如上面請求,如果用戶有sysadmin數(shù)據(jù)庫角色,函數(shù)返回1,沒有返回0。類似的函數(shù)還有is_member、has_dbaccess?;阱e(cuò)誤的方法還可以結(jié)合基于條件的攻擊手法一起使用,如下請求:/sql.asp?id=12/(casewhen(system_user=’sa’)then1else0end);
SQL注入攻擊分類第十八頁,共43頁。按攻擊方法劃分基于內(nèi)容,基于錯(cuò)誤的方法可能會觸發(fā)許多不需要的錯(cuò)誤,基于內(nèi)容的攻擊手法是對基于錯(cuò)誤的方法的改進(jìn),它避免了錯(cuò)誤的產(chǎn)生,通過不同的響應(yīng)來判斷信息位。
-/sql.asp?id=12%2B(casewhen(system_user=‘sa’)then1else0end);說明:與基于錯(cuò)誤的唯一差別是用%2B替換了“/”字符。%2B是“+”的URL編碼。
SQL注入攻擊分類第十九頁,共43頁。特定數(shù)據(jù)庫的攻擊PL/SQL對于Oracle就像T-SQL對于MSSQL一樣,它們都是對標(biāo)準(zhǔn)數(shù)據(jù)查詢語言(SQL)的擴(kuò)展。PL/SQL不是一個(gè)獨(dú)立的產(chǎn)品,它是一個(gè)整合到Oracle服務(wù)器和Oracle工具中的技術(shù),可以把PL/SQL看作Oracle服務(wù)器內(nèi)的一個(gè)引擎,SQL語句執(zhí)行者處理單個(gè)的SQL語句,PL/SQL引擎處理PL/SQL程序塊。當(dāng)PL/SQL程序塊在PL/SQL引擎處理時(shí),Oracle服務(wù)器中的SQL語句執(zhí)行器處理PL/SQL程序塊中的SQL語句。PL/SQL注入是Oracle特有的一種SQL注入,它不同于一般SQL注入的地方是PL/SQL注入可以執(zhí)行PL/SQL代碼,而一般的SQL注入只能執(zhí)行SQL語句。
SQL注入攻擊分類第二十頁,共43頁。SQL注入滲透測試框架第二十一頁,共43頁。SQL注入滲透測試框架第二十二頁,共43頁。SQL注入滲透測試框架收集應(yīng)用程序可測試點(diǎn)應(yīng)用程序可測試點(diǎn)指的是Web應(yīng)用程序頁面中用戶可控?cái)?shù)據(jù)的入口點(diǎn)。用戶通過入口點(diǎn)輸入的數(shù)據(jù),如果沒有經(jīng)過驗(yàn)證過濾而被用于操作數(shù)據(jù)庫,就有可能存在SQL注入漏洞。所以在收集可測試點(diǎn)的過程中,應(yīng)盡量確保覆蓋范圍,不遺漏每一個(gè)可測試點(diǎn)。常見的可測試點(diǎn)有url查詢字符串參數(shù)、post表單數(shù)據(jù)、cookie數(shù)據(jù),post表單數(shù)據(jù)往往還包含一些隱藏字段。第二十三頁,共43頁。SQL注入滲透測試框架確定可測試點(diǎn)是否是可注入點(diǎn)確定可測試點(diǎn)是否是可注入點(diǎn),是SQL注入滲透測試最重要的一個(gè)環(huán)節(jié)。確定的依據(jù)主要有兩種,一種是依據(jù)用戶輸入數(shù)據(jù)是否會導(dǎo)致應(yīng)用程序出現(xiàn)SQL語法錯(cuò)誤,另一種是依據(jù)用戶輸入數(shù)據(jù)執(zhí)行的差異性。
-單引號測試
-and1=1與and1=2測試第二十四頁,共43頁。SQL注入滲透測試框架數(shù)據(jù)庫類型探測發(fā)現(xiàn)了SQL注入漏洞相當(dāng)于找到了切入點(diǎn),對于攻擊者沒有任何意義,對于滲透測試人員沒有令人信服的憑證,所以萬里長征要想取得成功,我們還需一步步走。如果說發(fā)現(xiàn)SQL注入漏洞為我們指明了革命的方向,那么探測清楚數(shù)據(jù)庫類型就是革命的路線方針,它可以讓我們在整個(gè)滲透測試過程中少走彎路,為我們進(jìn)一步的發(fā)起總攻提供強(qiáng)有力的支持。-oracle特有dual數(shù)據(jù)表-oracle錯(cuò)誤信息-oracle版本信息-oracle特有拼串操作-oracle特有函數(shù)第二十五頁,共43頁。SQL注入滲透測試框架數(shù)據(jù)庫基本信息探測探測數(shù)據(jù)庫類型也是探測基本信息的一步,但知道了數(shù)據(jù)類型與版本還遠(yuǎn)遠(yuǎn)不夠,還不足以為進(jìn)一步滲透提供足夠的信息,還有一些基本信息需要探測清楚,包括當(dāng)前用戶名、當(dāng)前用戶權(quán)限、當(dāng)前數(shù)據(jù)庫名、當(dāng)前數(shù)據(jù)庫表信息、當(dāng)前數(shù)據(jù)庫列信息。-爆破(access)-全局變量@@version@@servername(MSSQL)-特有函數(shù)db_name()(MSSQL)-數(shù)據(jù)庫系統(tǒng)元數(shù)據(jù)信息(mssql、mysql、oracle)第二十六頁,共43頁。SQL注入滲透測試框架爆取數(shù)據(jù)庫數(shù)據(jù)利用SQL注入漏洞爆取數(shù)據(jù)庫數(shù)據(jù),是SQL注入攻擊的最直接的價(jià)值體現(xiàn)。有了基本信息探測階段探測的數(shù)據(jù)庫表信息與數(shù)據(jù)庫列信息,爆取數(shù)據(jù)庫數(shù)據(jù)是水到渠成的事情。直接構(gòu)造SQL語句“select列名from表名”爆取數(shù)據(jù)。第二十七頁,共43頁。SQL注入滲透測試框架提權(quán)所有現(xiàn)代DBMS均為其管理員提供了對用戶可執(zhí)行操作的細(xì)微控制,可以通過為每個(gè)用戶賦予指定的權(quán)限來管理并控制其對存儲信息的訪問。如我們攻擊的后臺DBMS可能包含多個(gè)數(shù)據(jù)庫,但執(zhí)行查詢的用戶可能只能訪問其中的某一個(gè),該數(shù)據(jù)庫可能并未包含我們想要的信息。還有可能用戶只能讀取數(shù)據(jù),而我們測試的目的是檢查是否能夠以未授權(quán)的方式修改數(shù)據(jù)。換言之:執(zhí)行查詢的用戶只是一個(gè)普通的用戶,其權(quán)限遠(yuǎn)低于DBA。這時(shí)就需要提權(quán),不同數(shù)據(jù)庫的提權(quán)方式也是不同的,大體可分為一下類別:-爆破(MSSQL爆破sa口令)-具體DBMS漏洞第二十八頁,共43頁。SQL注入滲透測試框架讀寫文件MySQL的LOADDATAINFILE語句和LOAD_FILE函數(shù)讀取文件MySQL的SELECT..INTODUMP語句用于寫入文件MSSQL的bulkinsert語句可以讀取源文件、配置文件以及證書文件MSSQL的一系列系統(tǒng)存儲過程sp_oamethod、sp_oacreate、xp_等。ORACLE的utl_file包、JAVA存儲過程第二十九頁,共43頁。執(zhí)行系統(tǒng)命令MSSQL的xp_cmdshell擴(kuò)展ORACLE的JAVA存儲過程SQL注入滲透測試框架第三十頁,共43頁。SQL盲注入第三十一頁,共43頁。一般推斷技術(shù):分兩步,第一步推斷某個(gè)要探測的數(shù)據(jù)的長度N;第二步推斷N個(gè)字節(jié)的值。第一步推斷長度是非常重要的,如果沒有推斷出長度,就無法確定第二步要推斷多少個(gè)字節(jié)的值。以推斷用戶名為例它的推斷公式是: -and(selectlength(sys_context('userenv','current_user'))fromdual)=d,d是整數(shù) -and(selectsubstr(sys_context('userenv','current_user'),i,1)fromdual)='w',i取0..N-1,w取A-Z,a-z,0-9,_SQL盲注入第三十二頁,共43頁。二分法推斷技術(shù):從推斷過程看二分法推斷技術(shù)同一般推斷技術(shù)一樣分兩步,第一步推斷要探測的數(shù)據(jù)的個(gè)數(shù)或長度或者兩者都有;第二步利用二分法發(fā)送8個(gè)請求推斷要探測的數(shù)據(jù)的每一個(gè)字節(jié)值。以推斷數(shù)據(jù)表表名為例它的推斷公式是: -and(selectascii(substr(table_name,i,1))from(selectrownum,table_namefromuser_tableswhererownum<jorderby1desc)whererownum=1)>N,i取0..n-1,n是探測的數(shù)據(jù)表長度,j取2..m+1,m是探測的數(shù)據(jù)表的個(gè)數(shù),N取0..255SQL盲注入第三十三頁,共43頁。逐位推斷技術(shù):在逐位推斷技術(shù)中,長度個(gè)數(shù)的推斷也是必不可少的,以推斷TB_USRS數(shù)據(jù)表數(shù)據(jù)列的列名為例它的推斷公式是: -andbitand((selectascii(substr(column_name,i,1))from(selectrownum,column_namefromuser_tab_columnswheretable_name=‘TB_USERS’andrownum<jorderby1desc)whererownum=1),2的N次方)=2的N次方,i取0..n-1,n是探測的TB_USERS第j-1個(gè)數(shù)據(jù)列的長度,j取2..m+1,m是探測的TB_USERS數(shù)據(jù)列的個(gè)數(shù),N取0..7SQL盲注入第三十四頁,共43頁。SQL繞過攻擊第三十五頁,共43頁。利用注入漏洞繞過認(rèn)證不同于常規(guī)注入和盲注,它的目的只是利用內(nèi)聯(lián)和終止式注入繞過應(yīng)用程序認(rèn)證,這種注入漏洞主要存在于應(yīng)用程序登錄頁面。 -字符串式內(nèi)聯(lián)注入繞過 -字符串式終止注入繞過 -數(shù)字式內(nèi)聯(lián)注入繞過 -數(shù)字式終止注入繞過SQL繞過攻擊第三十六頁,共43頁。字符串式內(nèi)聯(lián)注入繞過某公司W(wǎng)eb站點(diǎn)要求用戶輸入正確的用戶名和密碼進(jìn)行表單身份認(rèn)證,用戶輸入用戶名和密碼后,應(yīng)用向數(shù)據(jù)庫發(fā)送一個(gè)查詢以對用戶進(jìn)行認(rèn)證,查詢的格式為: -select*fromadministratorswhereusername=‘[USERENTRY]’andpassword=‘[USERENTRY]’ 通過增加一個(gè)新的or條件(‘or1=1or’1‘=’1)繞過認(rèn)證,語句為:-select*fromadministratorswhereusername=''or1=1or'1'='1'andpassword=''SQL繞過攻擊第三十七頁,共43頁。字符串式終止式注入繞過某公司W(wǎng)eb站點(diǎn)要求用戶輸入正確的用戶名和密碼進(jìn)行表單身份認(rèn)證,用戶輸入用戶名和密碼后,應(yīng)用向數(shù)據(jù)庫發(fā)送一個(gè)查詢以對用戶進(jìn)行認(rèn)證,查詢的格式為: -select*fromadministratorswhereusername=‘[USERENTRY]’andpassword=‘[USERENTRY]’ 通過username字段中注入(‘or’1‘=’1‘;--),口令保持為空,語句如下: -select*fro
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 渠道開發(fā)合同范本
- 蘇皖簽了協(xié)議書
- 苗木聘請合同范本
- 莆田計(jì)生協(xié)議書
- 視頻服務(wù)協(xié)議書
- 認(rèn)證協(xié)議書模板
- 設(shè)備交接協(xié)議書
- 設(shè)備風(fēng)險(xiǎn)協(xié)議書
- 設(shè)計(jì)施工協(xié)議書
- 評委聘用協(xié)議書
- 拖拉機(jī)運(yùn)輸協(xié)議合同范本
- 如何開展護(hù)理科研
- 深圳市坪山區(qū)高標(biāo)準(zhǔn)農(nóng)田建設(shè)規(guī)劃(2021-2030年)(草案以及編輯說明)
- 泌尿系統(tǒng)疾病總論
- 勞動仲裁授課課件
- 新工廠工作匯報(bào)
- 山西低空經(jīng)濟(jì)發(fā)展現(xiàn)狀
- 汽車電子工程師崗位面試問題及答案
- 錢乙完整版本
- HXN5型機(jī)車柴油機(jī)的結(jié)構(gòu)特點(diǎn)柴油機(jī)84課件
- 高速公路維修施工方案與措施
評論
0/150
提交評論