Web安全PHP代碼審查之常規(guī)漏洞

2021-10-20    分類: 網(wǎng)站建設(shè)

前言

工欲善其事,必先利其器。我們做代碼審計之前選好工具也是十分必要的。下面我給大家介紹兩款代碼審計中比較好用的工具。

一、審計工具介紹

PHP代碼審計系統(tǒng)—RIPS

功能介紹

RIPS是一款基于PHP開發(fā)的針對PHP代碼安全審計的軟件。

另外,它也是一款開源軟件,由國外安全研究員JohannesDahse開發(fā),程序只有450KB,目前能下載到的最新版是0.55。

在寫這段文字之前筆者特意讀過它的源碼,它大的亮點在于調(diào)用了PHP內(nèi)置解析器接口token_get_all,

并且使用Parser做了語法分析,實現(xiàn)了跨文件的變量及函數(shù)追蹤,掃描結(jié)果中非常直觀地展示了漏洞形成及變量傳遞過程,誤報率非常低。

RIPS能夠發(fā)現(xiàn)SQL注入、XSS跨站、文件包含、代碼執(zhí)行、文件讀取等多種漏洞,支持多種樣式的代碼高亮。比較有意思的是,它還支持自動生成漏洞利用。

二、代碼審計實戰(zhàn)

通過剛才安裝的兩個審計工具運行后我們可以發(fā)現(xiàn),會分析出很多隱藏的漏洞,那下面我們看看其中的SQL注入、XSS、CSRF產(chǎn)生的原因,通過原因來分析如何去審計代碼。

SQL注入

SQL注入漏洞一直是web系統(tǒng)漏洞中占比非常大的一種漏洞,下面我們來看看SQL注入的幾種方式。

SQL注入漏洞分類

從利用方式角度可以分為兩種類型:常規(guī)注入、寬字節(jié)注入。

常規(guī)注入方式,通常沒有任何過濾,直接把參數(shù)存放到了SQL語句當(dāng)中,如下圖。

非常容易發(fā)現(xiàn),現(xiàn)在開發(fā)者一般都會做一些過濾,比如使用addslashes(),但是過濾有時候也不一定好使。

編碼注入方式

寬字節(jié)注入,這個是怎么回事呢

在實際環(huán)境中程序員一般不會寫上面類似的代碼,一般都會用addslashes()等過濾函數(shù)對從web傳遞過來的參數(shù)進行過濾。不過有句話叫做,道高一尺魔高一丈,我們看看白帽子是怎么突破的。用PHP連接MySQL的時候,當(dāng)設(shè)置character_set_client=gbk時候會導(dǎo)致一個編碼漏洞。我們知道addslashes()會把參數(shù)1’轉(zhuǎn)換成1\’,而我們提交參數(shù)1%df’時候會轉(zhuǎn)成1縗’,那我們輸入1%df’or1=1%23時候,會被轉(zhuǎn)換成1縗’or1=1#’。

簡單來說%df’會被過濾函數(shù)轉(zhuǎn)義為%df\’,%df\’=%df%5c%27在使用gbk編碼的時候會認為%df%5c是一個寬字節(jié)%df%5c%27=縗’,這樣就會產(chǎn)生注入。

那如何防御這個寬字節(jié)呢我希望大家開發(fā)網(wǎng)站盡量使用UTF8編碼格式,如果轉(zhuǎn)換麻煩,最安全的方法就是使用PDO預(yù)處理。挖掘這種漏洞主要是檢查是否使用了gbk,搜索guanjianccharacter_set_client=gbk和mysql_set_chatset('gbk')。

二次urldecode注入,這中方式也是因為使用了urldecode不當(dāng)所引起的漏洞。

我們剛才知道了addslashes()函數(shù)可以防止注入,他會在(‘)、(“)、()前面加上反斜杠來轉(zhuǎn)義。

那我們假設(shè)我們開啟了GPC,我們提交了一個參數(shù),/test.phpuid=1%2527,因為參數(shù)中沒有單引號,所以第一次解碼會變成uid=1%27,%25解碼出來就是%,

這時候程序里如果再去使用urldecode來解碼,就會把%27解碼成單引號(‘),最終的結(jié)果就是uid=1’.

