国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

php session利用總結

發(fā)布時(shí)間:2022-05-12 13:46 來(lái)源:新網(wǎng) 閱讀:162 作者:網(wǎng)絡(luò ) 欄目: 服務(wù)器 歡迎投稿:712375056

??這里主要講講傳統的PHP中的“服務(wù)端Session”。至于什么是服務(wù)端Session,什么是客戶(hù)端Session,可以看看P神的**客戶(hù)端 session 導致的安全問(wèn)題。Session概念:在計算機中,尤其是在網(wǎng)絡(luò )應用中,稱(chēng)為“會(huì )話(huà)控制”。Session 對象存儲特定用戶(hù)會(huì )話(huà)所需的屬性及配置信息。這樣,當用戶(hù)在應用程序的 Web 頁(yè)之間跳轉時(shí),存儲在 Session 對象中的變量將不會(huì )丟失,而是在整個(gè)用戶(hù)會(huì )話(huà)中一直存在下去。下面就由小編和大家講一講php session利用總結。

??當用戶(hù)請求來(lái)自應用程序的 Web 頁(yè)時(shí),如果該用戶(hù)還沒(méi)有會(huì )話(huà),則 Web 將自動(dòng)創(chuàng )建一個(gè) Session 對象。當會(huì )話(huà)過(guò)期或被放棄后,服務(wù)器將終止該會(huì )話(huà)。

??Session機制:session內容一般以文件的形式存儲于服務(wù)器中,而本地瀏覽器會(huì )存儲一個(gè)與服務(wù)器中session文件對應的Cookie值,Cookie存儲的是鍵值為“PHPSESSID”的Seeion_id值,用戶(hù)在訪(fǎng)問(wèn)應用時(shí),每次跳轉發(fā)生請求時(shí),會(huì )自動(dòng)把這個(gè)存儲session_id的Cookie值發(fā)送過(guò)去,因此web應用的所有頁(yè)面都可以獲取到這個(gè)SESSION_ID值,也就可以通過(guò)session_id獲取服務(wù)器中存儲的session值,當用戶(hù)關(guān)閉瀏覽器后,cookie存儲的session_id自動(dòng)清除,一般服務(wù)器存儲的session文件也會(huì )在30分鐘后自動(dòng)清除。

??一、比如在wamp環(huán)境下,index.php如下:

??session_start();

??phpinfo();

???>

??首先理解一下session_start()

??當會(huì )話(huà)自動(dòng)開(kāi)始或者通過(guò) session_start() 手動(dòng)開(kāi)始的時(shí)候, PHP 內部會(huì )依據客戶(hù)端傳來(lái)的PHPSESSID來(lái)獲取現有的對應的會(huì )話(huà)數據(即session文件),PHP 會(huì )自動(dòng)反序列化session文件的內容,并將之填充到 $_SESSION 超級全局變量中。如果不存在對應的會(huì )話(huà)數據,則創(chuàng )建名為sess_PHPSES SID(客戶(hù)端傳來(lái)的)的文件。如果客戶(hù)端未發(fā)送PHPSESSID,則創(chuàng )建一個(gè)由32個(gè)字母組成的PHPSESSID,并返回set-cookie。

??可以看到請求中對應的PHPSESSID:ifrvi9r7ui81r0fjq569b06862

??在服務(wù)器端,即/wamp/tmp下我們就可以發(fā)現一個(gè)生成的記錄Session的文件,因為也沒(méi)有記錄什么會(huì )話(huà)信息,因此該文件是一個(gè)空文件。

??補充一下關(guān)于php-Session相關(guān)配置的說(shuō)明

??在php.ini中對Session存在許多配置,這里我們通過(guò)phpinfo來(lái)說(shuō)明幾個(gè)重要的點(diǎn)。

??說(shuō)明如下:

??session.save_path="" --設置session的存儲路徑

??session.save_handler="" --設定用戶(hù)自定義存儲函數,如果想使用PHP內置會(huì )話(huà)存儲機制之外的可以使用本函數(等方式),默認files以文件存儲

??session.auto_start boolen --指定會(huì )話(huà)模塊是否在請求開(kāi)始時(shí)啟動(dòng)一個(gè)會(huì )話(huà),默認為0不啟動(dòng)

??session.serialize_handler string --定義用來(lái)序列化/

??二、常見(jiàn)的php-session存放位置

??/var/lib/php5/sess_PHPSESSID/var/lib/php7/sess_PHPSESSID/var/lib/php/sess_PHPSESSID/tmp/sess_PHPSESSID/tmp/sessions/sess_PHPSESSED0x02 Session可能導致的攻擊面

??Session序列化攻擊Session文件包含Session偽造用戶(hù)登錄Session邏輯漏洞0x03 Session序列化攻擊

??Serialize_handler

