首页 > 系统相关 >p牛的环境变量的洞和shellshock的利用区别

p牛的环境变量的洞和shellshock的利用区别

时间:2024-04-25 22:11:51浏览次数:26  
标签:cgi 区别 环境变量 源码 shellshock payload bash

上一次简单探索了一下dash之后我把目标转向了p牛提到的很像的一个CVE:shellshock破壳漏洞

简单看一下payload,两者确实很像,了解一番过后就在想p牛的那个payload能不能通过shellshock的方式通过cgi去利用

环境部署:这里选择直接使用vulhub部署docker镜像

在vulhub中shellshock在bash文件夹中

 这里我看网上有的叫shellshock,而我这里是按照漏洞编号命名的

部署下来

 访问8080端口可以看到是否成功部署

 然后打开cgi文件:victim.cgi

 测试payload

一开始我还寻思这两个payload这么像感觉利用也差不多,要是真能用的话那p牛这不应该是又挖出来个CVE嘛

打完研究了下才发现有个问题是在cgi文件中并没有使用环境变量,为什么这个写在UA里的payload能打进来

参考文章:

https://blog.csdn.net/a1_pha/article/details/136312282

https://www.cnblogs.com/Cl0ud/p/14248937.html

这里提到当web服务器处理用户请求时,会将请求头中的信息转换为环境变量,也就是说咱们的UA被它转成了环境变量,所以payload能够生效

但是这又让我产生了疑惑,那既然如此,虽然在p牛的文章中使用的环境变量是特定的,那我把它写成自己写的头不就行了吗,但是实际测试并不好使

我尝试了下在shellshock的利用payload中使用env和export等命令查看当前cgi中的环境变量都有哪些,然后发现不使用/bin/xxx这种绝对路径直接调用程序的方式似乎无法执行

不确定是无法执行还是无法看到回显,尝试了下echo

 然后发现文件并没有创建,但是echo 123又能正常执行

 虽然不知道为什么会显示出源码,难道是跟之前看到的bash的内建命令有关,只能执行内建命令?

看起来这里确实只能直接执行内建命令

而export是个内建命令,env是/usr/bin里的,它们似乎确实能看到环境变量

但是其它的头呢?这里看不到?

思考了半天没想出来什么原因,又回去开始观摩大佬的文章,然后突然想到为什么不换个头来打一下试试呢?

 还真是UA头的问题?尝试了一下发现这玩意只接受它指定的这几个头,似乎不会解析其他自己添加的头,不管是不是正规的头

 加上Sec-Fetch-Site这种存在的头也一样,而且即使能够接受看这情况也会被加上个HTTP前缀,所以无法用p牛的payload通杀,只能像p牛文章中给出的那种环境,能够控制环境变量并且后边调用了bash才行得通

这里为什么不能直接执行命令,ua头为什么不好使和cgi这里到底是不是只接收执行的请求头想要再进一步分析估计就得看源码了

前面的 dash源码看得头疼,这里的shellshock产生的bash源码也没看,还是等有时间再分析分析吧

标签:cgi,区别,环境变量,源码,shellshock,payload,bash
From: https://www.cnblogs.com/theskyforfly/p/18158732

相关文章

  • 什么是DTU和串口服务器的区别
    在工业物联网的快速发展中,数据传输单元(DTU)和串口服务器作为两种关键设备,各自扮演着重要的角色。对于传统行业来说,了解它们的基本概念和区别,有助于更好地选择和应用这些技术,提升生产效率和智能化水平。本文将向传统行业解释DTU和串口服务器的基本概念,并探讨它们之间的主要区别......
  • Iterator 和 ListIterator 有什么区别?
    前言Iterator和ListIterator都是Java集合框架中的迭代器接口,它们都可以用于遍历集合中的元素。ListIterator继承自Iterator接口,因此ListIterator可以用于任何实现了Iterator接口的集合,如List和Set。以下是两者的主要区别:原始集合类型的差别Iterator可以遍历Collection中的元......
  • C++ 指针与引用的区别
    初学C++指针时,我误以为可以将指针视作对于原始对象的引用,当时还没有接触C++引用的概念,所以犯了概念上的错误,在此澄清一下这两者的区别。在形式上使用 *定义指针变量:int*p;定义的时候可以不初始化。使用& 定义引用:int&r=i;(其中i是另一个变量),定义引用的时候需要......
  • C++ 指针与引用的区别
    初学C++指针时,我误以为可以将指针视作对于原始对象的引用,当时还没有接触C++引用的概念,所以犯了概念上的错误,在此澄清一下这两者的区别。在形式上使用 *定义指针变量:int*p;定义的时候可以不初始化。使用& 定义引用:int&r=i;(其中i是另一个变量),定义引用的时候需要......
  • C++ 指针与引用的区别
    初学C++指针时,我误以为可以将指针视作对于原始对象的引用,当时还没有接触C++引用的概念,所以犯了概念上的错误,在此澄清一下这两者的区别。在形式上使用 *定义指针变量:int*p;定义的时候可以不初始化。使用& 定义引用:int&r=i;(其中i是另一个变量),定义引用的时候需要......
  • Avalonia UI 中 Styles 与 ControlTheme 的区别
    目录目录介绍使用方式全局主题(GlobalTheme)局部主题(LocalTheme)控件主题(ControlTheme)问题描述问题分析问题1区别问题2重写Template用Styles还是ControlTheme?使用ControlTheme最佳实践总结Style&ControlTheme的特性独立性继承性......
  • docker和虚拟机的区别
    VPS、ECSVPS:虚拟专用服务器,可以理解为物理机上多个Vmware/VirtualBox虚拟机,但传统VPS不支持资源升降级,资源是固定的。ECS:VPS+自主升降级就变成了ECS。docker这里我以一个实际中可能遇到的例子讲解,比如我们有两台服务器,我需要在两台服务器上分别安装vim软件,那么步骤......
  • 【Qt 专栏】QByteArray详解(QByteArray 与 QString的区别)
    本文转自:《Qt编程指南》    作者:奇先生Qt编程指南,Qt新手教程,QtProgrammingGuide本节学习QByteArray的两种用法,第一种作为字符串处理类,类似QString,但QByteArray内部字符编码不确定,所以要慎用。第二种是作为纯的字节数组,里面可以包含多个'\0',经常用于网络数据的......
  • tcp和udp有什么区别-简要
     传输控制协议(TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议。UDP为应用程序提供了一种无需建立连接就可以发送封装的IP数据包的方法。区别:连接方面,安全方面,传输效率,连接对象数量。1、连接方面区别TCP面向连接(如打电话要先拨号建立连接)。UDP是无连接的,即发送数......
  • 详细介绍tcp和udp有什么区别
    tcp和udp的区别有:1、udp是无连接的,tcp是面向连接的;2、udp是不可靠传输,tcp是可靠传输;3、udp是面向报文传输,tcp是面向字节流传输。  UDPUDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的......