CTFHub Linux 动态加载
CTFHub Linux 动态加载
观察页面,写着没有 x权限,说明我们没有办法执行根目录下的 elf 文件 readflag,所以我们无法利用下方的 webshell 获取flag(我们的权限不够)
我们发现无法访问到 flag
Linux 下
x(eXecute,执行):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限Linux 755权限 & 644权限:
在linux下,chomd也可以用数字表示权限 如 chomd 777 file
语法为: chomd xyz file
x: 表示 代表文件所有者拥有的权限 (User)
y:代表文件所有者同组用户的权限为 (Group)
z:代表公共用户的权限 (Other)
同时:读的权限 : r= 4 写的权限:w = 2 运行的权限为 x = 1
所以 ,755意味着:
- User rwx属性全都具备:4+2+1=7
- Group、Other 只具备 r x : 4+1=5
644 意味着失去了运行的权限
回到题目中来,页面提示我们 根目录下的 readflag 失去了 执行的权限,我们无法通过 一句话木马 获取 flag
继续思考,什么是 elf文件?
在计算机科学中,是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件的文件格式。
ELF文件参与程序的连接(建立一个程序)和程序的执行(运行一个程序)
所以可以从不同的角度来看待elf格式的
- 如果用于编译和链接(可重定位文件),则编译器和链接器将把elf文件看作是节头表描述的节的集合,程序头表可选。
- 如果用于加载执行(可执行文件),则加载器则将把elf文件看作是程序头表描述的段的集合,一个段可能包含多个节,节头表可选。
这里借用一位博主的图片加深理解
elf文件左边是于编译和链接 右边是代码执行
可重定位目标文件:包含二进制代码和数据,其形式可以和其他目标文件进行合并,创建一个可执行目标文件
假如我们对执行一段程序,那么 这段代码会经历 以下阶段:
预处理阶段---->编译阶段---->汇编阶段----->代码执行
在 汇编阶段 会将我们的文件翻译成 机器语言指令,并把这些指令打包成一种叫做可重定位目标程序的格式,并将结果保存在目标文件中(把汇编语言翻译成机器语言的过程)。
汇编结束后,就要与所依赖的外部库连接起来(调用函数库)。
打个比方 我们书写了 printf(“hello world”),该程序调用了printf函数。 printf函数存在于一个名为printf.o的单独的预编译目标文件中。 链接器(ld)就负责处理把这个文件并入到hello.o程序中,结果得到hello文件,一个可执行文件。
函数库分为 静态库和动态库
静态库 指直接将我们所调用的 函数库的代码全部加入到可执行文件中,产生的文件较大,当然在使用的过程中也就不需要库文件。而动态库是指在调用的过程中,函数库以链接的形式加入到可执行文件中,让可执行文件通过链接去访问函数库,节约了系统内存。
在linux中动态库文件是ld-linux.so.2
ld-linux.so.2 glibc的库文件,一般链接到相应版本的ld-xxx.so上,是和动态库载入有关的函数
我们可以通过ldd 命令来查看一个 应用需要哪些依赖的动态库
同时在加载 动态库的时候,控制权在ld-linux.so加载器加载完所有的动态库的时候才会将权限移交给程序
而且, ELF 文件提供了相应的加载信息, GCC包含了一个特殊的 ELF 头INTERP, 这个 INTERP指定了 加载器的路径。ELF 规格要求,假如 PT_INTERP 存在的话,操作系统必须创建这个 interpreter文件的运行映射,而不是这个程序本身, 控制权会交给这个interpreter,用来定位和加载所有的动态库.
从而达到绕过 程序本身的权限不足
所以我们使用动态加载器动态链接 elf文件
使用中国蚁剑
点击右键,虚拟终端 输入我们的payload
/lib64/ld-linux-x86-64.so.2 /readflag
获得 flag
CTFHub Linux 动态加载相关推荐
- CTFHub Linux 动态加载器
查看环境 先给了755 他自己传了flag 等于告诉我们在哪了 然后限到了644 不想让我们直接看 都到这一题了权限应该不用讲了 提示给了shell 且不需要提权 于是需要新学一个东西 动态加载 Li ...
- Linux动态加载共享库,Linux共享库的动态加载(附测试案例)
共享库的动态加载是指可以在程序运行的过程中去加载所需的共享库.常用于某些系统或者应用程序的自动升级. 在C语言的源程序动态加载共享库,需要调用一组特殊的函数,它们被声明于一个专门的头文件dlfcn.h ...
- Linux动态加载内核模块
Linux属于单内核,为了弥补单内核扩展性与维护性差的缺点,Linux引入动态可加载内核模块,模块可以在系统运行期间加载到内核或从内核卸载.模块是具有独立功能的程序,它可以被单独编译,但不能独立运行. ...
- 动态加载器的知识学习及CTFHUB动态加载器解题
目录 动态加载器的了解 CTFHUB-动态加载器 动态加载器的了解 在[维基百科]中动态加载是一种机制,通过该机制,计算机程序可以在运行时将库(或其他二进制)加载到存储器中,检索包含在库中的函数和变量 ...
- linux内核采取,采用动态加载模块的方式Linux内核编译
Linux内核是一种单体内核,但是通过动态加载模块的方式,使它的开发非常灵活方便.那么,它是如何编译内核的呢?我们可以通过分析它的Makefile入手.以下是一个简单的hello内核模块的Makefi ...
- Linux下的静态库、动态库和动态加载库
from: http://www.techug.com/linux-static-lib-dynamic-lib 库的存在极大的提高了C/C++程序的复用性,但是库对于初学者来说有些难以驾驭,本文从L ...
- 【Linux 内核】宏内核与微内核架构 ( 操作系统需要满足的要素 | 宏内核 | 微内核 | Linux 内核动态加载机制 )
文章目录 一.操作系统需要满足的要素 二.宏内核 三.微内核 四.Linux 内核动态加载机制 一.操作系统需要满足的要素 电脑上运行的 操作系统 , 是一个 软件 ; 设备管理 : 操作系统需要 为 ...
- Linux中mod相关的命令 内核模块化 mod相关命令都是用来动态加载内核模块/驱动程序模块...
Linux中mod相关的命令 内核模块化 mod相关命令都是用来动态加载内核模块/驱动程序模块 http://baike.baidu.com/link?url=lxiKxFvYm-UfJIxMjz ...
- [driver]linux内核动态加载模块
问题: 1. 把编译好的模块放到板子/lib/modules对应文件夹下,并且执行了depmod -a, 比如pl2303.ko, 那么下一次插入pl2303的串口线,是否可以识别,也就是自动加载pl ...
最新文章
- UIWindow简单介绍
- 你竟然还不懂变分自编码机?这个16岁的OpenAI天才实习生讲得可透彻了
- 小程序分享到朋友圈功能_微信小程序开放分享到朋友圈功能
- mysql 事务值被改变_面试被问MySQL 事务的实现原理,怎么破?
- Java学习笔记(十)--控制台输入输出
- JavaFX maven工程pom文件完整内容
- 谷歌guava_Google Guava:您永远不会知道的5件事
- [css] 一个页面引用多个文件,如何防止样式冲突?
- Oracle零碎要点---多表联合查询,收集数据库基本资料
- AI 研究人员收入超过百万美元!
- Uber从Postgres切换到MySQL
- python 列表转字典的一些方法
- 基于深度学习的新闻摘要生成算法实现与详解(Encoder-Decoder框架模型)
- 32位plsql连接64位Oracle数据库
- 基于LiDAR里程计和先验地图的定位方法
- kengoro机器人哪儿有卖_日本东京大学创造出“骨格精奇”的机器人Kengoro 会流汗能做掌上压...
- S3C2440 开发板实战(7):字符设备驱动框架+LED驱动
- 移民找老张解析:美国绿卡与美国公民身份的区别
- 母婴商城设置路由分发规则
- 使用python从概率角度绘制植物叶子!