墨者 - Bash漏洞分析溯源

bash代码注入的安全漏洞分析

 

bash的环境变量

   环境变量是操作系统运行shell中的变量,很多程序的运行需要获取系统的环境变量参数。具体赋值格式如下:

$ var="hello world"

  然后你就可以使用这个变量了,但是只是局部变量,即是当前进程可以用,若当前进程的子进程或者其他进程需要用,需要用到        export将本进程的变量copy到其他进程。丽日如下测试

   没加export,当新建一个bash,再输出$var 就不能获取环境变量

$ var="hello coolshell"
$ echo $var
hello coolshell
$ bash
$ echo $var

   所以得加个export

$ export var="hello coolshell"

bash的函数

  bash与上面得环境变量同理

$ foo(){ echo "hello coolshell"; }
$ foo
hello coolshell
$ bash
$ foo
bash: foo: command not found

  同理, 加个export -f 

$ foo(){ echo "hello coolshell"; }
$ foo
hello coolshell
$ export -f foo
$ bash
$ foo
hello coolshell

bash的bug

   先看如下测试代码:

$ export X='() { echo "inside X"; }; echo "outside X";'

  再用env 查看创建出来的环境变量

$ env
X=(){ echo "inside X"; }; echo "outside X";

当我们在当前的bash shell进程下产生一个bash的子进程时,新的子进程会读取父进程的所有export的环境变量,并复制到自己的进程空间中,很明显,上面的X变量的函数的后面还注入了一条命令:echo “outside X”,这条命令会在父进程向子进程复制的过程中被执行。

$ export X='() { echo "inside X"; }; echo "outside X";'
$ bash
outside X

这就是bash的bug—— 函数体外面的代码被默认地执行了

 

实践

  要找到网站运行bash的CGI文件,网上搜索,网站的默认路径为/cgi-bin中

 然后用bp抓包,在Connection中加入bash指令操作,创建环境变量顺便执行查看key

拿到key

参考链接:https://blog.csdn.net/jingxia2008/article/details/39637085

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值