本文记录 PHP 代码审计的学习过程,教程为暗月 2015 版的 PHP 代码审计课程
1. 环境准备
动态函数执行
函数与函数之间的调用,可能会造成的漏洞
匿名函数执行
匿名函数(Anonymous functions),也叫闭包函数(closures),允许临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。
create_function 创建匿名函数
2. 测试
动态函数执行:
代码 test.php
<?php function a(){ echo "a"; } function b(){ echo "b"; } function c($arg){ echo"x"; $arg(); } $action=$_GET['c']; c($action); //浏览器获取到的值 b ,现在作为 c() 函数的参数插入到了函数中,并且在函数中作为函数名调用了另外一个函数 ?>
结果
匿名函数执行
代码
<?php $a=$_GET['c']; $lamda=creat_function('$a,$b','return (strlen($a)-strlen($b)+'."strlen($c));"); //var_dump($lamda); $array=array('reall long string here, boy','this','midding lenth','larget'); usort($array,$lamda); print_r($array); ?>
结果
浏览器执行 http://127.0.0.1/test.php?c=1));)phpinfo();//
原理是使用 URL 后面的闭合括号使代码中断
结果显示 phpinfo() 页面