代码执行定义
代码执行-相关函数
代码执行的防御
命令执行和代码执行的区别
代码执行定义:Remote Code Execution
应用程序在调用一些能够将字符串转换为代码的函数(如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']);
?>
代码执行方式
${}执行代码(中间的php代码将会被解析)
${phpinfo()};
eval(将字符串当做函数进行执行(需要传入一个完整的语句))
eval('echo "hello";');
assert(判断是否为字符串,是则当成代码执行)
<?php assert($_POST['a']);?>(低版本 <php7)
代码执行的防御
1.代码执行的防御分为三个方面 参数 , 函数 和 权限
2.禁用或减少使用执行代码的函数
3.对于必须使用eval的地方,一定严格处理用户数据
4.使用addslashes()函数将参数转译,或使用黑白名单校验
5.限制Web用户的权限
6.升级插件、框架新版本
命令执行和代码执行的区别
1、涉及到的函数不同
2、执行的方式不同
命令执行: 一般指操作系统命令
远程代码执行: 一般指的是脚本代码