婚礼婚庆网站建设,深圳建设招标网站首页,网站一级栏目,域名备案需要网站搭建完成吗ret2libc1的略微进阶——存在systemplt但是不存在“/bin/sh”怎么办#xff1f; 目录
前言
python3 ELF 查看文件信息
strings 查看寻找/bin/sh
IDA反汇编分析
思路及实现
老规矩#xff0c;偏移量 offset
EXP编写
总结 前言
经过ret2libc1的洗礼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表里面有getsplt我们既然可以用一种方法通过systemplt执行system函数为什么不可以用getsplt执行gets函数呢当然可以 思路及实现
根据基本ret2libc的思想我们把溢出栈内容如下构造 这是需要跳转执行两个函数的情况基于跳转执行一个函数的情况而来具体可以看上一篇博客ret2libc1
简单来说padding后函数通过返回地址跳到getsplt然后经过一系列代码执行gets函数gets函数的参数从栈gets_addr的后两个单位找到。这个原理很基础不赘述。具体看上一篇博客。然后同理跳到systemplt执行system参数向上找第二个跨过两个单位其中一个是callee 的push ebp 也是buf2_addr。
这样就实现了没有/bin/sh输入就有了照旧system参数填/bin/sh地址返回shell 老规矩偏移量 offset
gdbpeda下pattern create 300 然后pattern offset addr 偏移量112 EXP编写
from pwn import *ioprocess(./ret2libc2)offset0x41384141
system_plt_Addr0x8048490
gets_plt_addr0x8048460
buf2_addr0x804a080payloadba*offsetp32(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值得展望的是比赛的题目远远难于此。但千里之行始于足下掌握好这些基础的掌握好这些原理才能慢慢深入进阶。