IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 1-2 【实验】02-前台JS验证审计+绕过 -> 正文阅读

[网络协议]1-2 【实验】02-前台JS验证审计+绕过

上传漏洞绕过,本质上跟我们上一篇讲的SQL注入绕过,没有本质区别,SQL注入绕过是绕过后台对一些特殊函数、特殊字符的过滤,那么上传漏洞其实也一样,绕过后台对上传文件名称以及内容的一些过滤,所以说,这两者漏洞之间,我们抓包的话,会发现,这两个包里面的内容,其实差不多,要么get请求,要么post请求,那么对应我们上传漏洞,其实

post请求内容,分别对应请求头,请求体,所以说,我们上传漏洞和注入漏洞,抓包之后,它http请求,没有太大区别,我们之前讲的,web漏洞,都是发生在http请求里面,是不谋而合的

我们这篇文章,将讲述文件上传,前台和后台,将如何绕过,对我们上传文件的一些校验

在这里插入图片描述

今天我们要用到的实验环境是upload-labs,我们将通过这个靶场的漏洞来举例,这个靶场讲完之后,大家,对这个上传漏洞绕过,会有一个非常深刻的认识

我们今天讲第一个例子,pass-01

虚拟主机是能够将apache做成可以通过多个域名进行访问的,我们介绍一下,虚拟主机,它的配置方法,在apache里面配置虚拟主机的话,我们需要修改apache的配置文件,在conf里面,我们首先要修改httpd.conf这个文件,这个文件是apache最主要的一个配置文件

在这里插入图片描述

打开,修改两个地方,第一个地方,在29行,将vhost_alias_module,前面的注释给去掉,让它有这个模块

在这里插入图片描述

第二个地方,是我们要加一个配置文件,我们搜一下,ctrl+f,httpd-vhosts.conf,

在这里插入图片描述

我们要将这个配置文件,在conf下面有个httpd-vhosts,这个文件,要把它前面这个#给去掉,让它包含这个文件,就是说,接下来,我们要修改这个文件的配置

在extra里面,有一个vhosts,打开,我们就可以配置虚拟主机的内容了

在这里插入图片描述

其中NameVirtualHost,我们默认端口是80,其实apache在默认的时候,也是这个配置,我们不要动

下面,我们要去配置这个主机,我这里配置两个,第一个叫VirtualHost *:80,下面ServerName,每个虚拟主机都有这个配置文件,它的根是这样的

在这里插入图片描述

它里面的一些参数,ServerAdmin可以随意设置,不太强制要求,DocumentRoot是配置,我们当前虚拟主机的网站的根目录,ServerName就是你访问的域名,ErrorLog、CustomLog指的是,一些日志文件,按照默认的来写,就可以了

下面一个,我们可以接着配置一个虚拟主机

在这里插入图片描述

DocumentRoot我们要注意一个地方,这两个文件夹一定不要有一个父子级的关系,比如说这个地方你写了sqli,那下面这个地方你写sqli下面的某个文件夹,那是不行的,这会报错的,就是说这两个文件夹,它是平级的,其他的没有什么特别的地方的,这个是虚拟主机的一个基本配置

现在开始正式讲一下上传的绕过,我们先正常的尝试一下,去上传一个php的木马,这个木马是一句话木马

在这里插入图片描述

<?php是php固定的一个语法,你要写php代码,要正常解析的话,必须要这么写,

后面?>是结尾,是相互呼应的,其中@eval是要执行,我们里边传的参数内容,会把它当作php代码来执行,$_POST是接收我们,post参数,参数的名称叫margin

在这里插入图片描述

就相当于我们在浏览器里面输入,一个post请求,?margin=xxx

如果说是get请求,我们这里写$_GET,但是我们用post就可以了,这样子将我们传递的参数,或者命令就可以执行,这样能起到远程命令执行的效果,这就是一句话木马的作用

一句话木马能够帮我们实现,目标服务器的一些文件的管理,数据库的管理,还能生成一个虚拟终端,可以执行一些命令

当我们知道一句话木马的作用,我们就往服务器上传一句话木马,因为传上去之后,可以用中国蚁剑连接一下,那就能够获取服务器的一个WEBshell权限

我们浏览、打开、上传

在这里插入图片描述

