PHP 代碼審計基礎

attachments-2020-03-sVjYgSsz5e7aba2fe0a37.jpg

第一部分 審計流程

  1. 1.用戶請求的處理流程

獲取請求php

全局過濾sql

模塊文件數據庫

C函數內容安全

M函數內容服務器

V顯示框架

 

  1. 2.通讀原文

函數集文件函數

配置文件網站

安全過濾文件url

Index文件spa

  • 3.網站目錄結構

主目錄

模塊目錄

插件目錄

上傳目錄

模塊目錄

數據目錄

配置目錄

配置文件

公共函數文件

安全過濾文件

數據庫結構

入口文件

 

  1. 4.敏感關鍵字回溯參數
    1. 優勢
  • 高效的挖掘漏洞
  • 判斷敏感觸發點的位置以及上下文,追溯參數源頭

缺點:

  • 覆蓋不到邏輯漏洞的挖掘
  • 不能瞭解程序的基本框架

功能點定向審計

    1. 程序安裝
    2. 文件上傳
    3. 文件管理
    4. 登陸驗證
    5. 備份恢復
    6. 找回密碼
  1. 例子

Dami cms

帳戶功能

    1. 登陸
    2. 會員資料
    3. 找回密碼
    4. 註冊
    5. 修改密碼
    6. 個人投稿
    7. 個人訂單

第二部分 PHP核心配置

    • 1.大小寫敏感
      • directive = value(指令=值)
      • foo = bar ≠ FOO = bar
    • 2.運算符
      • | 、&、~、!
    • 空值的表達方式
      • foo = ;
      • foo = none;
      • foo = 「none」;
    • 3.安全模式
      • safe_mode=off (PHP 5.4移除 )限制文檔存取、環境變量的讀取以及空值外部程序的運行
      • 限制環節變量的讀取
        • safe_mode_allowed_env_vas = string
        • 指定PGP程序能夠改變的環境變量的前綴,當值爲空的時候,能夠改變任何的環境變量
      • 外部程序執行目錄
        • safe_mode_exec_dir = 「」
    • 禁用危險函數
      • disable_functions
    • com 組件
      • com.allow_dcom=false
      • PHP設置在安全模式下(safe_mode),容許攻擊者使用com()函數穿件系統組件來執行任意命令
      • 使用com函數須要在php.ini中配置extension=php_com_dotnet.dll,若是PHP VERSION<5.4.5,則不須要
    • 全局變量註冊開關
      • register_globals = off
      • php.ini的register_globals選項的默認值設爲off,在4.2版本以前是默認開啓的,當register_globals爲on時,程序接受來自服務器的環境變量,包括表單提取的變量
      • register_globals = Off,服務器獲取數據時候採用**$_GET['name']** 來獲取數據
      • register_globals = On ,服務器採用POST或者GET來提交變量,都會使用全局變量來接受取值
    • 魔術引號自動過濾
      • magic_quotes_gpc=On PHP4.5移除
      • magic_quotes_gpc=Off 在php.ini中默認關閉,會對sql語句中的單引號、雙引號、反斜槓和空字符加上反斜槓轉義,它會影響HTTP請求的數據(GET POST Cookies),同時能夠在php代碼中使用addslashes來轉義,經過stripslashes來刪除轉義
    • 遠程文件
      • 是否容許包含遠程文件
        • allow_url_include = off
          • 設置爲On的狀況下,能夠直接包含遠程文件,若包含的變量爲可控的狀況下,能夠直接控制變量來執行PHP代碼

是否容許打開遠程文件

        • allow_url_open = on
          • 容許本地PHP文件經過URL重寫的方式來打開和關閉權限,默認的封裝協議提供ftp和http協議訪問文件
    • 目錄權限
      • HTTP頭部版本信息
        • expose_php = off
        • 防止了經過http頭部泄露的php版本信息
      • 文件上傳臨時目錄
        • upload_tmp_dir=
        • 上傳文件臨時保存目錄,若是不設置,採用系統的臨時目錄
      • 用戶能夠訪問目錄
        • open_basedir = E:\Local Test\WWW
        • 可以控制PHP腳本只能訪問指定的目錄。
    • 錯誤信息
      • 內部錯誤選項
        • display_errors = on
        • 代表顯示php腳本的內部錯誤,錯誤回顯
      • 錯誤報告級別
        • error_reporting = E_ALL & ~E_NOTICE
        • 將錯誤級別調到最高,顯示全部的問題,方便排錯

第三部分 代碼調試及Xdebug的配置使用

  • echo
    • 最簡單的輸出數據調試方法,通常用來輸出變量值或者不肯定執行到哪一個分支
  • print_r var_dump debug_zval_dump
    • 這個主要輸出變量的數據值,可是debug_zval_dump輸出結果會有refcount,記錄一個變量被引用的次數
  • debug_print_backtrace
    • 能夠查看輸出的調用棧的信息
  • exit()
    • 中止程序,沒法執行後面代碼

 

attachments-2020-03-ydebVzcc5e7ab8c3221ad.jpg

相關文章
相關標籤/搜索