【代码审计】PHP代码审计---基础记录
PHP偽協(xié)議
PHP偽協(xié)議事實(shí)上是其支持的協(xié)議與封裝協(xié)議,支持的種類有以下12種。
* file:// — 訪問(wèn)本地文件系統(tǒng) * http:// — 訪問(wèn) HTTP(s) 網(wǎng)址 * ftp:// — 訪問(wèn) FTP(s) URLs * php:// — 訪問(wèn)各個(gè)輸入/輸出流(I/O streams) * zlib:// — 壓縮流 * data:// — 數(shù)據(jù)(RFC 2397) * glob:// — 查找匹配的文件路徑模式 * phar:// — PHP 歸檔 * ssh2:// — Secure Shell 2 * rar:// — RAR * ogg:// — 音頻流 * expect:// — 處理交互式的流?
把握大局
件可以知道程序的架構(gòu),運(yùn)行流程、包含的哪些配置文件,包含了哪些過(guò)濾文件以及包含哪些安全過(guò)濾文件,了解程序的業(yè)務(wù)邏輯。
?
審計(jì)方法
大多數(shù)漏洞的產(chǎn)生是因?yàn)楹瘮?shù)的使用不當(dāng)導(dǎo)致的。使用軟件查找匹配一些高危漏洞、關(guān)鍵函數(shù)及敏感關(guān)鍵字,如——Seay源代碼審計(jì)系統(tǒng)。不推薦使用,誤報(bào)率太高,但是可以練習(xí)一下,熟悉危險(xiǎn)函數(shù)、關(guān)鍵函數(shù)。
使用瀏覽器逐個(gè)訪問(wèn)瀏覽,看看這套程序有哪些功能。根據(jù)相關(guān)功能,大概推測(cè)可能存在哪些漏洞。
把握大局——定向功能——敏感函數(shù)參數(shù)回溯
常見(jiàn)功能漏洞:
程序初始安裝 l? 站點(diǎn)信息泄露(日志、備份文件) l? 文件上傳 l? 模板、文件編輯 l? 模板更改(zip)l? 數(shù)據(jù)庫(kù)備份 l? 找回密碼 l? 修改配置信息
?
常見(jiàn)的INI配置
配置文件
???????? php.ini全局配置文件、.user.ini用戶配置文件,與Apache的.htaccess類似。http.conf會(huì)覆蓋php.ini的值。
變量相關(guān)
???????? 全局變量:register_globals,會(huì)造成變量之間的覆蓋,例如傳遞一個(gè)一樣的參數(shù),post會(huì)覆蓋掉get的值。
???????? 短標(biāo)簽:short_open_tag? <? ?>等價(jià)于<?php ?>、<?=等價(jià)于<? echo。從PHP 5.4.0起。
安全模式
???????? //安全模式:safe_mode,開(kāi)啟system()無(wú)法執(zhí)行,關(guān)閉可以。從5.3.0廢棄,5.4.0移除。
???????? 安全模式下執(zhí)行程序主目錄:safe_mode_exec_dir = /var/www/html
如果PHP使用了該安全模式,system()和其他程序執(zhí)行函數(shù)將拒絕啟動(dòng)不在此目錄中的程序。必須使用/作為目錄分隔符,包括Windows中。簡(jiǎn)單來(lái)說(shuō),就是這個(gè)目錄下可以執(zhí)行。
???????? 禁用類/函數(shù):disable_classes= ,disable_functions= ,如disabe_function=opendir,readdir,
scandir,fopen,unlink。接受逗號(hào)分隔的函數(shù)名列表作為參數(shù)。只能設(shè)置在php.ini中。
上傳文件及目錄權(quán)限
設(shè)置上傳及最大上傳文件大小:file_uploads=on,upload_max_filesize=8M
文件上傳臨時(shí)目錄:upload_tmp_dir=
上傳臨時(shí)文件保存的目錄,需要可寫(xiě),如果不設(shè)置,則采用系統(tǒng)臨時(shí)目錄。(/tmp、C:\window\Temp)
用戶訪問(wèn)目錄限制:open_basedir=.:/tmp/,open_basedir=.;c:\windows\temp
使用open_basedir選項(xiàng)能夠控制PHP腳本只能訪問(wèn)指定的目錄,這樣能夠避免PHP腳本訪問(wèn)不應(yīng)該訪問(wèn)的文件,一定程度上限制了phpshell的危害,我們一般可以設(shè)置只能訪問(wèn)網(wǎng)站目錄,表示允許訪問(wèn)當(dāng)前目錄(既PHP腳本文件所在之目錄)和/tmp/目錄,有效防止PHP木馬跨站運(yùn)行。
錯(cuò)誤信息
???????? 錯(cuò)誤信息控制:display_error
是否將錯(cuò)誤信息作為輸出的一部分,站點(diǎn)發(fā)布后應(yīng)該關(guān)閉這項(xiàng)功能,以免暴露信息,調(diào)試的時(shí)候可以開(kāi)啟。
???????? 設(shè)置錯(cuò)誤報(bào)告級(jí)別:error_reporting = E_all? 生產(chǎn)環(huán)境既發(fā)布環(huán)境應(yīng)設(shè)置為0
<?php
error_reporting(E_ALL);
……
?>
將錯(cuò)誤級(jí)別設(shè)置為最高,可以顯示所有的問(wèn)題,方便查錯(cuò)。在php.ini中設(shè)置。推薦使用E_ALL|E_STRICT ,即所有級(jí)別。
???????? 錯(cuò)誤日志:
error_log = 錯(cuò)誤日志的位置,必須對(duì)web用戶可寫(xiě)入,如果不定義則默認(rèn)寫(xiě)入到web服務(wù)器的錯(cuò)誤日志中去。
log_error = on 將錯(cuò)誤日志輸出到文件,而不是直接輸出到前端。
log_errors_max_length = 1024 錯(cuò)誤日志關(guān)聯(lián)信息的最大長(zhǎng)度,設(shè)置為0表示無(wú)線長(zhǎng)度。
?
魔術(shù)引號(hào)及遠(yuǎn)程文件
魔術(shù)引號(hào):magic_quotes_gpc = on、magic_quotes_runtime = off
???????? 為GPC(GET/POST/COOKIE)操作設(shè)置magic_quotes狀態(tài)。當(dāng)magic_quotes為on,所有的單引號(hào)、雙引號(hào)、反斜杠、NULL被一個(gè)反斜杠自動(dòng)轉(zhuǎn)義
???????? 本特性已自PHP 5.3.0起廢棄并將自5.4.0移除。
是否允許打開(kāi)遠(yuǎn)程文件:allow_url_fopen = on(默認(rèn))
???????? 本選項(xiàng)激活了URL形式的fopen封裝協(xié)議使得可以訪問(wèn)URL對(duì)象例如文件。默認(rèn)地封裝協(xié)議提供ftp和http協(xié)議來(lái)訪問(wèn)遠(yuǎn)程文件。
是否允許包含遠(yuǎn)程文件:allow_url_include =off(默認(rèn))
???????? 本選項(xiàng)激活允許include、inclu_once、require、require_once等函數(shù)使用URL形式的fopen封裝協(xié)議。簡(jiǎn)單來(lái)說(shuō)就是可以包含遠(yuǎn)程文件。
隨記
erroe_reporting(0);???????? //關(guān)閉網(wǎng)站錯(cuò)誤信息(不報(bào)錯(cuò))
Print、echo、print_r()(顯示數(shù)組內(nèi)容)、var_dump()(比print_r多顯示了參數(shù)類型)、exit();
???????? 雙引號(hào)解析變量、單引號(hào)不解析變量;
???????? 超級(jí)全局變量:
$GLOBALS ????? 引用全局作用域中可用的全部變量,但該變量必須是全局作用域。
$_SERVER??????? 服務(wù)器和執(zhí)行腳本環(huán)境信息
$_REQUEST???? 可以引用$_GET、$_POST、$COOKIE變量
$_ENV????????????? 環(huán)境變量
$_FILES??????????? 文件上傳變量,注意要有S
?
笨鳥(niǎo)先飛早入林,笨人勤學(xué)早成材。轉(zhuǎn)載請(qǐng)注明出處: 撰寫(xiě)人:fox-yu http://www.cnblogs.com/fox-yu/轉(zhuǎn)載于:https://www.cnblogs.com/fox-yu/p/7746394.html
總結(jié)
以上是生活随笔為你收集整理的【代码审计】PHP代码审计---基础记录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 黑苹果升级驱动后WIFI不能启动的解决
- 下一篇: linux 与mac使用类似telnet