[pwnable.kr]shellshock

在这里插入图片描述
题目大概是在提示我们跟shellshock有关

在这里插入图片描述
看到提供了bash,
先看看c源代码

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

在这里插入图片描述
验证存在shellshock,
这里有个小小的坑,
就是之前的几个题都可以直接以文件名运行文件,
这里需要加上./了

ls -al也看到shellshock文件属于root用户
在这里插入图片描述
在这里插入图片描述
关于shellshock:
1.需要攻击者能够控制环境变量
2.需要有能够执行的高权限的程序,并且程序中存在启动bash子进程的操作

参考https://developer.aliyun.com/article/53608
和https://zhuanlan.zhihu.com/p/35579956

bash可以将shell变量导出为环境变量,还可以将shell函数导出为环境变量。

bash通过以函数名作为环境变量名,
以“(){”开头的字串作为环境变量的值来将函数定义导出为环境变量。

正常情况下,要得到函数环境变量,应该在命令行中输入
a() { echo 1;}
然后回车,
之后只需要输入a,然后回车,就会输出1

而对于具有类似形式的普通环境变量(不是函数环境变量)
b='() { echo 1;}'
仅仅被当作普通的字符串,而不能作为函数执行

但是当启动bash子进程,在继承父进程的环境变量的时候,
b这样的变量不仅会被处理成函数变量,
在}之后的语句也会被执行。


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
测试的时候又把前面的坑踩了一次,
靶场环境当前目录下的bash才是有漏洞的bash,调用时需要用./bash
而直接用bash会从环境变量PATH里面找系统默认的bash,而这个bash是没有漏洞的

跟着网上的分析简单看了一下bash 4.3的varieble.c文件,
(虽然基本看不太懂)
在这里插入图片描述
可以看到这里对() {开头的字符串没有太多检查就传给了parse_and_execute,
尝试去找parse_and_execute,
从varieables.c到common.h到evalstring.c,
varieables.cvarieables.c
在这里插入图片描述
common.h

在这里插入图片描述
最后在evalstring.c里面找到了,
可惜定义的很多东西不清楚干啥用的,
对底层也不是那么了解,
感觉在看天书

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值