CTF|HITCON-Training-master lab4 writeup (ret2libc题型)

这篇博客详细介绍了如何利用ret2libc技术解决CTF比赛中的HITCON-Training-master lab4题目。作者首先阐述了ret2libc的基本原理,即控制程序执行libc中的特定函数,如system("/bin/sh")。接着,讨论了在缺少system和"/bin/sh"的情况下,如何通过获取libc中已执行函数的地址,利用延迟绑定和地址偏移计算system函数地址。博客还提到了利用got表泄露和‘see something’函数来获取地址信息,并给出了查看libc库路径的命令。
摘要由CSDN通过智能技术生成

CTF|HITCON-Training-master lab4 writeup (ret2libc题型)

在这里插入图片描述
在这里插入图片描述
做题做题前先看看ctfwiki上对ret2libc的原理描述

原理

ret2libc 即控制函数的执行 libc 中的函数,通常是返回至某个函数的 plt 处或者函数的具体位置(即函数对应的 got表项的内容)。一般情况下,我们会选择执行 system("/bin/sh"),故而此时我们需要知道 system 函数的地址。

思路

总体思路就是我们遇到没有system没有"/bin/sh"的文件
我们考虑用以下方法获取system函数的位置

  • system 函数属于 libc,而 libc.so 动态链接库中的函数之间相对偏移是固定的。
  • 即使程序有 ASLR 保护,也只是针对于地址中间位进行随机,最低的12位并不会发生改变。所以如果

所以我们只要知道了libc中某一个函数的真实地址,我们就可以通过system函数和这个函数之间的地址偏移来得到system函数的真是地址。
而对于如何知道某一个函数的真实地址,我们一般常用的方法是采用 got 表泄露,即输出某个函数对应的 got 表项的内容。当然,由于 libc 的延迟绑定机制,我们需要泄漏已经执行过的函数的地址。

延迟绑定

所谓延迟绑定,就是当函数第一次被调用的时候才进行绑定(包括符号查找、重定位等),如果函数从来没有用到过就不进行绑定。基于延迟绑定可以大大加快程序的启动速度,特别有利于一些引用了大量函数的程序.

对于lab4 我们看到文件里面一个叫“see something”的函数可以返回有一个函数的真实

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值