??要了解Session序列化攻擊,先來(lái)了解一下Session機制中對序列化是如何處理的。

??在php中存在三種序列化處理引擎

??本地測試如下:

??Session文件內容分別對應結果為

??test|s:7:"CoCo1er";

??tests:7:"CoCo1er";

??a:1:{s:4:"test";s:7:"CoCo1er";}

??攻擊利用原理

??payload千萬(wàn)條,原理第一條。

??(這里補充說(shuō)一點(diǎn),PHP中的Session的實(shí)現是沒(méi)有的問(wèn)題,危害主要是由于程序員的Session使用不當而引起的。如下)

??使用不同引擎來(lái)處理session文件

??如果在PHP在反序列化存儲的$_SESSION數據時(shí)使用的引擎和序列化使用的引擎不一樣,會(huì )導致數據無(wú)法正確第反序列化。通過(guò)精心構造的數據包,就可以繞過(guò)程序的驗證或者是執行一些系統的方法。例如:

??在這么一種情況下:

??假如我們使用php_serialize引擎時(shí)進(jìn)行數據存儲時(shí)的序列化,可以得到內容

??$_SESSION[‘key’] = ‘Boby’;

??a:1:{s:3:”key”;s:4:”Boby”;}

??三、這時(shí)我們的解析采用了另一種引擎:php

??思考一下這時(shí)會(huì )發(fā)生什么情況?(php引擎中以豎線(xiàn)來(lái)分隔鍵和值)

??如果像上面我們的payload換一下,傳入內容以及得到的存儲內容如下:

??$_SESSION['key'] = '|O:4:"User":0:{}';

??a:1:{s:3:"key";s:16:"|O:4:"User":0:{}";}

??這時(shí)候a:1:{s:3:"key";s:16:"被當作了key,而后續的O:4:"User":0:{}";}被當作了value從而被反序列化。這里可能有人會(huì )問(wèn)了,為什么會(huì )被反序列化?

??看看官方文檔

??這里可能還會(huì )有人問(wèn)?那串value不符合"正常"的被反序列化的字符串規則。這個(gè)也不用擔心,這里提到一個(gè)unserialize的特性,之前也做題也遇到過(guò)。在執行unserialize的時(shí)候,如果字符串前面滿(mǎn)足了可被反序列化的規則即后續的不規則字符會(huì )被忽略。

??四、如果不太好理解不如直接來(lái)看一個(gè)在線(xiàn)測試用例:

??總結一下,在php以php_serialize引擎生成session,然而又以php引擎來(lái)解析時(shí),我們通過(guò)傳入類(lèi)似

??$_SESSION[‘name’] = |序列化內容

??這種形式的payload即有可能觸發(fā)反序列化漏洞。當然這里只是提到了能夠找到反序列化利用的點(diǎn),至于能不能真正觸發(fā)反序列化漏洞還需要結合當前環(huán)境以及一些魔術(shù)函數中是否存在可利用點(diǎn)。這就涉及到php反序列化漏洞的利用知識點(diǎn)了,這里也就不詳細講了。關(guān)于Session反序列化攻擊的復雜利用方式,可以參考2018LCTF中的bestphp’s revenge一題。

??五、沒(méi)有$_SESSION變量賦值

??從上面的情況中我們可以發(fā)現我們對session的賦值可控。那如果代碼中不存在對$_SESSION變量賦值的情況下如何利用呢?來(lái)看下面一個(gè)點(diǎn)。

??php還存在一個(gè)upload_process機制,即自動(dòng)在$_SESSION中創(chuàng )建一個(gè)鍵值對,值中剛好存在用戶(hù)可控的部分。

??寫(xiě)入的方式主要是利用PHP中Session Upload Progress來(lái)進(jìn)行設置,具體為,在上傳文件時(shí),如果POST一個(gè)名為PHP_SESSION_UPLOAD_PROGRESS的變量,就可以將filename的值賦值到session中。

??//上傳表單

??既然filename字段能夠寫(xiě)入session中那么就滿(mǎn)足了session可控條件,后續的利用條件同上面所述的情景一致,兩種不同引擎先后作用導致了惡意的序列化字符串被解析。

??六、0x04 Session文件包含

??這個(gè)也是一個(gè)比較舊的知識點(diǎn)了,其實(shí)不僅是Session文件包含,仔細想想,理論上只要能夠在文件中寫(xiě)入php代碼,再被include包含進(jìn)來(lái)不都可以實(shí)現getshell嘛?只不過(guò)在這里我們的可控點(diǎn)是Session文件,如果能向其中寫(xiě)入php代碼,也是可以實(shí)現文件包含漏洞利用的。

??作為文件包含的利用這里就不展示了,網(wǎng)上關(guān)于這個(gè)的基礎資料早就爛大街了。

