审计impossible难度的代码,说明其中函数的作用

文章描述了一个PHP脚本,用于验证用户输入的IP地址是否有效,并利用白名单策略,同时使用CSRFtoken防止请求伪造。它还展示了如何使用explode函数处理IP地址和在不同操作系统上执行ping命令。

 Impossible

这题不再使用黑名单过滤而是使用了白名单。

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // Get input
    $target = $_REQUEST[ 'ip' ];
    $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' ) ) {
            // Windows
            $cmd = shell_exec( 'ping  ' . $target );
        }
        else {
            // *nix
            $cmd = shell_exec( 'ping  -c 4 ' . $target );
        }

        // 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>';
    }
}

// Generate Anti-CSRF token
generateSessionToken();

?> 

checktoken函数:主要是进行一个token验证,可以防止请求伪造。

explode函数:使用字符串对另一个字符串进行分割,并且以数组形式返回。这里演示的是以 ' . ' 作为分割符将2023.6.9进行了分割,并返回成数组。

DVWA代码审计可采用以下方法、流程,也有相关案例可供参考: ### 审计方法 对于零基础学习者,应先从简单项目如DVWA入手,逐步积累编程语言基础,熟练掌握常见漏洞的代码特征和审计工具使用。可借助如RIPS这类流行的静态代码分析工具,它能自动检测PHP应用程序中的漏洞,通过对所有源代码文件进行标记和解析,将PHP代码转换为程序模型,并检测在程序流程中可能被用户输入污染的敏感接收器。同时,要关注安全社区(如FreeBuf、看雪论坛)的漏洞分析文章,学习他人的审计思路,不断提升实战能力[^1][^5]。 ### 审计流程 代码审计核心在于“读懂代码→理解逻辑→发现漏洞”。在对DVWA进行审计时,不能一行行读代码,这费时又费力,目标是学会如何快速定位目标并发现问题。可以先从整体上了解DVWA的功能和业务逻辑,再结合常见漏洞类型,有针对性地去查找代码中可能存在的问题。 ### 审计案例 在密码找回安全方面,DVWA有不安全验证码(Insecure CAPTCHA)的案例,分为Low、Medium、High、Impossible不同难度级别。以Medium level源代码审计为例,代码如下: ```php <?php if (array_key_exists ("redirect", $_GET) && $_GET['redirect'] != "") { if (preg_match ("/http:\/\/|https:\/\//i", $_GET['redirect'])) { http_response_code (500); ?> <p>Absolute URLs not allowed.</p> <?php exit; } else { header ("location: " . $_GET['redirect']); exit; } } http_response_code (500); ?> <p>Missing redirect target.</p> <?php exit; ?> ``` 此代码涉及重定向功能,对`redirect`参数进行了简单过滤,若包含`http://`或`https://`则返回错误,否则进行重定向。可分析此过滤是否存在绕过的可能,从而发现潜在的安全漏洞[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值