说我们该文件不允许上传,请上传.jpg|.png|.gif,根据我们学sql的经验,我们可以知道,这个时候,我们可以抓包看一下,整个http的样子是什么

抓包的工具还是,我们的bp,启动BP

在这里插入图片描述

在浏览器代理设置那一块,要注意,不使用代理框要空,他这里默认会有localhost、127.0.0.1,如果说,大家访问网站的时候,通过127.0.0.1的方式去访问,这个地方,如果不注意的话,写上127.0.0.1和localhost,那这个时候,我们抓包是抓不到的,这个地方,默认不使用代理,所以我们把他删掉就可以了

在这里插入图片描述

BP的作用,正常我们的浏览器是可以去访问我们的服务器的,BP设置8080端口,WEB设置8080端口,这个时候,我们开启代理之后,浏览器会找到我们的代理,先把请求发到代理上,代理我们像SQL注入一样,修改一些内容,修改完之后,再把包转发给我们的server,server收到包之后,会进行处理,处理完之后,server会把包发给BP,BP处理完之后,会发给我们的浏览器,其实,我们用到的是在浏览器和server之间,加上个BP,然后进行抓包,进行修改,这个概念

在这里插入图片描述

现在,我们来实验一下,如果发现BP有垃圾包,可以点off,自动过滤,好,我们现在开始抓包,is on

抓包之后,可能又接着来垃圾包的内容,我们一看success、firefox.com,我们直接forward,OK,这个时候,我们点上传

我们forward,其实,没有抓到包,history里面也没有,根本就没有我们想要的包

在这里插入图片描述

这个时候,我们就要分析一下,F12,控制台,这边有个网络,这个网络里边,我们可以看到

在这里插入图片描述

我们所有的请求,比如,html的请求、CSS的请求、JS的请求,这个XHR是ajax的请求,上传肯定是要用post请求,我们在XHR里面可以抓到

在这里插入图片描述

但是,却没有,这个时候我们选择JS,我们刷新一下

在这里插入图片描述

我们发现JS里面是有的,它的请求是get,状态是200,这个没有问题

css请求也是有的

在这里插入图片描述

xhr请求没有,正常,我们还没有开始请求,上传

在这里插入图片描述

发现没有,没有就说明点上传,它没有发起http的请求,那这个时候,我们就要想弹框是怎么来的,这个时候,我们就要讲到,上传验证分为前台验证和后台验证,前台验证的目的是为了提高用户的体验,比方说,我们点一次,就要往后台跑一次,后台也是要校验这些后缀名,前台也是要校验后缀名,但如果使用前台校验,会提高反馈的速度,要不然我们http请求到后台,后台在返回回来,时间是比较长的,一,是可以降低服务器的压力,第二个是可以提高我们的速度,所以说,是有前台校验的

后台校验是,我点完上传之后,会把包发到后台进行校验,两个目的是不一样的,后台校验主要是为了安全性

所以说,这个地方,有可能是前台校验吗,我们右键查看网页源代码

在这里插入图片描述

查看完之后,我们发现有很多乱七八糟的东西,对我们来说,没有什么用,对我们来说,这是我们左边导航栏的一些内容,没用

后边就是我们要用的内容了

在这里插入图片描述

选择要上传的图片,这是form请求,这个form请求,有两个input,叫input_file,我们上传文件的控件,另一个叫button,我们点上传按钮,其中,onsubmit,是我们在点上传,所触发的一个方法,这个方法,可以理解为回表方法,当我们一点上传这个按钮,就会调用return checkFile()的方法,return checkFile()是一个js语法,这个onsubmit的作用是,在我们post提交之前,做一些跟我们form表单,校验相关的一些事情

比如在上传文件的时候,我们不选中文件,直接上传,这个时候,有可能提示我们文件为空,不能上传,这和我们平时在网页的思路是差不多的,就是为了在提交之前,校验你提交的合法性,onsubmit,就是做这件事情的,将这个checkFile的执行结果,返回给onsubmit,要么是true,要么是false,这两个结果

接下来,我们讲一下checkFile是什么意思

在这里插入图片描述

