Shooting field audit summary

  1. 目录
  2. 前言
  3. 说明
  4. 审计过程
  5. 小结

目录


  • 说明
  • 前言
  • 审计过程
  • 小结

前言


下午审计了一波,成功用burp把环境搞崩= =哈哈哈
152299419224284d5b16a1d

说明


V靶场全名(VAuditDemo_Debug),我这里简称V

审计过程


这是我之前审计过的地方(我扔博客里了,这里就不在重复):

越权的发现
代码路径:

\VAuditDemo-master\VAuditDemo_Debug\user\UpdateName.php

代码如下:

<?php
include_once('../sys/config.php');
if (isset($_POST['submit']) && !empty($_POST['username']) ) { /*判断是否存在POST请求的submit和username参数*/

    if (strlen($_POST['username'])>16) { /*判断用户名是否长过16位*/
        $_SESSION['error_info'] = '用户名過長(用戶名長度<=16)';
        header('Location: edit.php');
        exit;
    }

    $clean_username = clean_input($_POST['username']);
    $clean_user_id = clean_input($_POST['id']);

    //判断用户名已是否存在
    $query = "SELECT * FROM users WHERE user_name = '$clean_username'"; /*b不存在SQL注入*/
    $data = mysql_query($query, $conn);
    if (mysql_num_rows($data) == 1) {
        $_SESSION['error_info'] = '用户名已存在';
        header('Location: edit.php');
        exit;
    }

    $query = "UPDATE users SET user_name = '$clean_username' WHERE user_id = '$clean_user_id'"; /*b不存在SQL注入*/
    mysql_query($query, $conn) or die("update error!");
    mysql_close($conn);
    //刷新缓存
    $_SESSION['username'] = $clean_username;
    header('Location: edit.php');
}
else {
    not_find($_SERVER['PHP_SELF']);
}

/*
1.先判断是否有POST请求
2.判断新的用户名是否长过16位
3.判断用户名是否存在
4.更新数据库名

PS:少了检测请求的ID是否等于用户的id,也就是说通过修改这个ID就能达到修改别的用户的名称实现平行越权
*/
?>

实验:

第一个用户:admins 密码:admin
第二个用户:我喜欢你 密码:111111

使用我喜欢你这个用户来改admins用户的用户名:
kdXEex.png

修改前的数据库:
kdXNtS.png

Burp抓包重放:
kdXdpQ.png

修改后的数据库:
kdXwlj.png

文件包含漏洞
在审计别的洞的时间用burp扫了一波,发现index.php居然有文件包含= =
burp扫描配置如下:
kwVgN4.md.png

kwV24J.png

文件包含:
kwVIu6.png

index.php

<?php 
require_once('sys/config.php');
require_once('header.php');
?>
<div class="row">
    <?php
    /* Include */
    if (isset($_GET['module'])){
        include($_GET['module'].'.inc');/*指定后缀*/
    }else{
    ?>
    <div class="jumbotron" style="text-align: center;">
        <h1><b>VAuditDemo</b></h1>
        <p>一个简单的Web漏洞演练平台</p><br />
    </div>
    <div class="col-lg-12">
        <h2>用於演示講解PHP基本漏洞</h2>
        <p></p>
    </div>
    <?php
    }
    ?>
</div>

<?php
require_once('footer.php');
?>

绕过方法有两种:

1.远程文件包含 要求:allow_url_fopen开启
2.zip协议  要求:zip协议没被禁止,知道绝对路径

远程包含payload如下:

http://127.0.0.1/index.php?module=http://127.0.0.1/1.txt?

kwVvvt.png

ZIP协议如下:

http://127.0.0.1/index.php?module=zip://I:\phpstudy\PHPTutorial\WWW\VAuditDemo-master\VAuditDemo_Debug\demo.zip%23

kwZVvq.png

压缩包图片:
kwZmrV.png

这里有个坑:就是你用zip协议的时候压缩包里面文件名一定要一样不然不行的,如果他指定后缀名
你就两个后缀名 比如:

指定后缀为:dd.txt 那么你压缩包里面就要放个dd.txt
指定后缀名为:.inc和上面一样那么压缩包放个.inc.inc

靶场下载地址:http://t.cn/Ec19F3B

小结


快速判断是否有SQL注入,在带入数据库查询之前看看参数是否有使用什么函数之类的,有就直接过,除非数据库编码是GBK,如果是黑名单替换,看看是否能绕过

在框架的php文件里面快速搜索include这个关键词,看看哪里有参数可控的地方,如果有测试一下说不定能找到个文件包含

转载请声明:转自422926799.github.io


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

文章标题:Shooting field audit summary

本文作者:九世

发布时间:2019-02-13, 00:45:22

最后更新:2019-04-19, 20:36:16

原始链接:http://422926799.github.io/posts/9cb056fa.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录