一、代码执行概述
代码执行定义:
------ 应用程序在调用一些能够将字符串转换为代码的函数(如PHP中的eval)时,没有考虑用户是否控制这个字符串,将造成代码执行漏洞。远程代码执行实际上就是调用服务器网站代码进行执行。
------ 代码执行漏洞是指应用程序本身过滤不严,用户可以通过请求将代码注入到应用中执行。
二、代码执行相关函数
- PHP:eval、assert
- Javascript:eval
- Vbscript: Execute、Eval
- Python:exec
- Java:Java中没有类似php中eval 函数这种直接可以将字符串转化为代码执行的函数,但是有反射机制,并且有各种基于反射机制的表达式引擎,如:OGNL、SpEL、MVEL等,这些都能造成代码执行漏洞。
1、eval
将字符串当做函数进行执行,需要传入一个完整的语句,必须以分号 ; 结尾,最常用的函数:
<?php eval('echo "hello";'); ?>
2、assert
判断是否为字符串,是则当成代码执行。
在php7.0.29之后的版本不支持动态调用
低版本
<?php assert($_POST['a']); ?>
7.0.29之后
<?php
$a = 'assert';
$a(phpinfo());
?>
3、${ }执行代码
中间的php代码将会被解析。
${phpinfo()};
三、命令执行和代码执行的区别
-
涉及到的函数不同
-
执行的方式不同
命令执行: 一般指操作系统命令
远程
代码执行: 一般指的是脚本代码