checkFile函数被script标签包裹,类型就是JS,onsubmit会把代码跳转到这里,去运行代码,见名知意,getElementsByName,get就是获取,element是元素,by是通过,name就是名称,name就是对应着upload_file,getElementsByName不仅能获得file的内容,password的内容也可以获取,获取完之后,它是个数组,获取下标为0的值

如果file等于null,或者为空的时候,那就提示你选择上传文件,到return checkFile(),这个时候,我们submit就会中断,就不会发送到后台

var allow_ext,var是定义我们的变量,js的固定用法,等于双引号里面的.jpg|.png|.gif,就是我们刚才在点上传的框

定义完这个类型之后,提取文件上传的类型,file就是我们刚才,我们在空键获取的类型,substring截取字符串的意思,file.lastIndexOf("."),找到最后出现点的地方,比如说,我们a.php,是不是就出现点了,最后出现的位置只有一个参数,其实它可以加多个参数,加两个参数,一个是起始位置,一个是结束位置,如果说,substring只传一个参数,就从这个参数,往后到结尾,如果说,有10个参数,这个地方,我们取的是5,从5开始到结尾,所有的字符串,我们把它都取出来,这就是截取字符串的意思

我取的上传文件类型,点往后的内容,我都取出来,就是文件的后缀名,取出来之后,我们就判断,文件类型是否是allow_ext,允许的后缀名

allow_ext.indexOf(ext_name) == -1,查找这里面的内容,有没有在allow_ext里面,如果有,返回的肯定不是-1,indexOf查找它第一次出现的位置,我们可以百度一下indexOf,js有很多函数,如果不会,可以通过百度查找,或者是不确定,javaScript indexOf

在这里插入图片描述

没有问题哦

如果有的话,返回位置,没有的话,返回-1,其实就是为了判断上传的类型,后缀名,有没有在这里面,如果有return true,如果没有,就return false,它这里没有写return true,所以默认就是return true

这个地方,我们就知道,是通过前台js验证的方式,来判断文件上传的类型

我们接下来讲一下这个地方怎么绕过,其实,我们知道http请求的时候,把index,请求完之后,它在返回页面的时候,它这个包,会返回这个页面,这个包,我们是可以抓取到的,在返回包里面,把这个内容,给删掉就可以了,我们来试一下

在这里插入图片描述

拦住之后,我们直接点forward,或者转发到repeater

在这里插入图片描述

forward回来之后,就是response,我们找到这个地方,这个地方不是return false吗,我们有两种方法,一种是把
checkfile的代码,全部删掉,直接return true,但是,本人BP不支持这个功能,我改成在F12界面改,点Edit

在这里插入图片描述

这个时候,我们点上传

在这里插入图片描述

返回的是一个image标签

我们来分析一下,点完上传之后的包

在这里插入图片描述

包的内容和我们上面讲的一样,唯一的区别就是image的区别,content-Disposition就是对请求的描述,它的name就是对upload_file,input里面是什么,filename这个地方就显示什么,content-type就是你上传数据包的类型和内容,这些不重要

这个时候,我们F12,点一下

在这里插入图片描述

这个时候,它的src就是…/upload/yijuhua.php,就是我们刚才传的一句话木马的路径,…/代表上一级路径,也就是它当前的路径应该是http://192.168.42.138/upload/upload/yijuhua.php,没有返回404,说明我成功了

在这里插入图片描述

已经在目标服务器上了

接下来,我们用蚁剑连接一下,右键添加数据

在这里插入图片描述

加上我们访问的目标文件的路径,密码margin,菜刀的本意是用来做网站管理、维护的,然后,我们在网站里面加一个木马的后门,然后输入,它的参数,就是木马里面的参数,我们点添加

在这里插入图片描述

添加之后,会生成一条记录

在这里插入图片描述

双击之后,我们就能够获取服务器上,所有的一些文件
在这里插入图片描述

这个时候,我们可以进行删除,我们也可以上传文件,也可以下载文件,然后也可以编辑
在这里插入图片描述

它里面的内容,我们也可以看到
在这里插入图片描述

所以说,他是一个网站管理的功能,而且它可以使用虚拟终端,我们可以执行一些命令,相当于我们windows里面的命令行,whoami
在这里插入图片描述
这个是相当的方便,可以管理我们网站的功能

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:56:03  更:2022-03-08 22:57:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/5 13:31:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码