欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pwnable.kr-shellshock WP

程序员文章站 2022-03-09 22:37:39
...

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

pwnable.kr-shellshock WP

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

pwnable.kr-shellshock WP

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

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

pwnable.kr-shellshock WP

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

pwnable.kr-shellshock WP

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

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

pwnable.kr-shellshock WP

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

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

pwnable.kr-shellshock WP

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

pwnable.kr-shellshock WP

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

pwnable.kr-shellshock WP