elf 学习
2024-10-21 03:45:27
现在我们使用 readelf 命令来查看 elfDome.out 的文件头
readelf -l elfDemo.out
使用 readelf 来查看程序头:
readelf -S elfDemo.o
使用 readelf 命令查看目标文件中完整的段:
可以使用 readelf 读取这两个表:偏移表加字符
$ readelf -x .strtab elfDemo.o
readelf -s elfDemo.o
符号表
readelf -r elfDemo.o
重定位表
LD_PRELOAD 环境变量可以定义在程序运行前优先加载的动态链接库。这使得我们可以有选择性地加载不同动态链接库中的相同函数,即通过设置该变量,在主程序和其动态链接库中间加载别的动态链接库,甚至覆盖原本的库。这就有可能出现劫持程序执行的安全问题。
#include<stdio.h>;
#include<string.h>;
void main()
{ char passwd[] = "password";
char str[128];
scanf("%s", &str);
if (!strcmp(passwd, str))
{printf("correct\n");
return;}
printf("invalid\n");
}
下面我们构造一个恶意的动态链接库来重载 strcmp() 函数,编译为动态链接库,并设置 LD_PRELOAD 环境变量:
$ cat hack.c
#include<stdio.h>
#include<stdio.h>
int strcmp(const char *s1, const char *s2)
{printf("hacked\n");
return 0;}
$ gcc -shared -o hack.so hack.c
$ gcc ldpreload.c
$ ./a.out
asdf
invalid
$ LD_PRELOAD="./hack.so" ./a.out
asdf
hacked
correct
LD_SHOW_AUXV
AUXV 是内核在执行 ELF 文件时传递给用户空间的信息,设置该环境变量可以显示这些信息。如:
$ LD_SHOW_AUXV=1 ls
AT_SYSINFO_EHDR: 0x7fff41fbc000
AT_HWCAP: bfebfbff
AT_PAGESZ: 4096
AT_CLKTCK: 100
AT_PHDR: 0x55f1f623e040
AT_PHENT: 56
AT_PHNUM: 9
AT_BASE: 0x7f277e1ec000
AT_FLAGS: 0x0
AT_ENTRY: 0x55f1f6243060
AT_UID: 1000
AT_EUID: 1000
AT_GID: 1000
AT_EGID: 1000
AT_SECURE: 0
AT_RANDOM: 0x7fff41effbb9
AT_EXECFN: /usr/bin/ls
AT_PLATFORM: x86_64
以上文章转载自https://firmianay.gitbooks.io/ctf-all-in-one/content/doc/1.5.7_memory.html,如果影响作者,望联系本人进行删除
最新文章
- 联想A880 DIY 换触摸屏屏幕
- 安装 modelsim 10.4
- Git下载Spring项目源码并编译为Eclipse
- ASP.NET Core 开发-缓存(Caching)
- Backbone.js Wine Cellar 教程
- Git删除文件操作
- Java入门到精通——基础篇之static关键字
- PAT-乙级-1021. 个位数统计 (15)
- .ssh 文件夹权限设置问题
- 解决HTML5中placeholder属性兼容性的JQuery插件
- C++ Primer 学习笔记_35_STL实践与分析(9)--map种类(在)
- Ubuntu Server 14.04 LTS(64bit)已安装 weblogic Server 12c(12.1.3) Zip Distribution
- 使用vsftpd+nginx搭建一个文件服务器
- 勤拂拭软件Android开发之旅(1) 之 Android 开发环境搭建
- PXE高效能批量网络装机
- Java第一周作业
- React-classnames库
- vuex之单向数据流
- effective VBA
- 为什么程序员老在改 Bug,就不能一次改好吗?