[BUUCTF]-[网鼎杯 2018]Comment 详细解题

废话不多说

题目界面

在随意发帖后,发现需要登入,这个就比较鸡肋了,这是暗示你账号为zhangwei  密码为zhangwei***  这个*表示为某个字符,即zhangwei再加上某三个字符,然后burp遍历可以得出为666

账号:zhangwei   密码:zhangwei666

登入,任意发一个贴,然后可以留意,就想着发帖或留言地方可能存在注入

于是全部都单引号创建

发现无法进行留言了,果然是有猫腻的。

但是具体情况还需要探查,扫描发现有.git可以下载,于是利用自己写的win版本一键git下来了(封装了githack和所有分支下载)

通过网盘分享的文件:一键githack
链接: https://pan.baidu.com/s/1SVCez4xRjVhQ76UF6bewPQ?pwd=8880 提取码: 8880 

得到了一个版本的write_do.php

<?php
include "mysql.php";
session_start();
if($_SESSION['login'] != 'yes'){
    header("Location: ./login.php");
    die();
}
if(isset($_GET['do'])){
switch ($_GET['do'])
{
case 'write':
    break;
case 'comment':
    break;
default:
    header("Location: ./index.php");
}
}
else{
    header("Location: ./index.php");
}
?>

在继续看一下所有分支文件

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

发现了完整版本

可以看出$category存进去后,又在评论时候拿了出来,这就很符合二次注入

这里的addslashes可以对单引号进行转义,但是$category存在数据库中是没有被转义的,而且评论使用时候是多行命令,所以我们把$category写入特定sql注入并利用/**/注入,写入/*,然后评论时候利用*/封装多行注入,并用#注释本行来激发命令

',content=(SELECT database()),/*      和   */#

发现sql注入成功,于是正常sql获取信息

emmm最后发现字段里面没有东西。

然后我们尝试其他select

发现不能执行命令,也没有写权限,但可以读取,所以我们就利用selet load_file(文件)来读取文件,去直接找到flag

为了避免不可见字符,我们采用hex(load_file(文件))读取后ascii显示即可。

先读取/etc/passwd

发现只有www用户,在www/home使用了bash

然后读取home/www/.bash_history  文件,看看他使用了什么命令

发现是把文件移动到html,但是把.DS_Store删了,不想让人知道,但是tmp里面的还没有删,我们就去tmp里面读/tmp/html/.DS_Store

在这里发现了flag名称,然后就读tmp里的flag文件

emmm发现答案不对,这是一个过期的flag,于是我们之间去/var/www/html/flag_8946e1ff1ee3e40f.php读

获得最终flag

是的,`-m comment --comment` 是 **固定搭配**,但需要理解其各自含义和作用。 --- ### ✅ 回答:是的,它是固定搭配,但有原因 #### 🔧 命令结构: ```bash -m comment --comment "这里是注释内容" ``` - `-m comment`:表示加载 `comment` 扩展模块(match 模块),用于添加注释。 - `--comment "..."`:指定实际的注释内容(最多 256 字符)。 > 这两者必须一起使用。只有加载了 `comment` 模块,才能使用 `--comment` 参数。 --- ### 📌 示例: ```bash iptables -A INPUT -s 192.168.1.100 -m comment --comment "Allow from server1" -j ACCEPT ``` 这条规则表示: - 允许来自 `192.168.1.100` 的流量; - 注释为 `"Allow from server1"`,方便后期维护。 --- ### 🔍 查看带注释的规则: 使用命令: ```bash iptables -nvL INPUT --line-numbers ``` 你会看到类似输出: ``` Chain INPUT (policy ACCEPT) num target prot opt source destination ... 10 ACCEPT all -- 192.168.1.100 0.0.0.0/0 /* Allow from server1 */ ``` 注释会显示在 `/* ... */` 中。 --- ### 🧠 小贴士: - 注释内容不能超过 **256 个字符**,否则会被截断或报错。 - 注释不会影响规则行为,仅用于**调试和维护**。 - 如果系统不支持 `comment` 模块(旧内核),该参数不可用。 --- ### ✅ 总结: | 语法 | 说明 | |------|------| | `-m comment` | 加载注释模块 | | `--comment "xxx"` | 添加注释内容 | | 固定搭配 | ✅ 是必须一起使用的组合 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值