【代碼審計】PHP代碼審計---基礎記錄

PHP偽協議

  PHP偽協議事實上是其支持的協議與封裝協議,支持的種類有以下12種。

* file:// — 訪問本地文件系統
* http:// — 訪問 HTTP(s) 網址
* ftp:// — 訪問 FTP(s) URLs
* php:// — 訪問各個輸入/輸出流(I/O streams)
* zlib:// — 壓縮流
* data:// — 數據(RFC 2397)
* glob:// — 查找匹配的文件路徑模式
* phar:// — PHP 歸檔
* ssh2:// — Secure Shell 2
* rar:// — RAR
* ogg:// — 音頻流
* expect:// — 處理交互式的流

?

把握大局

  1. 網站結構:瀏覽源碼文件夾,了解程序大致目錄。
  2. 入口文件:index.php、admin.php文件一般是整個程序的入口,詳細讀一下index文

件可以知道程序的架構,運行流程、包含的哪些配置文件,包含了哪些過濾文件以及包含哪些安全過濾文件,了解程序的業務邏輯。

  1. 配置文件:類似config.php文件,包含了數據庫的配置信息,程序的一些信息。先看看數據庫編碼,如果是gbk則可能存在寬字節注入。如果變量的值用雙引號、則可能存在雙引號解析代碼執行的問題。
  2. 過濾功能:通過祥讀公共函數文件(lib.php)和安全過濾文件等文件,清晰掌握用戶輸入的數據,哪些被過濾,哪些沒被過濾,在哪里被過濾,如何過濾的,能否繞過過濾的數據。過濾方式是替換還是正則?有沒有GPC?有沒有使用addslashes()處理。

?

審計方法

  1. 通讀全文法:把握大局→根據入口文件進入各個功能進行審計。
  2. 敏感函數參數回溯法:最高效、最常用的方法。

大多數漏洞的產生是因為函數的使用不當導致的。使用軟件查找匹配一些高危漏洞、關鍵函數及敏感關鍵字,如——Seay源代碼審計系統。不推薦使用,誤報率太高,但是可以練習一下,熟悉危險函數、關鍵函數。

  1. 定向功能分析法:最主要的方法

使用瀏覽器逐個訪問瀏覽,看看這套程序有哪些功能。根據相關功能,大概推測可能存在哪些漏洞。

把握大局——定向功能——敏感函數參數回溯

常見功能漏洞:

程序初始安裝 l? 站點信息泄露(日志、備份文件) l? 文件上傳 l? 模板、文件編輯 l? 模板更改(zip)l? 數據庫備份 l? 找回密碼 l? 修改配置信息 

?

常見的INI配置

配置文件

???????? php.ini全局配置文件、.user.ini用戶配置文件,與Apache的.htaccess類似。http.conf會覆蓋php.ini的值。

變量相關

???????? 全局變量:register_globals,會造成變量之間的覆蓋,例如傳遞一個一樣的參數,post會覆蓋掉get的值。

???????? 短標簽:short_open_tag? <? ?>等價于<?php ?>、<?=等價于<? echo。從PHP 5.4.0起。

安全模式

???????? //安全模式:safe_mode,開啟system()無法執行,關閉可以。從5.3.0廢棄,5.4.0移除。

???????? 安全模式下執行程序主目錄:safe_mode_exec_dir = /var/www/html

如果PHP使用了該安全模式,system()和其他程序執行函數將拒絕啟動不在此目錄中的程序。必須使用/作為目錄分隔符,包括Windows中。簡單來說,就是這個目錄下可以執行。

???????? 禁用類/函數:disable_classes= ,disable_functions= ,如disabe_function=opendir,readdir,

scandir,fopen,unlink。接受逗號分隔的函數名列表作為參數。只能設置在php.ini中。

上傳文件及目錄權限

設置上傳及最大上傳文件大小:file_uploads=on,upload_max_filesize=8M

文件上傳臨時目錄:upload_tmp_dir=

上傳臨時文件保存的目錄,需要可寫,如果不設置,則采用系統臨時目錄。(/tmp、C:\window\Temp)

用戶訪問目錄限制:open_basedir=.:/tmp/,open_basedir=.;c:\windows\temp

使用open_basedir選項能夠控制PHP腳本只能訪問指定的目錄,這樣能夠避免PHP腳本訪問不應該訪問的文件,一定程度上限制了phpshell的危害,我們一般可以設置只能訪問網站目錄,表示允許訪問當前目錄(既PHP腳本文件所在之目錄)和/tmp/目錄,有效防止PHP木馬跨站運行。

錯誤信息

???????? 錯誤信息控制:display_error

是否將錯誤信息作為輸出的一部分,站點發布后應該關閉這項功能,以免暴露信息,調試的時候可以開啟。

???????? 設置錯誤報告級別:error_reporting = E_all? 生產環境既發布環境應設置為0

<?php

error_reporting(E_ALL);

……

?>

將錯誤級別設置為最高,可以顯示所有的問題,方便查錯。在php.ini中設置。推薦使用E_ALL|E_STRICT ,即所有級別。

???????? 錯誤日志:

