impossible难度的命令执行代码审计

一个跨行小白的第一次审计:

if( isset( $_POST[ 'Submit' ]  ) ) {

    //if判断语句,isset检测通过post传递的变量值是否生命并且其值不为null《null=0》

if( isset( $_POST[ 'Submit' ]  ) ) {
     //if判断语句,isset检测通过post传递的变量值是否生命并且其值不为null《null=0》

    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
    // Check Anti-CSRF token  在用户提交表单时验证表单 token 的有效性,以防止跨站点请求伪造(CSRF)攻击。并且在用户注销时删除token值
    $target = $_REQUEST[ 'ip' ];
//定义验证后的ip
    $target = stripslashes( $target ); 
//使用 stripslashes() 函数将其解除转义,并返回一个新的没有转义的字符串。
    
    // Split the IP into 4 octects
    $octet = explode( ".", $target );  
 //explode() 函数用于将一个字符串按照指定的分隔符拆分成多个子字符串,并将这些子字符串存储在数组中。
    

    if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
    // Check IF each octet is an integer  将一段 IP 地址字符串 $target 拆分成了一个数组 $octet,而每个数组元素均为一个字符串类型。要检查每个数组元素是否均为整数,我们可以遍历 $octet 数组,然后对于每个元素使用 is_numeric() 函数检查其是否为数值类型,如果是,则将其转换为整数类型进行后续操作。
        $target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];
    
        // Determine OS and execute the ping command.确定操作系统并执行ping命令。
        if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
         //区分系统大小写并且返回系统信息
            $cmd = shell_exec( 'ping  ' . $target ); 
        //输出结果如果是Windows的系统将平
       }
      else {
            $cmd = shell_exec( 'ping  -c 4 ' . $target );
        //如果是其他的系统例如像linx的会一直ping-c则确定了ping的次数
        }
    
        // Feedback for the end user  对最终用户的反馈
        echo "<pre>{$cmd}</pre>";
    }
    else {
        // Ops. Let the user name theres a mistake
        echo '<pre>ERROR: You have entered an invalid IP.</pre>';
    }    //错误输出时会报错回显出你输入了一个错误的IP地址

}

// Generate Anti-CSRF token   生成反CSRF令牌
generateSessionToken(); 
  //生成一个用于会话标识的随机字符串 token。

//CheckToken: 调用redisTokenStore 查询token的合法性,及其返回用户的部分信息。

//requestrequest:封装了用于识别用户信息的令牌。

//user_token:用于验证和识别用户的身份信息。

//session :是交互过程。

session_token:是一种在Web应用程序中用于管理用户会话的标识符。它通常是一个随机生成的字符串,用于识别特定用户的会话,并且可以用来验证用户是否已经登录。

stripslashes;反引用一个引用字符串

ecplode:使用一个字符串分割另一个字符串

is_numeric 检测变量是否为数字或数字字符串(因为上面使用的是ping命令所以这里检测是否全为数字

sizeof:count的别名用来统计数组、Countable 对象中所有元素的数量(这里ping的是四组数字字符)

 stristr函数的忽略大小写版本

php_uname:返回运行 PHP 的系统的有关信息

shell_exec:命令执行函数通过shell执行命令并完整的以字符串形式输出

初次审计不喜勿喷。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值