pwnable.kr-shellshock WP
程序员文章站
2022-03-09 22:37:39
...
这道题涉及的知识点是shellshock(也叫破壳漏洞)CVE-2014-6271,GNU Bash 版本小于等于4.3可能存在这个漏洞。首先查看一下有什么文件
发现目录里有一个可执行文件bash
,我们来查看一下bash
的版本
可以看到这个路径中的bash
版本低于4.3,下面来测试一下这两个版本的bash
是否存在破壳漏洞
env x='() { :;}; echo shellshocked' bash –c "echo test"
可以看到bash
不存在破壳漏洞,而./bash
存在破壳漏洞,有关破壳漏洞的知识可以参考freebuf的文章和[aletero的博客]。
通过上面的两条语句可以说明在初始化环境变量时,将字符串解析成了函数,通过命令可以执行。
将shellshock简单的总结一下就是:当Bash
在初始化环境变量时,语法解析器发现小括号和大括号的时候,就认为它是一个函数定义,Bash
把函数体解析完了之后,去执行了函数定义后面的语句。
既然大括号后面的语句可以得到执行那么尝试一下下面的命令
env casuall='() { :;}; cat flag' ./bash -c "casuall"
提示没有权限,我们查看一下我们是哪个用户以及文件的权限
我们是shellshock用户,而flag只有root用户和shellshock_pwn组才有权限读。
我们看一下shellshock的源码
#include <stdio.h>
int main(){
setresuid(getegid(), getegid(), getegid());
setresgid(getegid(), getegid(), getegid());
system("/home/shellshock/bash -c 'echo shock_me'");
return 0;
}
shellshock
执行时将 RUID , EUID, SUID(以及RGID , EGID , SGID)
设置成 EGID
,该进程就得到了对 flag文件的读权限。
RUID, 用于在系统中标识一个用户是谁,当用户使用用户名和密码成功登录后一个UNIX系统后就唯一确定了他的RUID.
EUID, 用于系统决定用户对系统资源的访问权限,通常情况下等于RUID。
SUID,用于对外权限的开放。跟RUID及EUID是用一个用户绑定不同,它是跟文件而不是跟用户绑定。
SUID的限制与功能:
- SUID权限仅对二进制程序有效;
- 执行者对于该程序需要具有x的可执行权限;
- 本权限仅在执行该程序的过程中有效;
- 执行者将具有该程序的所有者的权限。
与SUID不同的是,SGID可以针对文件或目录来设置,如果是对文件来说,SGID有如下的功能:
- SGID对二进制程序有用;
- 程序执行者对于该程序来说,需具备x的权限;
- 执行者在执行的过程中将会获得该程序用户组的支持。
可以看到shellshock
在用户组可执行权限的地方是一个字母s
,这表明在执行shellshock
时可以获得shellshock
所处用户组的权限(也就是shellshock_pwn)的权限,这样就被利用读取flag了
我们构造以下命令
env casuall='() { :;}; cat flag' ./shellshock
推荐阅读
-
诺基亚930首款WP8.1系统
-
WP8.1中IE浏览器存在重大漏洞:用户保存的密码极易泄露
-
WP8.1中IE浏览器存在重大漏洞:用户保存的密码极易泄露
-
windows phone 配置PhoneGap开发环境(wp7 phonegap 开发环境)图文教程
-
Win10 Mobile降级WP8.1无法登录微软账户怎么办?官方工具惹的祸?
-
Win10 Mobile 10512与WP8.1性能体验对比视频
-
w3wp.exe占用cpu过高的解决方法第1/2页
-
Win10手机预览版回滚WP8.1刷机工具更新下载:修复Bug
-
Win10手机版回滚WP8.1刷机工具更新到v3.1.2:支持LG Lancet
-
如何在WP7上用XNA写2D游戏(二)