现在我们使用 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", &amp;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,如果影响作者,望联系本人进行删除

最新文章

  1. 联想A880 DIY 换触摸屏屏幕
  2. 安装 modelsim 10.4
  3. Git下载Spring项目源码并编译为Eclipse
  4. ASP.NET Core 开发-缓存(Caching)
  5. Backbone.js Wine Cellar 教程
  6. Git删除文件操作
  7. Java入门到精通——基础篇之static关键字
  8. PAT-乙级-1021. 个位数统计 (15)
  9. .ssh 文件夹权限设置问题
  10. 解决HTML5中placeholder属性兼容性的JQuery插件
  11. C++ Primer 学习笔记_35_STL实践与分析(9)--map种类(在)
  12. Ubuntu Server 14.04 LTS(64bit)已安装 weblogic Server 12c(12.1.3) Zip Distribution
  13. 使用vsftpd+nginx搭建一个文件服务器
  14. 勤拂拭软件Android开发之旅(1) 之 Android 开发环境搭建
  15. PXE高效能批量网络装机
  16. Java第一周作业
  17. React-classnames库
  18. vuex之单向数据流
  19. effective VBA
  20. 为什么程序员老在改 Bug,就不能一次改好吗?

热门文章

  1. (七)STL适配器
  2. 如何在cmd中安装python第三方模块
  3. linux基础实操四
  4. Python集合(set)
  5. Tensorflow 中的优化器解析
  6. 让simplejson支持datetime类型的序列化
  7. PAT Basic 1069. 微博转发抽奖(20)
  8. XAML绑定到资源文件字符串时失败
  9. [转] Form 表单数据处理 简单教程 formidable 使用心得
  10. Ubuntu 16.04 卸载Postgresql