-
當(dāng)前位置:首頁(yè) > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
wordpress防止sql注入(mysql防止sql注入php)
大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于wordpress防止sql注入的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。
開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請(qǐng)撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、防止sql注入的最佳方式
1、利用第三方軟件加固,監(jiān)控所有傳入的字符串
2、網(wǎng)上有很多防SQL注入代碼,引入到網(wǎng)頁(yè)的每一個(gè)需要傳值頁(yè)里
3、對(duì)于每一個(gè)傳值,進(jìn)行數(shù)據(jù)類型、長(zhǎng)度、規(guī)則等判斷,比如傳入ID=1,你要判斷ID里的是不是數(shù)字,且不會(huì)超過(guò)多少位,如果不滿足條件就做其它處理
通常就這三種方法
二、如何徹底防止SQL注入?
1、對(duì),限制用戶輸入肯定有效
2、應(yīng)該也可以做到,但正則不是一種高效的方法,用HtmlEncode的方法可以有效防止空格等被DBMS解釋,但注意別把編碼、解碼搞反了;存儲(chǔ)過(guò)程是DBMS執(zhí)行的一段程序,把數(shù)據(jù)操縱交給存儲(chǔ)過(guò)程執(zhí)行,而不是提交SQL語(yǔ)句,可以有效防止SQL注入。
3、地址欄的Sql攻擊,下面我引用了一段資料解釋,他關(guān)于機(jī)制說(shuō)的較清楚,關(guān)于解決,只是從客戶端考慮的,實(shí)際上用存儲(chǔ)過(guò)程等都可以防范。
資料:
首先,入侵者會(huì)對(duì)一個(gè)網(wǎng)站確定可不可以進(jìn)行注入,假設(shè)一篇文章的地址為:http://www.naohou.cn/show.asp?id=325一般會(huì)以提交兩個(gè)地址來(lái)測(cè)試,如:
http://www.naohou.cn/show.asp?id=325 and 1=1
http://www.naohou.cn/show.asp?id=325 and 1=2
第一個(gè)地址后面加了 and 1=1,構(gòu)成的SQL語(yǔ)句也就變?yōu)榱耍篠elect * from 表單名 where id=1 and 1=1這句話要成立就必須and前后語(yǔ)句都成立。那么前面的文章地址是可以訪問(wèn)的,后面的1=1也是客觀成立的,那么第一個(gè)地址就可以正常顯示;相反1=2是顯然不成立的,關(guān)鍵就看這步了,如果提交and 1=2頁(yè)面還是正常顯示說(shuō)明他并沒(méi)有將and 1=2寫入SQL語(yǔ)句,此站也就不存在注入漏洞;但如果提交and 1=2之后返回了錯(cuò)誤頁(yè)面則說(shuō)明此站點(diǎn)將后面的語(yǔ)句帶入了SQL語(yǔ)句并執(zhí)行了,也就說(shuō)明他可以進(jìn)行SQL注入。(注:如果地址后面跟的是news.asp?id='1'就得變?yōu)閚ews.asp?id=1' and '1'='1來(lái)補(bǔ)全引號(hào)了)
那么,知道可以注入后入侵者可以做什么呢?
這里就簡(jiǎn)單的說(shuō)一下,比如提交這樣的地址:
http://www.naohou.cn/show.asp?id=325 and exists (select * from 表名 where 列名=數(shù)據(jù))
根據(jù)返回的正確或錯(cuò)誤頁(yè)面來(lái)判斷猜的表名和列名是否正確,具體實(shí)現(xiàn)時(shí)是先猜表名再猜列名。當(dāng)猜出表名和列名之后還可以用ASC和MID函數(shù)來(lái)猜出各列的數(shù)據(jù)。MID函數(shù)的格式為:mid(變量名,第幾個(gè)字符開(kāi)始讀取,讀取幾個(gè)字符),比如:mid(pwd,1,2)就可以從變量pwd中的第一位開(kāi)始讀取兩位的字符。ASC函數(shù)的格式為:ASC("字符串"),如:asc("a")就可以讀出字母a的ASCII碼了。那么實(shí)際應(yīng)用的時(shí)候就可以寫為:asc(mid(pwd,1,1))這樣讀取的就是pwd列的第一個(gè)字符的ASCII碼,提交: asc(mid(pwd,1,1))>97以返回的頁(yè)面是否為正確頁(yè)面來(lái)判斷pwd列的第一個(gè)字符的ASCII碼是否大于97(a的ASCII碼),如果正確就再試是否小于122(z的ASCII碼)……這樣慢慢縮小字符的ASCII碼的范圍,猜到真實(shí)的ASCII碼也只是時(shí)間的問(wèn)題。一位一位的猜就可以得到數(shù)據(jù)庫(kù)中的用戶名和密碼了。還有一種ASP驗(yàn)證缺陷——就是用戶名和密碼都輸'or '1'='1,構(gòu)造SQL語(yǔ)句Select * form 表單名 where username='' or '1'='1' and pwd='' or '1'='1'就可以達(dá)到繞過(guò)密碼驗(yàn)證的目的。
說(shuō)了那么多,其實(shí)防范的方法很簡(jiǎn)單,我們把特殊字符(如and、or、'、")都禁止提交就可以防止注入了。ASP傳輸數(shù)據(jù)分為get和post兩種, get是通過(guò)將數(shù)據(jù)添加到URL后提交的方式,post則是利用郵寄信息數(shù)據(jù)字段將數(shù)據(jù)傳送到服務(wù)器。
三、CVE-2022–21661 WordPress 《=5.3, 攜帶WP_QUERY插件SQL注入
POC:http://127.0.0.1:8081/wordpress-5.8.1-zh_CN/wordpress/wp-admin/admin-ajax.php
POST
ecs_ajax_settings {"post_id":1,"current_page":2,"widget_id":"65054a0","max_num_pages":5}
action ecsload
query {"tax_query":{"0":{"field":"term_taxonomy_id","terms":["111) and extractvalue(rand(),concat(0x5e,user(),0x5e))#"]}}
這個(gè)問(wèn)題來(lái)源于temrs沒(méi)過(guò)濾 再加上 一個(gè)相等條件繞過(guò);
相等條件類似于,下面過(guò)濾條件沒(méi)有執(zhí)行。導(dǎo)致term攜帶了一些臟數(shù)據(jù)
if(a==b){
return;
}
sanialize(term);
1下圖所示,我們的插件里action鉤子勾住的是這個(gè)方法,這個(gè)方法利用了WP_QUERY存在漏洞的類,注意的是action 一定要有對(duì)應(yīng)的值,所以這個(gè)漏洞限制在。運(yùn)用了WP_QUERY的插件里。所以我們拿了ajax_pagnition這個(gè)插件,定義了action為ecsload
2 下圖所示 我們進(jìn)入方法,此方法構(gòu)造了sql
3 clean query方法 進(jìn)去看看,2的里面調(diào)用了這個(gè),箭頭指定的地方已經(jīng)打過(guò)補(bǔ)丁,強(qiáng)制term為int所以就無(wú)法利用了,補(bǔ)丁前不是這樣,而是對(duì)term沒(méi)有做任何操作
4進(jìn)入transform_query,在看一下里面。下面試sanitize其實(shí)可以繞過(guò),從而不過(guò)濾term這樣,條件都成立,term逃出,sql成立
四、如何利用SQL注入漏洞攻破一個(gè)WordPress網(wǎng)站
WordPress的后臺(tái)登陸地址是
,這個(gè)地址是可以公共訪問(wèn)的,我們進(jìn)入這個(gè)頁(yè)面后,點(diǎn)擊 Lost your password? 鏈接,輸入上面獲取的管理員郵件。
這樣做了之后,Wordpress會(huì)向這個(gè)郵件地址發(fā)送一封含有激活碼的密碼重置地址。我們無(wú)法登陸這個(gè)郵箱獲取這個(gè)地址,但我們可以使用上面同樣的方法獲取這個(gè)激活碼,自己拼裝出密碼重置地址。存放激活碼的字段是 user_activation_key ,我們的sql注入地址改成下面這樣:
在瀏覽器里輸入上面的地址,頁(yè)面上會(huì)顯示下面的信息:
有了激活碼,我們就可以拼裝出裝置密碼的地址了:
利用這個(gè)地址進(jìn)入重置密碼頁(yè)面:
總結(jié)
我們的黑客行動(dòng)到此基本上是大功告成,但事實(shí)上我并沒(méi)有去執(zhí)行最后一步。本文的目的不是要告訴人們?nèi)绾芜M(jìn)行黑客攻擊,而是要提醒大家防范安全漏洞,所謂知己知彼,方能百戰(zhàn)不殆,程序員應(yīng)當(dāng)對(duì)基本的黑客攻擊方式有一些了解,針對(duì)性的在編程時(shí)避免造成類似sql注入的安全漏洞,構(gòu)筑更健壯的軟件。
以上就是關(guān)于wordpress防止sql注入相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
免費(fèi)好用的wordpress主題(wordpress收費(fèi)主題排行)