[原创][新手向]ret2dl-resolve详解
0x00 前言
最近做RCTF,结果pwn一道没做出来(虽然精力全放在更擅长的reverse上了),然后复盘的时候发现RNote4有个关于ret2dl-resolve的利用,遂在网上查之,发现很多资料讲的不是很清楚,但是还是慢慢琢磨弄懂了。这个技巧貌似是一个挺基础的技巧,玩pwn一段时间了,发现自己还有这种知识遗漏。。。所以这篇文章新手向,大神可以绕道了。。。。
0x01 ELF文件格式以及动态链接
我们知道,无论是windows下还是linux下,程序想要调用其他动态链接库的函数,必须要在程序加载的时候动态链接,比方说,windows下,叫作IAT表,linux下,叫作GOT表。调用库函数时,会有个类似call [xxx] 或者 jmp [xxx]的指令,其中xxx是IAT表或者GOT表的地址。在这里因为是linux的pwn,我们主要讨论GOT表,以及在linux下更为常见的jmp [xxx].
linux如何调用库函数
首先一个hello world程序
#include <stdio.h>
int main()
{
puts("Hello Pwn\n");
return 0;
}//gcc -m32 -fno-stack-protector -no-pie -s hellopwn.c
其中,这个puts是调用的libc这个动态链接库导出的一个函数。编译它,看看puts是怎么被调用的。
push offset s ; "Hello Pwn\n" call _puts ;这里调用puts _puts: jmp ds:off_804A00C ; puts会call到这里,这里就是“jmp [GOT表地址]”的这样一条指令
跟一下,看看这个off_804A00C在第一次调用时是什么东西
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
复制成功
