我的编程空间,编程开发者的网络收藏夹
学习永远不晚

文件上传之,waf绕过(24)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

文件上传之,waf绕过(24)

上传参数名解析:明确哪些东西可以修改

content-disposition:一般可更改    表单的数据 

name:表单参数值,不能更改    表单提交的值

filename:文件名,可以修改    上传的文件名

content-type:文件mime,视情况修改   上传文件名自带的参数类型

mime可以作为一个验证条件,验证mime来判断你个文件一个合法性的时候,可以通过更改mime来达到一个伪造,比如上传一个php文件,这时候可以更改为图片类来尝试绕过mime验证。

waf验证判断形势,主要是这样的一种形式是判断,检测文件里面的代码,如果代码立马有后门代码检测到会拦截,这个代码怎么编译绕过是后面要学的,我们只讲文件上传所以这里先不管它,文件上传一般检测的都是这种有参数后面有数据的,四个参数值比较关键的是filename,文件名,文件名里面包含了文件的后缀。

前期upload第二关的时候,判断的方式就是mime的类型的绕过,绕过miem是图片类型就可以上传,没有验证后缀,这是代码的判断,我们在来探针一下防护软件是怎么判断的,现在第二关上传一个图片上去,抓住数据包,mime满足就可以上传,所以把上传的文件名字改成php格式,本来这是可以正常上传成功的

但是由于安全狗的原因被拦截了。改了之后php之后不能上传,所以他对那个文件名后缀绝对是有一个检测的,

 安全狗这里就有php后缀检测,所以拦截。绕过方法,就是检测不到这个php,要么换一个脚本类型能执行出php,最终目的都是能执行出脚本的后缀,php只是一种,asp也可以,因为这个网站是php所以php作为演示。

两只思路,第一种是让他检测不到成功上传一个可以执行出php的权利,尝试一下猜想,在中间加上一个空格ph p,返回源代码没有那个安全狗关键词了,文件也成功上传了,但这个文件又不可以直接访问了,因为多了一个空格之后,访问网站就显示成

 两个浏览器访问返回结果,这样子上传也还是张图片,没有当作脚本,没有执行出来脚本,也不可以。

之前绕过是在php后面加上点和空格,现在这样上传,安全狗还是拦截了。

常见绕过方法

数据溢出,放匹配的

这个原理借助的溢出漏洞,这是老师自己取的名字,就比如让你在一万个人里面找一个人,几率很小,我们把这个数据搞大,让程序去一个一个匹配也是这样,它不会排除就挨个去匹配,数据太多了,程序会停止或者崩溃,数据溢出就是用的这个方法,因为他匹配的就是名字,所以在后缀名之前名字开始溢出比较好,乱写一堆一直重复,

 apache服务被迫停止工作,但是数据太多了,数据包没有发出去,所以这文件名那个地方不要去搞,

 换一种思路,写道filename前面来,因为他会慢慢检测吗,先检测上面的content-disposition,在往下检测,检测filenam的起那么加上一堆垃圾数据,

 这样子上传成功了但是文件了没有,这个是什么原因造成的, 

 这样子在filename前面加上aa.jpg乱码绕过,但是上传的是一个aa.jpg。

再换一个地方写垃圾数据,

 写到这个name前面来,注意垃圾数据的结尾要写一个;,然后可以该修改的fielname更改为x.php,然后写够垃圾数据到不拦截看结果

 上传成功了

注意  结尾一定要加上个;,不然上传不成功。

学前面的知识为了不会乱插入,插入到不该插入大地方去,比如name:表单参数值,不能更改

