漏洞简介
GNU Bash 4.3及之前版本在评估某些构造的环境变量时存在安全漏洞,向环境变量值内的函数定义后添加多余的字符串会触发此漏洞,攻击者可利用此漏洞改变或绕过环境限制,以执行Shell命令。某些服务和应用允许未经身份验证的远程攻击者提供环境变量以利用此漏洞。此漏洞源于在调用Bash Shell之前可以用构造的值创建环境变量。这些变量可以包含代码,在Shell被调用后会被立即执行。
影响范围
由于Bash在各主流操作系统的广泛应用,此漏洞的影响范围包括但不限于大多数应用Bash的Unix、Linux、Mac OS X,而针对这些操作系统管理下的数据均存在高危威胁。
漏洞的利用方式会通过与Bash交互的多种应用展开,包括HTTP、OpenSSH、DHCP等
漏洞原理
该Bash使用的环境变量是通过函数名称来调用的,导致漏洞是以(){
开头定义的环境变量在命令env中解析成函数后,bash执行并未退出,而是继续解析并执行shell命令。而其核心的原因在于在输入的过滤中没有严格限制边界,也没有做出合法化的参数判断。
复现过程
首先进入vulhub环境,找到bash下的shellshock并启用
docker-compose up -d
进入环境127.0.0.1:8080
启动成功后检测本地的漏洞
发现存在后进入容器
docker exec -it dc62ea87cc21 bash
进入容器后使用payload:env x=‘() { :;}; echo shellshocker’ bash -c “echo tom”
tip:如果提示'('
出现问题,可能是linux5.0后使用'('
需要进行转译,可以采用加\
或者“
显示shellshocker表示存在漏洞
然后在shell中定义变量
开启新进程后发现$spiringbird变量并没有继承
所以我们直接将变量存到环境变量里
此处使用export命令
成功,接下来设置一个环境变量
成功执行,下面可以进一步尝试
创建的字符串变量被设置成环境变量后在子进程解释成了函数执行,成功读取/etc/passwd
靶场复现
进入环境后,该漏洞环境分为最新版bash生成的safe.cgi和易受shellshock攻击的victim.cgi
我们进入到victim.cgi页面
在User-Agent处提交指令
成功查看到/etc/passwd