广州建设交易中心网站,深圳网站建设制作品牌公司,上海智能网站建设,小程序多少钱一年靶场搭建
当我们考虑到攻击他人服务器属于违法行为时#xff0c;我们需要思考如何更好地保护我们自己的服务器。为了测试和学习#xff0c;我们可以搭建一个专门的靶场来模拟文件上传漏洞攻击。以下是我搭建靶场的环境和一些参考资料#xff0c;供大家学习和参考#xff0…靶场搭建
当我们考虑到攻击他人服务器属于违法行为时我们需要思考如何更好地保护我们自己的服务器。为了测试和学习我们可以搭建一个专门的靶场来模拟文件上传漏洞攻击。以下是我搭建靶场的环境和一些参考资料供大家学习和参考也可以自行探索相关内容。
使用腾讯云轻量应用服务器的Linux版本时考虑到环境要求较为严格自行搭建可能存在诸多错误。可以简单地通过拉取他人封装好的docker镜像来快速部署。 docker pull c0ny1/upload-labs docker run -d -p 8289:80 c0ny1/upload-labs 在启动之后请务必前往腾讯云控制台进行防火墙规则的配置否则可能无法正常访问。你可以使用自己配置的IP地址和端口号替换访问地址http://ip:8289。 系统可以正常启动。然而当尝试上传文件时系统会提示找不到所需的upload目录。为了解决这个问题需要通过docker容器控制台手动新增一个upload目录。 进去之后执行下命令 mkdir upload chmod 777 upload 当下一切运行正常靶场已成功搭建请牢记在学习完成后请勿攻击他人的服务器。这一点至关重要切记、切记、切记。
文件上传漏洞
靶场共设有20个关卡每一个关卡都代表一个不同的漏洞案例。在这里我将选择几个典型的案例与大家分享和学习。那么我们现在就开始吧
upload-labs靶场攻略
为了避免长篇文本对大家造成干扰我已经准备了一张简明的流程图帮助大家快速理解。请大家先看一下这张图相信你们会觉得一切都变得非常简单。现在我们准备出发了请系好安全带。 接下来我们的所有任务都依赖于上传一个或多个文件来访问服务器配置信息。攻击脚本的设计也极其简单其目标同样明确只需通过其他途径访问我们的攻击脚本并成功执行即可。
?php
phpinfo();
?当我们谈论获取信息的用处时是否可以用于攻击实际上我们的主要目的是执行脚本。对于脚本的内容并不重要关键是能够顺利执行。你可以随意替换脚本的语句例如像蚁剑的一句话脚本来获取shell。这里只是为了演示攻击的目的而已。
下面我们开始讲解一下如何使用靶场请注意每个页面都配备了查看源码和查看提示的功能。如果查看源码后仍不清楚如何进行攻击可以根据提示逐步闯关。那么让我们开始吧。 前端页面校验漏洞
我们先看下源码 当我们审视这段代码时可以注意到这里仅仅是在前端进行了一个基本的后缀校验。 那么我们可以选择在不依赖于工具的情况下通过修改前端代码以移除这一验证步骤来实现上传或者手动修改请求以将文件后缀改为.php的方式来进行。我们可以先从简单的方法开始。 接下来进行删除操作并保存文件随后再次上传我们的脚本文件。 请保存更改后确保刷新页面以便接口能够识别我们上传的以.php结尾的文件。 由于这并非一张图片因此它无法显示。因此请右键复制图片路径以查看。操作已成功执行。 后端校验文件类型漏洞
当然即使是最差劲的公司也不能仅仅依赖前端进行校验因此第二个阶段就开始涉及后端操作。现在我们继续查看源代码 后端的主要功能是获取上传文件的类型。要修改文件类型我们需要使用Burp Suite工具进行拦截。仅仅改变文件后缀是不够的因为这里传输的文件类型是通过Content-Type标头传递的具体来说是application/octet-stream。 当系统后台基于文件类型进行判断时我们只需调整文件类型以符合后台校验的要求具体如下所示 不出所料我们依然会发现上传成功的情况。 剩下的步骤是右键点击打开图像文件的地址。在接下来的关卡中我们不再需要演示查看PHP信息只需通过验证即可确保我们的代码成功运行。 老版本文件后缀
这一关如果发现无论如何都无法有效进行校验那么最好的做法是直接限制可上传文件的后缀名。然而单纯依赖文件后缀名来进行限制也存在潜在的安全隐患。让我们深入分析一下这个问题。 在早期的Web开发阶段PHP文件常以.php3结尾。这是因为旧版PHP仅支持.php3后缀而不直接支持.php。尽管现代PHP版本不再强制要求特定的文件后缀仍有一些网站因为历史或兼容性原因仍在使用.php3后缀。为了支持这些老版本网站Apache默认配置支持解析.php3后缀的PHP文件。
现在问题就变得非常简单了我们只需上传那些不在后缀限制数组中的文件然后一切搞定。 利用Apache配置文件
当谈到上述情况时一些人可能已经认识到不再可以随意使用简单的文件后缀名。我需要全面审查并加强这方面的限制这样我们就进入了第四阶段。现在让我们来仔细查看源代码。 当然我们不必局限于上传 PHP 文件。这次我们可以利用另一个配置文件的漏洞进行攻击。
.htaccess 是一个用于配置 Apache Web 服务器的配置文件其名称是 hypertext access 的缩写。它允许网站管理员在没有修改主配置文件如 httpd.conf的情况下通过在网站根目录或特定目录下创建 .htaccess 文件来进行配置和控制网站的行为。
.htaccess 文件可以包含各种指令和规则用于控制网站的访问权限、重定向 URL、设置自定义错误页面、启用压缩、禁止目录列表、限制访问速率等等。通过 .htaccess 文件网站管理员可以在不需要服务器级别访问的情况下实现对网站的灵活配置和管理。
需要注意的是.htaccess 文件只对 Apache Web 服务器有效而且其配置可能会影响网站的性能特别是如果包含复杂的规则或需要频繁读取文件时。
那我们先写脚本后传文件。
FilesMatch loudong.jpg
SetHandler application/x-httpd-php
/FilesMatch这句话的意思就是当访问到名为 loudong.jpg 的文件时Apache Web 服务器会将其当作 PHP 脚本来处理而不是简单地作为静态文件直接返回给用户。
继续上传jpg图片尽管这个文件实际上是一个伪装成图片的攻击脚本。 大小写漏洞
当人员发现漏洞后简单地添加一个限制即可解决问题。因此第五关的解决方案是直接禁止上传.htaccess文件。 当然他未能察觉到另一个问题。再次查看源代码。 文件名都是小写的但是我们需要确认一下PHP是否支持大写文件名。我们可以试一试直接拦截请求并修改文件名来测试。 空格漏洞
在检测大小写后经过详细查阅源代码后发现没有对空格进行限制。如果确实没有空格限制那么文件后缀的限制也将失效。 我们使用Burp Suite拦截请求进行发送。我在文件名后面自行添加了一个空格因为默认情况下并没有文件名。 最终成功上传文件。关于绕过文件后缀检查的方法还有很多我们不打算逐一列举。问题主要在于解析代码时的不严谨通过利用其中的某个漏洞直接上传我们的脚本文件即可。
文件包含漏洞
当这张图片不再只是简单的视觉元素时它前面看起来可能十分寻常然而实际上它的后半部分包含了一段代码。 这一关的源码看下 当我们只读取前两个字节时通常是为了获取图片文件的文件头信息这些信息包含了关于文件类型和格式的重要数据。接下来我们可以打开这三个图片文件使用记事本编辑来探索它们是否有共同的特征或属性。 这一部分还有另一个需要注意的地方那就是文件包含漏洞。你知道文件包含漏洞指的是什么吗
?php
/*
本页面存在文件包含漏洞用于测试图片马是否能正常运行
*/
header(Content-Type:text/html;charsetutf-8);
$file $_GET[file];
if(isset($file)){include $file;
}else{show_source(__file__);
}
?由于直接使用 include 函数并且未对 $file 参数进行充分的过滤或验证攻击者可以构造恶意请求包含任意文件甚至是远程的恶意文件。那么我们上传文件后将文件地址拿到然后通过这个文件包含漏洞试一下结果显示确实存在此风险。 二次渲染绕过
这一关源代码很多因此我决定仅复制并分享关键代码供大家参考。
//使用上传的图片生成新的图片
$im imagecreatefromjpeg($target_path);//使用上传的图片生成新的图片
$im imagecreatefrompng($target_path);//使用上传的图片生成新的图片
$im imagecreatefromgif($target_path);这一步骤的主要目的是确定用户上传的图片格式并重新生成新的图片。在这个过程中需要特别关注 GIF 图片的处理。GIF 图片在重新渲染后改动很小主要原因是其压缩算法的优化和格式的固定限制使得大部分修改只影响到少量的数据部分而不会对整个图像文件造成大幅度的变化。
我们需要对流程进行改进首先请确保不随意修改图片文件而是先上传并下载图片再与本地图片进行对比。识别未变化的部分然后逐一复制粘贴代码如有错误则调整位置。 最后我们在这里改下 上传后继续使用文件包含漏洞 条件并发竞争
在这个阶段仅仅是将上传的文件保存下来然后进行校验、重命名并移动文件。如果校验失败则会将文件删除。表面看起来似乎没有问题但实际上存在许多潜在的漏洞。 首先未进行文件类型验证便进行了保存操作随后才进行验证并删除。这个漏洞为我们提供了攻击服务器的入口。我们可以利用Burp Suite拦截请求并发起集中攻击。只要在删除操作执行之前我就能够访问到我上传的文件便能执行脚本。现在开始行动。 当我们成功拦截了请求后接下来的步骤是配置并发请求的开发工作。我们计划从默认的10个并发开始进行攻击。 观察这里的攻击效果尽管它们通常会被及时清除但只要我们成功访问其中一个攻击就可以算是成功的。让我们开始吧。 讲解完了如何利用文件上传攻击服务器后接下来的重点在于理解如何有效防御这些攻击。在服务器端实施良好的防护措施至关重要因为防守胜过进攻。接下来我们将根据上述经典案例来探讨如何加强服务器的安全防护。
EdgeOne防护措施
假设我们无法对程序员编写的代码进行检查或者我们本身没有进行代码审计的能力那么我们只能依赖外部保护措施。在这种情况下今天仍然建议采用EdgeOne来解决这些问题。为了让大家更清楚地理解我也简单绘制了一张图作为参考看完图后问题就变得非常简单了就像在架构中使用一个可插拔的中间件一样轻松应用即可。 文件漏洞防护手段
在前面我们详细讨论了多种攻击方法现在让我们综述一下应该从哪些方面进行防护
未限制文件类型允许上传任何类型的文件包括可执行文件。未进行文件内容检查未检查文件内容是否包含恶意代码。未限制文件上传频率刚才我们演示的时候可以看到通过频繁上传文件达到条件竞争的状态。
除了前面提到的措施外还有一个需要注意的地方即文件大小的限制。考虑到我们拥有的是自己的服务器资源我们可以避免不必要的流量消耗。因此我们也需要在这方面进行适当的控制。
接下来我们将逐一实施这些防护措施你将会看到通过最小的调整我们能够达到最佳的安全效果。
文件敏感后缀检查
如果你打算上传Webshell文件内容必定包含脚本内容。因此我们需要确认EdgeOne是否提供相关的检查和校验功能。一旦你购买了EdgeOne的标准版无需进行任何修改即可立即上传文件并检查其是否能够有效拦截。 在一般情况下EdgeOne应该会拦截这类请求但我们需要再次查看样本日志确认是否确实有请求未被拦截。 当我们注意到这一点时我们发现请求不仅被捕获还被识别为防护规则但实际上处于观察状态而非直接拦截状态。这一点很重要因为默认情况下EdgeOne仅观察并不会直接拦截请求。我们需要进一步查看这个规则的ID了解其具体功能。 首先进到自己配置的站点后找到安全防护-web防护-托管规则-筛选规则id 这个问题相当繁琐因为在样本日志中当前规则id的具体限制并不直接显示出来需要我们自己去查找。不过最终我们确实可以找到这些信息。通过这种方式我们可以识别文件后缀这样一来前端和后端在处理文件后缀时就无需编写大量的限制代码了。
事实上前几个案例中的文件上传漏洞主要都是由于文件后缀问题导致的。EdgeOne技术能够通过一种简单的方法解决程序员代码不严谨的问题。
当涉及到相关的防护请求时请记住关闭全局观察模式这样可以让您单独配置每个规则的拦截方式。因此现在我们将全局观察模式关闭。 那么让我们再次发起请求以确认是否能够有效拦截这些请求。 难道我们表演翻车了吗怎么还是观察模式我本以为我们应该处于拦截请求的状态而不是仅仅处于观察模式。这涉及到一个防护等级的问题我们需要检视一下默认设置可能偏向宽松了一些。 那么我们需要调整防护等级以确保它能够拦截那些不应该直接访问后台的请求。然而请注意我们不能单独设置一个规则如果需要进行设置也必须按照父类规则的方式进行设置。让我们仔细查看一下 当然那么我们现在可以尝试上传一个文件以便查看结果如何。 在实际应用中效果非常显著。不再演示剩余的各种奇葩敏感后缀因为最终的拦截结果都是一致的。对于企业或个人而言只需简单操作两次按钮开关使用体验也非常出色。
伪文件代码注入检查
当我们试图规避后缀检查时我们制作了一个文件其后缀名为.jpg但实际上是一个伪装的图片文件。让我们首先验证一下这个简单的伪装文件是否有效。 当文件内容实际上是PHP脚本时尽管我们的文件后缀被设置为.jpg并不属于敏感后缀文件因此可能可以规避EdgeOne的后缀规则检查。因此我们可以尝试上传并查看是否能够成功执行。 尝试并未取得成功。那么我们来看看他被那个安全防护规则拦截住了。 当我们成功绕过了敏感后缀的防护检查那么现在需要进一步分析的是这是哪一个具体的规则被规避了。 这防护措施真的蛮不错php脚本已经被拦截了。
那么当我们测试更高级的伪装文件时比如在一个看似正常的图片文件中嵌入代码脚本防护规则是否能够检测到它们呢在我们探讨绕过图片二次渲染的方法时我们进行了实验测试了在 GIF 文件中注入 PHP 代码的情况具体如下图所示 当然我们可以看看是否有办法绕过这个防护措施呢不过看来防护措施还是能够有效阻止的。 看看这些样本日志因为它们都属于同一个防护规则ID我们就不再重复查看了而是继续探索其他测试手段。 除了上述代码注入来防止图片渲染外如果没有进行二次渲染另一种方法是直接在图片末尾添加内容。这种操作简单接下来我们看看它是否能提供额外的防护效果。 演示虽然出了点问题但没关系。如果防护不住也不要紧我们还可以联系腾讯客服赶紧反馈情况。我会把所有的测试文件和网站链接都交给他们让他们测试一下找出问题所在。 经过长时间的深入沟通和分析我们最终成功帮助他们发现了一个问题剩下的就交给他们自行解决了。 这里为什么没有演示条件竞争防护呢难道不应该增加一个上传频率规则吗我不确定大家是否还记得条件竞争攻击是通过上传一个PHP脚本然后在检验通过的短暂时间窗口内发动攻击的。首先PHP脚本必须成功上传但EdgeOne已经拦截了这种脚本这样怎么能有效地实施后续的上传速率限制呢
文件上传速率限制
之前我们讨论过避免演示条件竞争攻击但现在为什么又有上传速率限制呢这个限制是为了防止频繁的文件上传导致服务器网络IO异常拥堵。这其实涉及到两个问题一方面我们不是在谈论通过脚本攻击服务器而是用户可能通过频繁上传文件来占用服务器资源。只要上传足够频繁就有可能使服务器无法响应其他用户的访问进而导致网站宕机的情况发生。这种情况非常严重影响可能相当恶劣。
话不多说让我们来进行演示并设置一些限制。由于上传脚本文件会被拦截因此我们将上传一个正常的图片来进行演示。同时我们将使用Burp Suite来频繁测试文件上传攻击服务器具体如图所示 然后我们直接发起并发请求。我们计划按照以下几个测试并发规则进行测试每秒5、10、15、30和100次。首先我们会使用10次每秒的并发量进行测试然后再尝试100次每秒的并发量。 我们多次发送请求后请查看一下服务器资源的情况。 这里服务器的流量封装上涨尽管网站仍可正常访问但我们的目的已经实现大量消耗了网站的流量。 可以查看EdgeOne的统计分析这次不仅限于Web安全分析而是重点在指标分析上。我们可以观察到异常流量大量请求服务器面对这种情况我们应该采取哪些措施 可以再看下面的请求分析。如图 首先通过分析该图我们可以确定请求的IP地址及其对哪些URL进行了频繁请求这些信息将为我们制定有效策略提供基础。
尽管这种方法并不是最优选择但我们可以将客户的IP地址加入黑名单以限制其访问我们的网站。这种方法虽然笨拙因为客户IP可能会变动导致我们需要不断更新配置但至少是一种可行的措施。 然后我们接下来要做的是将IP地址添加到黑名单中这样可以简单地增加安全防护措施。当然你可以根据个人需求添加IP地址段。在这个示例中我仅添加了一个IP地址作为演示。 好的保存完毕。接下来我们试试发送请求看看是否已经被成功拦截。 当所有请求都被成功拦截后我们可以再次查看一下样本日志。 没错这个规则ID就是刚刚由我们生成的唯一标识符。 当考虑到这一情况时第二种方法即为限制请求的频率。 这里的限制过于宽松我们需要收紧一些。一个人不可能请求得这么快。 当我们继续发送并发请求进行测试时可以观察到EdgeOne已经能够识别到后续请求并且使用了JavaScript挑战脚本而非直接由服务器响应。 当我们检视样本日志时同样可以观察到这一情况。 这是一个简单的全局限制。当然某些企业用户的网站可能要求允许客户进行大量点击这就需要考虑了。但不用着急我们可以精确控制这个过程。接下来我们来讨论如何设置针对特定URL的请求限制。我们根据指标分析异常请求的地方来设定相应的控制策略。你可以根据个人需求自行设置限制。 我在这里设置了所有涉及文件上传路径的限制。我们需要再确认一下是否已经完全拦截了所有这些路径。例如/Pass-10/index.php。 看起来确实成功阻止了潜在的攻击。至于上传速率的问题我们就到这里讨论吧。
文件大小限制
速度有限制不能让客户上传过大的文件。我们只需上传图片并非视频所以设定个上限是合理的比如不超过2M这个范围应该适应大多数需求。现在我们来具体操作一下。需要注意的是这个操作不是在Web防护层进行而是在站点加速层进行的设置。 为了更好地进行演示我不会使用全局配置而是采用差异化配置的方式。这意味着我们会根据业务需求单独配置特定路径下的文件上传具体如图所示。 当我们试着上传一个非常大的文件以便测试上传过程。 结果是网站被拦截了这让我感觉好像我的网站无法访问一样。看起来我需要设置一下自定义响应页面以免让访问者误以为网站不稳定。 我们需要在这里进行响应页面的设置内容十分简洁明了完全遵循官方网站提供的示例进行展示。 上述页面已创建但尚未与413状态码绑定。接下来我们将进一步完善刚才提到的规则。请参考下图 当我们再次审视其效果时可以使其看起来更加稳定这里可以稍微美化一些确保在满足自己需求的同时外观也可以更为优美具体如下图所示。 截至目前针对文件上传的所有潜在漏洞攻击已经得到有效防范但是道路漫漫修行需持之以恒少年仍需不懈努力。
总结
通过本文我们深入探讨了文件上传漏洞攻击的多种案例和防范措施以及在搭建攻击靶场时的实际操作。从前端和后端的校验漏洞到利用Apache配置文件和文件包含漏洞的攻击方式每一步都展示了安全防护的重要性。
在学习和实践过程中我们不仅仅关注如何进行攻击更着重于如何保护自己的服务器免受此类攻击。我们使用了EdgeOne作为一个解决方案的示例展示了如何利用其提供的防护规则来有效防御文件上传漏洞。
无论是在靶场搭建过程中的细节操作还是在攻击案例的分析过程中安全意识和防护措施的实施都显得至关重要。通过本文希望读者能够更深入地理解和应用这些安全原则以保护自己的网络和服务器免受攻击的威胁。
在网络安全的道路上学习永无止境。让我们共同努力不断提升技能保障网络环境的安全与稳定