??值得一提的是,往往現在的CTF出題不會(huì )僅限于文件包含這一個(gè)點(diǎn)來(lái)出題,而是利用諸如session lfi的形式來(lái)入題獲取源碼等。而且可能加入open_basedir來(lái)限制路徑,此時(shí)就需要熟悉了解session的機制,通過(guò)函數來(lái)改變save路徑來(lái)利用。這個(gè)思路是在XCTF Final中出現的bestphp一題中的考點(diǎn)。感興趣的同學(xué)可以去找到環(huán)境復現一波。

??七、0x05 Session偽造用戶(hù)登錄

??前幾天正好3CTF出了一個(gè)這個(gè)考點(diǎn),這里以那個(gè)題目來(lái)說(shuō)明一下利用方式。(由于沒(méi)有提供復現環(huán)境,此處也只能限于“紙上談兵”,希望大家能夠理解一下利用原理即可。)

??**利用前提:**session可控;知道session存儲格式。

??這里的考題是多個(gè)攻擊面的組合。題面index.php下提示要以admin登錄。

??sql盲注可以跑sqlmap拿到執行shellsql root用戶(hù)存在file權限,但是往站點(diǎn)直接寫(xiě)shell無(wú)法成功(猜測應該是站點(diǎn)根目錄有限制,但是可以猜測/tmp可寫(xiě)掃后臺發(fā)現test.php,訪(fǎng)問(wèn)發(fā)現回顯了session的數據結構Array([username]=>test),知道了session的格式。key為username,至于采用了哪種序列化引擎?三種都測一下就完事。這里滿(mǎn)足了兩個(gè)利用前提。通過(guò)sqlmap-shell往/tmp寫(xiě)入文件偽造adminpayload:select 'username|s:5:"admin";' into outfile '/tmp/sess_PHPSESSID'最后修改成對應設計的PHPSESSID即可偽造admin登錄拿到flag。0x06 Session邏輯漏洞

??很遺憾這個(gè)點(diǎn)也沒(méi)有可以復現的環(huán)境。(官方買(mǎi)斷...)這個(gè)是上兩周unctf中出現的一道web題考點(diǎn)。這個(gè)邏輯漏洞處在重置密碼處。過(guò)程大致如下。

??八、密碼重置分為三個(gè)步驟

??填寫(xiě)需要重置的用戶(hù)名用戶(hù)名綁定的郵箱中收到驗證碼填寫(xiě)驗證碼,進(jìn)入重置密碼頁(yè)面,填寫(xiě)完新密碼完成重置。這里存在的邏輯漏洞在于第一個(gè)頁(yè)面的填寫(xiě)用戶(hù)名處,猜測后臺有設置session。類(lèi)似:$_SESSION[‘name’] = $_POST['name'];

??九、利用方式:重置admin密碼

??打開(kāi)一個(gè)正常頁(yè)面完整流程走到最后一步,填寫(xiě)完驗證碼通過(guò)后,填寫(xiě)新密碼,此時(shí)并不提交。新開(kāi)另外一個(gè)頁(yè)面完成第一步,重置用戶(hù)填寫(xiě)admin,此時(shí)Session不再是我們之前自己的用戶(hù),而變成了admin。這時(shí)完成之前頁(yè)面的提交。成功重置admin密碼。這里邏輯漏洞產(chǎn)生的原因在于對填寫(xiě)驗證碼后沒(méi)有對相關(guān)用戶(hù)綁定做記錄,在最后一步重置密碼時(shí)沒(méi)有對Session的可靠性進(jìn)行檢查就直接執行了功能。而我們都知道Session存儲在服務(wù)器端,因此我們再開(kāi)一個(gè)頁(yè)面即可完成對單一session文件內容的修改(保證在同一個(gè)PHPSEEID下)。

??這里僅僅是記錄了自己關(guān)于PHP的session機制相關(guān)的學(xué)習,舉的都是自己最近在CTF題中接觸到的點(diǎn),但關(guān)于session的利用點(diǎn)怎么可能只有這幾個(gè)?遇到了再補充學(xué)習吧。限于篇幅沒(méi)有展開(kāi)講拓展利用,但是說(shuō)白了,拓展利用就是多個(gè)復雜知識點(diǎn)的綜合。我認為只有把原理性的問(wèn)題搞清楚了才有可能去理解復雜的組合攻擊。另外如果文中有什么理解表達錯誤的地方還望師傅們指正。小伙伴們要想獲得更多php session的內容,請關(guān)注特網(wǎng)!

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

无码中文字幕乱在线观看| 成AV人片一区二区三区久久| 国产欧美日韩亚洲精品区| 亚洲AV一二三又爽又色又色| 太紧了夹得我的巴好爽| 国产日韩精品欧美一区|