🎯
PHP代码审计入门指南
  • PHP代码审计入门指南
  • 序言
  • PHP审计基础
    • ⚒️工具准备
    • VS CODE 常用快捷键
    • PHP代码审计思路
    • 💉PHP用户可控输入速查表
    • 🧬PHP敏感函数速查表
    • 🩹PHP原生过滤方法
    • PHP动态调试-Xdebug安装配置
  • PHP常见漏洞
    • 命令注入
    • 代码注入
    • 文件包含
    • SQL注入
    • 文件操作
    • XSS
    • SSRF
    • CSRF
    • XXE
    • 反序列化
    • LDAP注入
    • 其他漏洞
  • PHP常见框架
    • Thinkphp
    • Laravel
    • Codeigniter
    • Yii
    • Cakephp
  • PHP审计实例
    • -
  • 附录
    • PHP弱类型
  • 🎉总结
  • 🔗参考
由 GitBook 提供支持
在本页
  1. PHP常见漏洞

代码注入

将用户输入拼接到PHP代码中执行 导致的任意代码执行问题

例子

有些特殊业务使用了eval等代码执行函数

<?php eval( 'echo ('.$_GET['a'].');'); //计算器?>

正常输入: ?a=9*9

服务器执行 echo (9*9);

输出:81

攻击者输入?a=system('whoami')

服务器执行echo (system('whoami'));

成功调用system函数执行命令

实际业务中要尽量避免使用eval这种动态执行代码方法 必要使用时做好过滤

函数/语法结构
描述
例子

eval

将传入的参数内容作为PHP代码执行 eval 不是函数 是一种语法结构 不能当做函数动态调用

eval('phpinfo();');

assert

将传入的参数内容作为PHP代码执行 版本在PHP7以下是函数 PHP7及以上为语法结构

assert('phpinfo();');

preg_replace

当preg_replace使用/e修饰符且原字符串可控时时 有可能执行php代码

echo preg_replace("/e","{${PHPINFO()}}","123");

call_user_func

把第一个参数作为回调函数调用 需要两个参数都完全可控才可利用 只能传入一个参数调用

call_user_func('assert', 'phpinfo();');

call_user_func_array

同call_user_func 可传入一个数组带入多个参数调用函数

call_user_func_array ('file_put_contents', ['1.txt','6666']);

create_function

根据传递的参数创建匿名函数,并为其返回唯一名称 利用需要第二个参数可控 且创建的函数被执行

$f = create_function('','system($_GET[123]);'); $f();

上一页命令注入下一页文件包含

最后更新于3年前