我們現(xiàn)在知道了原有是因為urldecode引起的,我們可以通過編輯器的搜索urldecode和rawurldecode找到二次url漏洞。

從漏洞類型區(qū)分可以分為三種類型:

可顯

攻擊者可以直接在當(dāng)前界面內(nèi)容中獲取想要獲得的內(nèi)容。

報錯

數(shù)據(jù)庫查詢返回結(jié)果并沒有在頁面中顯示,但是應(yīng)用程序?qū)?shù)據(jù)庫報錯信息打印到了頁面中。

所以攻擊者可以構(gòu)造數(shù)據(jù)庫報錯語句,從報錯信息中獲取想要獲得的內(nèi)容,所以我建議在數(shù)據(jù)庫類中設(shè)置不拋出錯誤信息。

盲注

數(shù)據(jù)庫查詢結(jié)果無法從直觀頁面中獲取攻擊者通過使用數(shù)據(jù)庫邏輯或使數(shù)據(jù)庫庫執(zhí)行延時等方法獲取想要獲得的內(nèi)容。

SQL注入漏洞挖掘方法

針對上面提到的利用漏洞方法,總結(jié)了以下的挖掘方法:

參數(shù)接收位置,檢查是否有沒過濾直接使用_POST、$_COOKIE參數(shù)的。

SQL語句檢查,搜索關(guān)鍵詞selectupdateinsert等SQL語句關(guān)鍵處,檢查SQL語句的參數(shù)是否可以被控制。

寬字節(jié)注入,如果網(wǎng)站使用的GBK編碼情況下,搜索guanjianccharacter_set_client=gbk和mysql_set_chatset('gbk')就行。

二次urldecode注入,少部分情況,gpc可以通過編輯器的搜索urldecode和rawurldecode找到二次url漏洞。

SQL注入漏洞防范方法

雖然SQL注入漏洞非常多,但是防范起來卻挺簡單的,下面介紹幾個過濾函數(shù)和類:

前言

XSS又叫CSS(CrossSiteScript),跨站腳本攻擊。它指的是惡意攻擊者往Web頁面里插入惡意html代碼,當(dāng)用戶瀏覽該頁之時,嵌入其中Web里面的html代碼會被執(zhí)行,從而達到惡意的特殊目的。

XSS屬于被動式的攻擊,因為其被動且不好利用,所以許多人常呼略其危害性。在WEB2.0時代,強調(diào)的是互動,使得用戶輸入信息的機會大增,在這個情況下,我們作為開發(fā)者,在開發(fā)的時候,要提高警惕。

xss漏洞分類

反射型,危害小,一般

反射型XSS原理:就是通過給別人發(fā)送帶有惡意腳本代碼參數(shù)的URL,當(dāng)URL地址被打開時,特定的代碼參數(shù)會被HTML解析,執(zhí)行,如此就可以獲取用戶的COOIKE,進而盜號登陸。比如hack甲構(gòu)造好修改密碼的URL并把密碼修改成123,但是修改密碼只有在登陸方乙才能修改,乙在登陸的情況下點擊甲構(gòu)造好的URL將直接在不知情的情況下修改密碼。

特點是:非持久化,必須用戶點擊帶有特定參數(shù)的鏈接才能引起。

存儲型,危害大,影響時間長

存儲型XSS原理,假設(shè)你打開了一篇正常的文章頁面,下面有評論功能。這個時候你去評論了一下,在文本框中輸入了一些JavaScript代碼,提交之后,你刷新這個頁面后發(fā)現(xiàn)剛剛提交的代碼又被原封不動的返回來并且執(zhí)行了。

這個時候你會想,我要寫一段JavaScript代碼獲取cookie信息,然后通過ajax發(fā)送到自己的服務(wù)器去。構(gòu)造好代碼后你把鏈接發(fā)給其他的朋友,或者網(wǎng)站的管理員,他們打開JavaScript代碼就執(zhí)行了,你服務(wù)器就接收到了sessionid,你就可以拿到他的用戶權(quán)限了。

當(dāng)前題目:Web安全PHP代碼審查之常規(guī)漏洞
標(biāo)題鏈接:http://www.bm7419.com/news46/132046.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計營銷型網(wǎng)站建設(shè)、網(wǎng)站改版、品牌網(wǎng)站制作網(wǎng)站排名、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)