<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/tips/12751

            0x00 簡介


            之前看了seay寫的PHP代碼審計的書,全部瀏覽了一遍,作為一個代碼審計小白,希望向一些和我一樣的小白的人提供一下我的收獲,以及一個整體的框架和常見漏洞函數。這也算是這本書的一個學習筆記吧,可以結合我捋順的思路來看這本書。: )

            0x01 整體


            學習代碼審計的目標是能夠獨立完成對一個CMS的代碼安全監測。其通用的思路有:

            0x02 各種洞洞


            a.文件操作漏洞

            1.文件包含漏洞:

            (1) 本地文件包含:

            p1

            p2

            (2) 遠程文件包含:

            (3) 文件包含截斷:

            2.文件讀取(下載)漏洞:

            搜索關鍵函數:

            file_get_contents(),highlight_file(),fopen(),read file(),fread(),fgetss(), fgets(),parse_ini_file(),show_source(),file()

            3.文件上傳漏洞:

            搜索關鍵函數:

            move_uploaded_file() 接著看調用這個函數的代碼是否存在為限制上傳格式或者可以繞過。

            (1) 未過濾或本地過濾:服務器端未過濾,直接上傳PHP格式的文件即可利用。

            (2) 黑名單擴展名過濾:

            p3

            不被允許的文件格式.php,但是我們可以上傳文件名為1.php(注意后面有一個空格)

            (3) 文件頭 content-type驗證繞過:

            (4) 防范:

            4.文件刪除漏洞:

            搜索關鍵函數:

            Metinfo的任意文件刪除漏洞:

            p4

            $action = delete即可刪除.sql的文件,如果文件不是sql直接刪除提交的文件名

            target.com/recovery.php?&action=delete&filename=../../index.php

            b.代碼執行漏洞

            1.代碼執行函數:

            搜索關鍵函數:eval(), assert(), preg_replace(), call_user_func(), call_user_func_array(), array_map()

            (1) preg_replace()函數:

            mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

            當$pattern處存在e修飾符時,$replacement 會被當做php代碼執行。

            (2)mixed call_user_func( callable $callbank [ , mixed $parameter [ , mixed $…)

            第一個參數為回調函數,第二個參數是回調函數的參數

            p5

            p6

            (3)eval()assert()

            當assert()的參數為字符串時 可執行PHP代碼

            【區分】:

            eval(" phpinfo(); ");【√】 eval(" phpinfo() ");【X】
            assert(" phpinfo(); ");【√】 assert(" phpinfo() ");【√】
            

            2.動態函數執行:

            動態函數后門:

            #!php
            <?php
            $_GET['a']($_GET['b']);
            ?>
            

            p7

            3.命令執行函數:

            搜索關鍵函數:system(), exec(), shell_exec(), passthru() ,pcntl_exec(), popen(),proc_open()

            (1) popenproc_open()

            #!php
            <?php 
            popen( 'whoami >> /Users/bingdaojueai/Desktop/1.txt', 'r' ); 
            ?>
            

            所在路徑就會出現一個1.txt 里面的內容為命令執行后的結果

            (2) 反引號命令執行:

            雙引號時,可以直接解析變量,造成代碼執行漏洞,過狗繞過。

            c.變量覆蓋漏洞

            1.函數使用不當:

            2.$$變量覆蓋:

            p8

            p9

            d.邏輯漏洞

            需要思考的問題:

            1.等于與存在判斷繞過:

            (1) in_array(): 比較之前會自動轉換類型

            p10

            p11

            (2)is_numeric():當傳入參數為hex時 直接通過并返回true 并且MYSQL可以直接使用hex編碼代替字符串明文 可以二次注入 并且可能造成XSS漏洞

            (3)雙等于==和三等于===

            2.賬戶體系中的越權問題:

            (1) 未exit/return/die

            #!php
            <?php
            if(file_exists('install.lock)){
                header("Location:xxx.com");
                //exit();
            }
            echo "test";
            ?>
            

            test 依舊會被輸出,替換成安裝流程,PHP依舊會進行。

            (2) 支付漏洞:

            可能導致漏洞函數: str_replace()

            p12

            #!php
            <?php
            $a = addslashes($_GET['a']);
            $b = addslashes($_GET['b']);
            echo "$a<br>$b<br>";
            $c = str_replace($a,'',$b);
            echo trim($c);
            ?>
            

            p13

            e.會話認證漏洞

            f.二次漏洞

            1.類型:

            p14

            p15

            2.技巧:

            (1) 鉆GPC等轉義的空子:

            (2)字符串問題:

            0x03 End


            自己走上安全這條路既是興趣也是偶然,選擇白盒完全是因為喜歡php,畢竟是初識代碼審計,seay的書確實幫了我不少,抱作者大腿(我是萌妹紙),希望這篇文章能夠幫助像我一樣小白的人,花了兩天總結的,如果有什么缺陷也等著大家指出。

            不會開發的談審計都是耍流氓!:)

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线