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