error_log = 錯誤日志的位置,必須對web用戶可寫入,如果不定義則默認寫入到web服務器的錯誤日志中去。

log_error = on 將錯誤日志輸出到文件,而不是直接輸出到前端。

log_errors_max_length = 1024 錯誤日志關聯信息的最大長度,設置為0表示無線長度。

?

魔術引號及遠程文件

魔術引號:magic_quotes_gpc = on、magic_quotes_runtime = off

???????? 為GPC(GET/POST/COOKIE)操作設置magic_quotes狀態。當magic_quotes為on,所有的單引號、雙引號、反斜杠、NULL被一個反斜杠自動轉義

???????? 本特性已自PHP 5.3.0起廢棄并將自5.4.0移除。

是否允許打開遠程文件:allow_url_fopen = on(默認)

???????? 本選項激活了URL形式的fopen封裝協議使得可以訪問URL對象例如文件。默認地封裝協議提供ftp和http協議來訪問遠程文件。

是否允許包含遠程文件:allow_url_include =off(默認)

???????? 本選項激活允許include、inclu_once、require、require_once等函數使用URL形式的fopen封裝協議。簡單來說就是可以包含遠程文件。

隨記

erroe_reporting(0);???????? //關閉網站錯誤信息(不報錯)

Print、echo、print_r()(顯示數組內容)、var_dump()(比print_r多顯示了參數類型)、exit();

???????? 雙引號解析變量、單引號不解析變量;

???????? 超級全局變量:

$GLOBALS ????? 引用全局作用域中可用的全部變量,但該變量必須是全局作用域。

$_SERVER??????? 服務器和執行腳本環境信息

$_REQUEST???? 可以引用$_GET、$_POST、$COOKIE變量

$_ENV????????????? 環境變量

$_FILES??????????? 文件上傳變量,注意要有S

?

笨鳥先飛早入林,笨人勤學早成材。轉載請注明出處:
撰寫人:fox-yu  http://www.cnblogs.com/fox-yu/

轉載于:https://www.cnblogs.com/fox-yu/p/7746394.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281977.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281977.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281977.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

全新升級的AOP框架Dora.Interception[4]: 基于表達式的攔截器注冊

基于特性標注的攔截器注冊方式僅限于將攔截器應用到自己定義的類型上&#xff0c;對于第三方提供的類型就無能為力了。對于Dora.Interception來說&#xff0c;攔截器注冊本質上建立攔截器與一個或者多個目標方法之間的映射&#xff0c;所以最笨的方式就是利用反射的方式得到表示…

mysql8.0.12插件_MySQL8.0.12 安裝及配置

MySQL8.0.12 安裝及配置發布時間&#xff1a;2018-08-07 10:39,瀏覽次數&#xff1a;274, 標簽&#xff1a;MySQL一.安裝1.從網上下載MySQL8.0.12版本&#xff0c;下載地址&#xff1a;https://dev.mysql.com/downloads/mysql/2. 下載完成后解壓我解壓的路徑是&#xff1a;D:\J…

python模塊之hashlib

hashlib模塊實現了多種安全哈希和信息摘要算法的通用接口&#xff0c;包括FIPS中定義的SHA1, SHA224, SHA256, SHA384, SHA512以及RFC 1321中定義的MD5 注意點&#xff1a;1. adler32及crc32哈希由zlib模塊提供2. 某些算法已知存在哈希碰撞弱點 哈希算法 每個hash算法都有一個同…

記一次阿里電面經歷

昨天下午&#xff08;3/19&#xff09;三點多鐘&#xff0c;接到了一個杭州的電話&#xff0c;是阿里的。問我是否方便聊聊。我說我在上課&#xff0c;四點下課。然后他就四點多鐘的時候又打了一次過來。項目經歷上來就問我有無大型項目的經歷。不好意思&#xff0c;我說無。。…

C語言程序設計第三次作業

&#xff08;一&#xff09;改錯題 計算f(x)的值&#xff1a;輸入實數x&#xff0c;計算并輸出下列分段函數f(x)的值&#xff0c;輸出時保留1位小數。 輸入輸出樣例1&#xff1a;   Enterr x: 10.0   f(10.0) 0.1 輸入輸出樣例2&#xff1a;   Enter x: 234   f(234.0…

mysql數據庫項目化教程鄭小蓉_MySQL數據庫項目化教程(高等職業教育“十三五”規劃教材(軟件技術專業))...

《MySQL數據庫項目化教程/高等職業教育十三五規劃教材(軟件技術專業)》是一本介紹MySQL數據庫基礎知識的入門教材&#xff0c;采用項目驅動方式循序漸進地介紹MySQL各個模塊的知識。主要內容包括&#xff1a;Windows下MySQL的安裝&#xff0c;MySQL服務的啟動與停止&#xff0c…

WPF-09 ManualResetEventSlim信號量

業務場景如下&#xff1a;WPF應用程序后臺有個定時任務在接收PLC硬件數據(該線程接收完數據之后, 會重新啟動一個新線程繼續接收.....)&#xff0c;當應用程序關閉時, 我們得確保接收PLC硬件數據的線程完成之后,再關閉應用程序&#xff0c;否則會造成數據丟失。上面的業務場景是…

