low
利用:
;ls ../../

源码分析:
<?php
if( isset( $_POST[ 'submit' ] ) )
{
//将ip对应的值复制给target
$target = $_REQUEST[ 'ip' ];
if (stristr(php_uname('s'), 'Windows NT'))
{
//如果是winds就直接ping
$cmd = shell_exec( 'ping ' . $target );
echo '<pre>'.$cmd.'</pre>';
}
else
{
//如果是Linux就默认ping 3个包
$cmd = shell_exec( 'ping -c 3 ' . $target );
echo '<pre>'.$cmd.'</pre>';
}
}
?>
- $_REQUEST[]具用$_POST[] $_GET[]的功能,但是$_REQUEST[]比较慢。通过post和get方法提交的所有数据都可以通过$_REQUEST数组获得
- php_uname — 返回运行 PHP 的系统的有关信息
- stristr() 函数搜索字符串在另一字符串中的第一次出现
- php_uname('s'):返回操作系统名称
Medium
利用:
|| 或者 &;& 或者 &

源码分析:
就多了一点过滤,但是没过滤完整
<?php
if( isset( $_POST[ 'submit'] ) )
{
$target = $_REQUEST[ 'ip' ];
// 过滤了 &&,;命令分割符
$substitutions = array(
'&&' => '',
';' => '',
);
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
// Determine OS and execute the ping command.
if (stristr(php_uname('s'), 'Windows NT')) {
$cmd = shell_exec( 'ping ' . $target );
echo '<pre>'.$cmd.'</pre>';
} else {
$cmd = shell_exec( 'ping -c 3 ' . $target );
echo '<pre>'.$cmd.'</pre>';
}
}
?>
High
无能为力了Orz,只有诸如“数字.数字.数字.数字”的输入才会被接收执行.
<?php
if( isset( $_POST[ 'submit' ] ) )
{
$target = $_REQUEST["ip"];
/*
stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。
*/
$target = stripslashes( $target );
// Split the IP into 4 octects
$octet = explode(".", $target);
// Check IF each octet is an integer
if ((is_numeric($octet[0])) && (is_numeric($octet[1])) && (is_numeric($octet[2])) && (is_numeric($octet[3])) && (sizeof($octet) == 4) )
{
// If all 4 octets are int's put the IP back together.
$target = $octet[0].'.'.$octet[1].'.'.$octet[2].'.'.$octet[3];
// Determine OS and execute the ping command.
if (stristr(php_uname('s'), 'Windows NT'))
{
$cmd = shell_exec( 'ping ' . $target );
echo '<pre>'.$cmd.'</pre>';
}
else
{
$cmd = shell_exec( 'ping -c 3 ' . $target );
echo '<pre>'.$cmd.'</pre>';
}
}
else
{
echo '<pre>ERROR: You have entered an invalid IP</pre>';
}
}
?>