DVWA靶场命令注入高级源码分析详解
2023-6-9 17:29:6 Author: www.freebuf.com(查看原文) 阅读量:6 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

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返回数组中部分的或所有的键名
stristrstristr — 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");
?>

(6)shell_exec


文章来源: https://www.freebuf.com/articles/web/369097.html
如有侵权请联系:admin#unsafe.sh