第二种  符合变异,放匹配("  '   ;)

抓住数据包,数据包里面的符合都是有讲究的,冒号就代表的后面是值,分号加上结尾了一对一。

而name="file_upload",这个呢是数据包自带的冒号里面代表的是可以更改的不固定的, filename="1.gif 这个里面的值是可以更改的所以是双引号,基本程序开发里面都有单引号双引号,都可以,这是第一个可以变化的地方。

第二个是分号,他代表一个语句的结束,

 而这个最后面没有分号,意思就是截止了,如果后面有分号就表示可能还有。

这里我们的绕过思路,先把jpg换成php格式,现在最好加上分号加一堆乱码试试能不能绕过,并不能,再把括住php的双引号改成单引号试试,说不定安全狗加上针对的双引号,试一下也不行。

这里在去掉后面的一个双引号只留下前面的双引号,就不闭合了,这样子就会把 "  当作filenme的值,而不是后面的qq.php,安全狗匹配的时候,我们猜他只匹配双引号里面的,他要去匹配的话就只有三种情况,第一种是"qq.php,第二种是比较只能的他不管引号问题,还是直接匹配 qq.php,第三种它不知道该匹配谁就没有匹配,具体出现哪一种,还需要具体测试,如果是第三种就能实现绕过,  

这个方法上传成功了,那么它就是第三种。这是因为安全狗在后面找另一个双引号,但是它找不到,所以就没有匹配。把两个双引号都去掉也可以绕过,安全狗现在是什么匹配机制,就是单引号双引号里面的东西,不写就能上传成功。相当于没有接收到。

但是如果在去掉前面的双引号留下后面的,还是会被拦截,所以在老师那个版本的时候,安全狗的拦截规则应该就是找最后的一个双引号,然后把前面的东西取出来匹配。

所以还可以写成"x"x.php,这样子也会上传成功,上传一个x.php的文件。

第三种,数据截断-防匹配(%00;换行)

开始思路

这个我们数据包上,恢复到最初的命名,在双引号里面改成x.php%00.jpg,这里%00要进行一下url编码,不然上传到网站服务器,网站识别不出来%00是截断都意思,得编码成网站可以识别的url格式,因为安全狗也是程序,所以程序在读取到这里的时候截断符合,会不会也截断,这里上传试一下,不行。我们验证一下会不会截断,换成x.jpg%00.php 上传上传,上传成功了一个x.jpg的文件,安全狗截断了。

我们在试试x.php;%00.jpg,这里上传成功了一个x.php;  不知道可不可以执行,再换一个

x.php %00.jpg,在后面加上一个空格,上传被拦截了,我们在加上::$$DATA  ,x.php::$$DATA  %00.jpg ,试试可不可以上传成功,也不可以。

那上传一个x.php;.jpg。文件试试,上传成功了不过是图片格式文件,那换成x.jpg;php,也上传成功了还是当作php格式执行,写:就不行,这个就是安全狗,语句分号就当作结束了,所以后面的.php就没有匹配到,而数据包又把它当作正常的命名执行了,就会以最后的.php,文件执行。

换行

 这个就是很明显在php,直接换行,而在程序里面的换行后面会自动跟着一个/n,安全狗在识别的时候就识别成x.p\nh\np,所以不会拦截,上传成功了

数据包识别这种写法,但是安全狗在匹配的时候就被/n给干扰了,

怎么样都可以,全换行了数据包也能识别。

重复匹配

安全狗是匹配的filename,我们可以把filename写多一点,

这里先写两个jpg文件,第一个叫x第二个叫y,结尾加上;,表示结束。上传测试一下以那一个filename为准,上传的结果是y上传上去了,所以是以最后一个filename值为准。这也算一种递归循环,比如之前说过的php过滤一次,那些文件后缀写成pphphp,过滤一个php,刚刚好就是给php文件。

既然这里知道是以最后一个为准,那我前面写多少个filename值都无所谓了,就写多一点,和垃圾数据溢出很像但不是垃圾数据溢出,这是让他一直匹配,匹配到崩溃不管了都过去吧,最后写一个php的后缀文件,上传一下看看成功了,

 这里我们还可以

把前面的值复制到filenam里面来,这样子安全狗在匹配的时候,先匹配content,正常继续匹配,匹配filename里面又匹配到了content,后面看到name的值等于upload,安全狗在匹配到content相当于把前面忽略不计了,就忘了前面是filename的值,而误认为x.php,没有值给他的,没有给参数,所以就相当于绕过,但是在数据包里filename的值还是等于x.php,上传成功

这就是典型的重复数据,把数据自带的正常的数据写道filename里面去,实现x.php,给他绕过。

 把下面的值写进filename里面也不影响,不过是在后面加了一个分号;   

 上传成功了,只是名字有点不一样,但是php文件就可以。安全狗匹配到分号以为就结尾了。不匹配后面。

 

这里发现一个机遇/也可以绕过。 

测试还要一个思路解释fuzz

在百度搜索fuzz web字典     fuzzdb  都可以搜到字典

下载好一个字典,放在自己可以找到目录地方

因为刚刚测试网站是上传个php,所以我们用php的字典,打开看一下它的源码

 字典里面就写了很多种,可以支持php文件解析的后缀上传,该如何测试,把数据表发送到这个模式下

 把它作为条件去变化

 

找好路径,选择和字典

 

 数据包不能过大,过大安全狗会封主本地ip,

然后这样开始测试。

这种就是用工具去跑,我们称之为    fuzz模糊测试

最后一个知识点

安全修复

如何写出一个安全的验证形式呢,要从她的验证方式做文章,

后端验证:采用服务端验证模式    尽量不采用前端验证

后缀检测:基于黑白名单过滤    双重验证都用上

MIME检测:基于上传自带类型检测

内容检测:文件头,完整性检测

用三种更加安全,检测miem,又检查内容,

自带函数过滤:参考uploads函数

自定义函数过滤:function check_file(){}

waf防护产品:宝塔,云盾,安全公司产品等

 和一个函数get_image_pointeerl,这个只接受图片信息,就定死了必须上传一个图片上来,

对方有上传漏洞才能进行上传绕过,如果没有上传漏洞就只能上传个图片没有上面用,没有办法能判断有没有上传漏洞,因为在测试的时候就可能被waf拦截了,只能硬着头去绕过,先绕过了才能判断有没有。

来源地址:https://blog.csdn.net/san3144393495/article/details/130782850

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

文件上传之,waf绕过(24)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

phar绕过phar与HALT实现文件上传功能

这篇文章主要介绍了phar绕过phar与HALT实现文件上传功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2022-12-15

网络安全漏洞渗透测试之文件上传绕过思路案例分析

本篇内容介绍了“网络安全漏洞渗透测试之文件上传绕过思路案例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!案例一一次项目渗透时,通过往pn
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录