官方公众号企业安全新浪微博
FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。
FreeBuf+小程序
1.源码详解
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
//判断前端输入是否有submit变量,且该变量是否为空。
$target = trim($_REQUEST[ 'ip' ]);
//去除前端输入字符串首尾处的空白字符(或者其它字符)后,将其赋值给$target。
$substitutions = array(
'&' => '',
';' => '',
'| ' => '',
'-' => '',
'$' => '',
'(' => '',
')' => '',
'`' => '',
'||' => '',
);
//将需要转义的字符转义并放入一个数组(黑名单)。$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
//将原变量target中的特殊字符通过str_replace函数的处理,将特殊字符 (黑名单) 替换为转义后的字符,赋值给$target。
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
//php_num('s')返回运行php服务的操作系统信息,在忽略大小写的情况下,php_nums’)返回操作系统信息是否包含windowsNT,如果包含,返回true。
$cmd = shell_exec( 'ping ' . $target );
}
//如果返回的操作系统信息为windows系统,执行ping命令。
else {
//否则,执行非windows系统的ping命令。
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
。
// 输出命令执行结果
echo "<pre>{$cmd}</pre>";
}
2.代码涉及函数
函数 | 解释 |
---|---|
isset | 检测变量是否已声明并且其值不为 null |
trim | 去除字符串首尾处的空白字符(或者其他字符) |
str_replace | 子字符串替换 |
array_keys | 返回数组中部分的或所有的键名 |
stristr | stristr — strstr()函数的忽略大小写版本,返回第一次出现的位置开始到结尾的字符串 |
php_uname | 返回运行 PHP 的系统的有关信息,php_num('s')返回运行php服务的操作系统信息 |
shell_exec | 通过 shell 执行命令并将完整的输出以字符串的方式返回 |
备注:
1.str_replace**(
array|string `$search`,
array|string `$replace`,
string|array `$subject`,
int `&$count` = **`null`**
): string|array
该函数返回字符串或者数组。该字符串或数组是将 `subject` 中全部的 `search` 都被 `replace` 替换之后的结果。
参数
2.php_uname(mode)
mode 是单个字符,用于定义要返回什么信息:
'a':此为默认。包含序列 "s n r v m" 里的所有模式。
's':操作系统名称。例如: FreeBSD。
'n':主机名。例如: localhost.example.com。
'r':版本名称,例如: 5.1.2-RELEASE。
'v':版本信息。操作系统之间有很大的不同。
'm':机器类型。例如:i386。
3.函数使用演示
(1)trim()
<?php
$a = " abc 123 ";
echo trim($a);
?>
使用前(火狐浏览器-右键-无障碍属性查看)
使用后
(2)array_keys
<?php
$substitutions = array(
'&' => '',
';' => '',
'| ' => '',
'-' => '',
'$' => '',
'(' => '',
')' => '',
'`' => '',
'||' => '',
);
var_dump(array_keys($substitutions));
?>
<?php
$substitutions = array(
'&' => '',
';' => '',
'| ' => '',
'-' => '',
'$' => '',
'(' => '',
')' => '',
'`' => '',
'||' => '',
);
$arr1=array_keys ($substitutions);
for($a=0;$a<sizeof($substitutions);$a++){
echo $arr1[$a]."<br />";
}
?>
代码
执行
(3) str_replace
<?php
$substitutions =array(
'ipconfig' => '',
'whoami' => '',
'pwd' =>'',
);
$arrl=array_keys($substitutions);
$a="whoamiabcipconfiq123pwd";
echo $a."<br \>;
echo str_replace($arr1,$substitutions,$a);
?>
(4)php_uname
<?php
echo php_uname( 's' );
?>
(5) stristr
<?php
var_dump("word","WORD");
?>