【bzoj3033】太鼓達人 DFS歐拉圖

題目描述 給出一個整數K&#xff0c;求一個最大的M&#xff0c;使得存在一個每個位置都是0或1的圈&#xff0c;圈上所有連續K位構成的二進制數兩兩不同。輸出最大的M以及這種情況下字典序最小的方案。 輸入 一個整數K。 輸出 一個整數M和一個二進制串&#xff0c;由一個空格分隔…

Redis 集合處理

學習了列表之后&#xff0c;發現了Redis處理字符串的功能強大。 為了適應不同場景的需求&#xff0c;還有一個用的很多的就是集合。 Redis提供的集合支持的類型是字符串。并且集合中的元素值是唯一的&#xff0c;也就是說不能出現重復數據。 而且&#xff0c;集合的實現是通過哈…

fpga mysql_FPGA的一些瑣碎知識整理

1.生產FPGA的廠家有&#xff1a;ALTERAXILINXATCELLatticeps:Altera和Xilinx主要生產一般用途FPGA&#xff0c;其主要產品采用SRAM工藝Actel主要提供非易失性FPGA&#xff0c;產品主要基于反熔絲工藝和FLASH工藝ps: 熔絲&#xff0c;顧名思義&#xff1a;把絲熔掉&#xff0c;反…

使用增量備份修復DG中的GAP

問題描述 oracle中DG出現主備不同步現象&#xff0c;alert日志報警有gap信息&#xff0c;但是v$archive_gap視圖查不到任何信息。同時主庫上的對應歸檔已經刪除且沒有備份 解決方案 1.查詢備庫的scn SQL> select current_scn from v$database; 這時有可能出來的scn是以科學計…

C# 反射類Assembly用法舉例

概述程序運行時&#xff0c;通過反射可以得到其它程序集或者自己程序集代碼的各種信息&#xff0c;包括類、函數、變量等來實例化它們&#xff0c;執行它們&#xff0c;操作它們&#xff0c;實際上就是獲取程序在內存中的映像&#xff0c;然后基于這個映像進行各種操作。Assemb…

團隊作業

團隊&組員&#xff1a; 沒有組名&#xff0c;大概是因為我們組雖然有10個人&#xff0c;但是好像只起到人多的地方就容易開車搞笑&#xff0c;沒有內涵&#xff0c;取出來的都是秋名山吳彥組這樣的開車組名&#xff0c;在大家的的強烈建議和玩笑中&#xff0c;決定了沒有組…

算法系列【希爾排序】篇

常見的內部排序算法有&#xff1a;插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數排序等。用一張圖概括&#xff1a;關于時間復雜度&#xff1a;1. 平方階 (O(n2)) 排序各類簡單排序&#xff1a;直接插入、直接選擇和冒泡排序。2. 線性對數…

sql查詢索引語句_sql優化總結--基于sql語句優化和索引優化

概述最近做查詢&#xff0c;統計和匯總。由于數據量比較龐大&#xff0c;大部分表數據上百萬&#xff0c;甚至有的表數據上千萬。所以在系統中做sql優化比較多&#xff0c;特此寫一篇文章總結一下關于sql優化方面的經驗。導致查詢緩慢的原因1、數據量過大2、表設計不合理3、sql…

電商行業運維實踐

電商行業運維實踐&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;…

數據結構小總結(成都磨子橋技工學校數據結構前12題)

[pixiv] https://www.pixiv.net/member_illust.php?modemedium&illust_id34352147 暑假的作業&#xff0c;頹頹的我總算是寫完了 線段樹 線段樹是一個高級玩意&#xff0c;不僅可以求區間和&#xff0c;區間最大等等的簡單問題&#xff0c;靈活運用還有好多變種。自從學…

【九章算法免費講座第一期】轉專業找CS工作的“打狗棒法”

講座時間&#xff1a; 美西時間6月5日18&#xff1a;30-20&#xff1a;00&#xff08;周五&#xff09; 北京時間6月6日09&#xff1a;30-11&#xff1a;00&#xff08;周六a.m&#xff09; 講座安排&#xff1a; 免費在線直播講座 報名網址&#xff1a; http://t.cn/R2XgMSH&a…

golang mysql 防注入_Go,Gorm 和 Mysql 是如何防止 SQL 注入的

Go&#xff0c;Gorm 和 Mysql 是如何防止 SQL 注入的SQL 注入和 SQL 預編譯技術什么是 SQL 注入所謂SQL注入(sql inject)&#xff0c;就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串&#xff0c;最終達到欺騙服務器執行惡意的SQL命令。具體來說&#xff…

wav2midi 音樂旋律提取算法 附可執行demo

前面提及過&#xff0c;音頻指紋算法的思路。 也梳理開源了兩個比較經典的算法。 https://github.com/cpuimage/shazam https://github.com/cpuimage/AudioFingerprinter 后來一段時間&#xff0c;稍微看了下這兩個算法&#xff0c;還有不少可以精簡優化的空間。 例如抗噪&…