<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    原文地址: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的書確實幫了我不少,抱作者大腿(我是萌妹紙),希望這篇文章能夠幫助像我一樣小白的人,花了兩天總結的,如果有什么缺陷也等著大家指出。

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

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频