PHP-代码审计-身份认证
當你的才華
還撐不起你的野心時
那你就應該靜下心來學習
?
? ? ? ?代碼審計學習線上實驗,都是CE一邊實操,一邊整理的筆記,方便以后翻看時,可快速查閱。
目錄
身份認證漏洞
簡介
seesionid 固定漏洞
漏洞防范
session固定漏洞防御
身份認證漏洞
? ? ? ?認證的目的是為了認出用戶是誰,而授權的目的是為了決定用戶能夠做什么,身份認證實際上就是一個驗證憑證的過程
簡介
? ? ? ?Web身份認證通常使用Cookie、Session、Openid、OAuth、SSO、REST等進行認證,而其中最常使用的是Cookie和Session。 cookie和session都能夠進行會話跟蹤,它們的區(qū)別在于:
-
Session是在服務端保存的一個數(shù)據(jù)結(jié)構(gòu),用來跟蹤用戶的狀態(tài),這個數(shù)據(jù)可以保存在集群、數(shù)據(jù)庫、文件中;
-
Cookie是客戶端保存用戶信息的一種機制,用來記錄用戶的一些信息,也是實現(xiàn)Session的一種方式。
?
cookie身份認證漏洞
? ? ? ?這種漏洞原理相當簡單,因為cookie能夠存儲用戶信息,某些網(wǎng)站的權限驗證機制是直接讀取cookie中的字段來判斷權限,所以我們能夠直接通過修改cookie中的值來繞過驗證
實例:
verification
從上述代碼中看到,該頁面直接讀取cookie中的username字段進行的權限判斷,這種方式非常不安全
打開瀏覽器,輸入URL:http://192.168.161.133/verification/login.html
管理員登錄 賬號:root 密碼:root?普通用戶登錄 賬號:qingqing 密碼:qingqing
普通用戶:
下載firebug,打開F12 使用Firebug抓包:
?
右鍵選擇編輯,修改qingqing為root,并確定:
接下來我們按F5刷新頁面看看:
可以看到,我們此時已經(jīng)是管理員權限了
?
seesionid 固定漏洞
? ? ? ?seesionid 固定攻擊的核心要點就是讓合法用戶使用攻擊者預先設定的session ID來訪問被攻擊的應用程序,一旦用戶的會話ID被成功固定,攻擊者就可以通過此session ID來冒充用戶訪問應用程序。 簡單來講,攻擊者要想辦法,讓某個用戶通過他預先選擇的session標識符來訪問系統(tǒng),一旦系統(tǒng)接收到了這個用戶的請求,并且使用用戶傳遞過來的session標識創(chuàng)建了會話,攻擊者就可以使用這個session標識了
代碼如下:
? ? ? ?該頁面在第一次訪問的時候,這段代碼會輸出0, 刷新頁面,將輸出1。不斷刷新的話,輸出的數(shù)值會不斷增大,這意味著每一次請求的值得到了保留,客戶端和服務端之間的狀態(tài)得到了保持。
? ? ? ?我們在url中包括預先設定的session標識符, 再通過該url訪問網(wǎng)頁時,服務器就會根據(jù)傳遞過來的session標識創(chuàng)建會話,比如:
并且之后即便更換一臺電腦或者瀏覽器訪問通過此鏈接訪問此頁面,也會繼續(xù)使用一開始創(chuàng)建的seesion id進行會話。 比如:?
刷新頁面,輸出數(shù)字會不斷增大:?
為了模擬攻擊者從另一臺電腦訪問該頁面,使用另外一個瀏覽器訪問該鏈接:?
? ? ? ?可以看到初次訪問的輸出值不是0,而是在firefox上面瀏覽器中最后輸出值基礎上增加了1。這說明你已經(jīng)侵入了前一次創(chuàng)建的session,雖然你在同一臺電腦上,但是這兩個不同的瀏覽器就可以代表兩個不同的用戶,后者成功冒充成了前者
?
漏洞防范
? cookie身份認證漏洞防范
單純的cookie容易被修改,所以我們添加session變量對cookie進行驗證,添加的代碼如下: login.php:
在cookie創(chuàng)建時,就同時用session再保存一份cookie的值,并且session存放在服務端,不易被修改。 main.php:
? ? ? ?在調(diào)用cookie中的值之前,會先使用session對其中的值進行判斷,確保未被惡意修改。 在firefox中輸入url:localhost/codeaudit/verification/modify/login.html,任然使用shiyanlou賬號進行登錄:?
同樣像之前一樣,抓包修改cookie并發(fā)送,可以看到并沒偽冒用戶成功:
?
session固定漏洞防御
常見的防御方案有如下幾種:
-
1、更改Session名稱。PHP中Session的默認名稱是PHPSESSID,此變量會保存在Cookie中,如果攻擊者不分析站點,就不能猜到Session名稱,阻擋部分攻擊。
-
2、關閉透明化Session ID。透明化Session ID指當瀏覽器中的Http請求沒有使用Cookie來存放Session ID時,Session ID則使用URL來傳遞。
-
3、設置HttpOnly。通過設置Cookie的HttpOnly為true,可以防止客戶端腳本訪問這個Cookie。
-
4、每當用戶登陸的時候就進行重置sessionID
-
5、sessionID閑置過久時,進行重置sessionID
我不需要自由,只想背著她的夢
一步步向前走,她給的永遠不重
?
總結(jié)
以上是生活随笔為你收集整理的PHP-代码审计-身份认证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP-代码审计-变量覆盖
- 下一篇: PHP代码审计基础手册