mylovelybabycloset.com-′天天插天天爽,99精品国产综合久久久久五月天,爱爱视频网站,无码中文字幕,日本成A人片在线观看网站,四川WBBBB搡BBBB嗓,蜜臀av在线操,世界上最贵的一根毛价值20万

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

    2018-08-21

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

    一、審計(jì)工具介紹

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

    功能介紹

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

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

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

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

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

    二、代碼審計(jì)實(shí)戰(zhàn)

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

    SQL注入

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

    SQL 注入漏洞分類

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

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

    開發(fā)者一般都會(huì)做一些過濾,比如使用addslashes(),但是過濾有時(shí)候也不一定好使。

    編碼注入方式

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

    在實(shí)際環(huán)境中程序員一般不會(huì)寫上面類似的代碼,一般都會(huì)用addslashes()等過濾函數(shù)對(duì)從web傳遞過來的參

    數(shù)進(jìn)行過濾。不過有句話叫做,道高一尺魔高一丈,我們看看白帽子是怎么突破的。用PHP連接MySQL的時(shí)候

    ,當(dāng)設(shè)置 character_set_client=gbk時(shí)候會(huì)導(dǎo)致一個(gè)編碼漏洞。我們知道addslashes() 會(huì)把參數(shù) 1’ 轉(zhuǎn)換成 1\’,

    而我們提交參數(shù) 1%df’ 時(shí)候會(huì)轉(zhuǎn)成 1縗’,那我們輸入 1%df’ or 1=1%23時(shí)候,會(huì)被轉(zhuǎn)換成 1縗’ or 1=1#’。

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

    那如何防御這個(gè)寬字節(jié)呢?我希望大家開發(fā)網(wǎng)站盡量使用UTF8編碼格式,如果轉(zhuǎn)換麻煩,安全的方法就是

    使用PDO預(yù)處理。挖掘這種漏洞主要是檢查是否使用了gbk,搜索guanjianc character_set_client=gbk 和

    mysql_set_chatset('gbk') 。

    二次urldecode注入,這中方式也是因?yàn)槭褂昧藆rldecode不當(dāng)所引起的漏洞。

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

    那我們假設(shè)我們開啟了GPC,我們提交了一個(gè)參數(shù),/test.php?uid=1%2527,因?yàn)閰?shù)中沒有單引號(hào),所以第一次解碼會(huì)變成uid=1%27,%25解碼出來就是%,

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

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

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

    可顯

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

    報(bào)錯(cuò)

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

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

    盲注

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

    得的內(nèi)容。

    SQL 注入漏洞挖掘方法

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

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

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

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

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

    漏洞。

    SQL 注入漏洞防范方法

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

    XSS 又叫 CSS (Cross Site Script) ,跨站腳本攻擊。它指的是惡意攻擊者往 Web 頁面里插入惡意 html 

    代碼,當(dāng)用戶瀏覽該頁之時(shí),嵌入其中 Web 里面的 html 代碼會(huì)被執(zhí)行,從而達(dá)到惡意的特殊目的。

    XSS 屬于被動(dòng)式的攻擊,因?yàn)槠浔粍?dòng)且不好利用,所以許多人常呼略其危害性。在 WEB2.0 時(shí)代,強(qiáng)調(diào)的是

    互動(dòng),使得用戶輸入信息的機(jī)會(huì)大增,在這個(gè)情況下,我們作為開發(fā)者,在開發(fā)的時(shí)候,要提高警惕。

    xss 漏洞分類

    反射型,危害小,一般

    反射型XSS原理:就是通過給別人發(fā)送帶有惡意腳本代碼參數(shù)的URL,當(dāng)URL地址被打開時(shí),特定的代碼參數(shù)會(huì)

    被HTML解析,執(zhí)行,如此就可以獲取用戶的COOIKE,進(jìn)而盜號(hào)登陸。比如hack甲構(gòu)造好修改密碼的URL并把密

    碼修改成123,但是修改密碼只有在登陸方乙才能修改,乙在登陸的情況下點(diǎn)擊甲構(gòu)造好的URL將直接在不知

    情的情況下修改密碼。

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

    存儲(chǔ)型,危害大,影響時(shí)間長

    存儲(chǔ)型XSS原理,假設(shè)你打開了一篇正常的文章頁面,下面有評(píng)論功能。這個(gè)時(shí)候你去評(píng)論了一下,在文本框

    中輸入了一些JavaScript代碼,提交之后,你刷新這個(gè)頁面后發(fā)現(xiàn)剛剛提交的代碼又被原封不動(dòng)的返回來并且執(zhí)行了。

    這個(gè)時(shí)候你會(huì)想,我要寫一段 JavaScript 代碼獲取 cookie 信息,然后通過ajax發(fā)送到自己的服務(wù)器去。構(gòu)

    造好代碼后你把鏈接發(fā)給其他的朋友,或者網(wǎng)站的管理員,他們打開 JavaScript 代碼就執(zhí)行了,你服務(wù)器

    就接收到了sessionid,你就可以拿到他的用戶權(quán)限了。


    上一條:開發(fā)一款app需要幾個(gè)階段

    下一條:沒有了