• <samp id="mz5ne"><acronym id="mz5ne"></acronym></samp>
      <ol id="mz5ne"></ol>
    1. <samp id="mz5ne"></samp>
      <mark id="mz5ne"></mark>

        <fieldset id="mz5ne"></fieldset>

        免费看又黄又无码的网站_久久久高清国产免费观看_亚洲一区二区三区在线免费观看_免费欧洲美女a视频一级毛片_日本最新免费二区三区

        ×

        php session利用總結(jié)

        分類:云服務(wù)資訊 編輯: 瀏覽量:100
        2021-07-27 15:18:42
        ??這里主要講講傳統(tǒng)的PHP中的“服務(wù)端Session”。至于什么是服務(wù)端Session,什么是客戶端Session,可以看看P神的**客戶端 session 導(dǎo)致的安全問(wèn)題。Session概念:在計(jì)算機(jī)中,尤其是在網(wǎng)絡(luò)應(yīng)用中,稱為“會(huì)話控制”。Session 對(duì)象存儲(chǔ)特定用戶會(huì)話所需的屬性及配置信息。這樣,當(dāng)用戶在應(yīng)用程序的 Web 頁(yè)之間跳轉(zhuǎn)時(shí),存儲(chǔ)在 Session 對(duì)象中的變量將不會(huì)丟失,而是在整個(gè)用戶會(huì)話中一直存在下去。下面就由新網(wǎng)小編和大家講一講php session利用總結(jié)。

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

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

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

        ??session_start();

        ??phpinfo();

        ???>

        ??首先理解一下session_start()

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

        ??可以看到請(qǐng)求中對(duì)應(yīng)的PHPSESSID:ifrvi9r7ui81r0fjq569b06862

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

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

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

        ??說(shuō)明如下:

        ??session.save_path="" --設(shè)置session的存儲(chǔ)路徑

        ??session.save_handler="" --設(shè)定用戶自定義存儲(chǔ)函數(shù),如果想使用PHP內(nèi)置會(huì)話存儲(chǔ)機(jī)制之外的可以使用本函數(shù)(數(shù)據(jù)庫(kù)等方式),默認(rèn)files以文件存儲(chǔ)

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

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

        ??二、常見的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可能導(dǎo)致的攻擊面

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

        ??Serialize_handler

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

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

        ??本地測(cè)試如下:

        ??Session文件內(nèi)容分別對(duì)應(yīng)結(jié)果為

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

        ??tests:7:"CoCo1er";

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

        ??攻擊利用原理

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

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

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

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

        ??在這么一種情況下:

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

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

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

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

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

        ??如果像上面我們的payload換一下,傳入內(nèi)容以及得到的存儲(chǔ)內(nèi)容如下:

        ??$_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:"被當(dāng)作了key,而后續(xù)的O:4:"User":0:{}";}被當(dāng)作了value從而被反序列化。這里可能有人會(huì)問(wèn)了,為什么會(huì)被反序列化?

        ??看看官方文檔

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

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

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

        ??$_SESSION[‘name’] = |序列化內(nèi)容

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

        ??五、沒有$_SESSION變量賦值

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

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

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

        ??//上傳表單

        ??既然filename字段能夠?qū)懭雜ession中那么就滿足了session可控條件,后續(xù)的利用條件同上面所述的情景一致,兩種不同引擎先后作用導(dǎo)致了惡意的序列化字符串被解析。

        ??六、0x04 Session文件包含

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

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

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

        ??七、0x05 Session偽造用戶登錄

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

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

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

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

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

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

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

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

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

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

        聲明:免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)

        送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)

        需注明出處:新網(wǎng)idc知識(shí)百科

        免費(fèi)咨詢獲取折扣

        Loading
        国产精品视频白浆免费视频_久久久高清国产免费观看_亚洲一区二区三区在线免费观看_免费欧洲美女a视频一级毛片
      1. <samp id="mz5ne"><acronym id="mz5ne"></acronym></samp>
          <ol id="mz5ne"></ol>
        1. <samp id="mz5ne"></samp>
          <mark id="mz5ne"></mark>

            <fieldset id="mz5ne"></fieldset>
            霍州市| 崇阳县| 息烽县| 达拉特旗| 北川| 车险| 广河县| 九龙县| 长葛市| 井陉县| 清远市| 资阳市| 桓台县| 鹤岗市| 乌拉特中旗| 古交市| 康保县| 平谷区| 靖州| 广饶县| 莱芜市| 左云县| 上栗县| 澜沧| 寻乌县| 江华| 嵊泗县| 通海县| 长海县| 玉屏| 天全县| 扎赉特旗| 景宁| 明溪县| 太原市| 淳安县| 慈利县| 玉溪市| 凌海市| 昆明市| 许昌县|