当前位置: 首页 > wzjs >正文

站群网站和做seo那个号网页百度

站群网站和做seo那个号,网页百度,免费做二建题的网站,成都手机微信网站建设报价单目录 一、点绕过原理 二、deldot()函数 三、源码分析 四、渗透实战 1、构建脚本test8.php 2、打开靶场 3、bp开启拦截 4、点击上传 5、bp拦截 6、后缀名增加点 7、发包并获取脚本地址 8、访问脚本 本文通过《upload-labs靶场通关笔记系列》来进行upload-labs靶场的渗…

目录

一、点绕过原理

二、deldot()函数

三、源码分析

四、渗透实战

1、构建脚本test8.php

 2、打开靶场

3、bp开启拦截

4、点击上传

5、bp拦截

6、后缀名增加点

7、发包并获取脚本地址

8、访问脚本


本文通过《upload-labs靶场通关笔记系列》来进行upload-labs靶场的渗透实战,本文讲解upload-labs靶场第8关文件点绕过渗透实战。

一、点绕过原理

"点绕过"是文件上传攻击中一种常见的绕过技术,攻击者通过在文件名中特殊位置插入点(.)来绕过服务器的安全校验机制。以下是详细的原理分析:

由于Windows系统有如下特点:

  • 自动去除文件名末尾的点:“test8.php.” → “test8.php”

  • 自动去除空格:“test8.php ”→ “test8.php”

  • 忽略大小写:“test.PHP” → “test.php”

正是因为如上第一个特点,可以构建如下攻击流程

  • 攻击者上传类似的文件“test8.php.”

  • 由于某些系统(如Windows)会自动去除末尾的点,最终存储为 “test.php”

二、deldot()函数

deldot() 是一个用于处理文件上传安全的自定义函数,主要功能是删除文件名末尾的点(.),防止攻击者利用文件命名规则绕过安全检测。它的作用是从字符串尾部开始,从后向前删除点(.) ,直到末尾字符不是点为止。比如文件名 test...php 经该函数处理后可能变为 test.php 。

在upload-labs靶场中,deldot()是一个自定义的函数,在common.h中,具体如下所示。

 接下来对这段代码进行详细注释,具体如下所示。

<?php
/*** 此函数用于去除字符串末尾连续的点(.)* 如果字符串末尾没有连续的点,则直接返回原字符串* * @param string $s 要处理的字符串* @return string 处理后的字符串*/
function deldot($s) {// 从字符串的最后一个字符开始遍历,通过 strlen($s) - 1 获取最后一个字符的索引for ($i = strlen($s) - 1; $i > 0; $i--) {// 使用 substr 函数截取字符串中索引为 $i 的单个字符,存储到变量 $c 中$c = substr($s, $i, 1);// 检查当前字符是否是字符串的最后一个字符,并且这个字符不是点(.)if ($i == strlen($s) - 1 && $c != '.') {// 如果满足条件,说明字符串末尾没有连续的点,直接返回原字符串return $s;}// 检查当前字符是否不是点(.)if ($c != '.') {// 如果当前字符不是点,使用 substr 函数截取从字符串开头到当前字符(包含当前字符)的子字符串并返回return substr($s, 0, $i + 1);}}// 如果函数执行到这里,说明整个字符串可能都是点或者循环结束都没有找到非点字符return $s;
}
?>

三、源码分析

接下来对upload-labs 第8 关的源码进行审计,很明显这一关卡又是黑名单过滤,与第6关卡一样,相对于第四关和第五关,将“.htacess和.ini”后缀均过滤了,故而无法用第四关和第五关的方法进行渗透。然而相对于第六关卡和第七关卡,缺少了一个deldot函数的处理。经过详细注释的代码如下所示。

<?php
// 初始化文件上传状态标志,默认设置为 false,表示文件未成功上传
$is_upload = false;
// 初始化消息变量,用于存储上传过程中产生的提示信息,初始值为 null
$msg = null;// 检查是否通过 POST 方式提交了名为 'submit' 的表单元素
// 当用户点击提交按钮时,会触发此逻辑
if (isset($_POST['submit'])) {// 检查常量 UPLOAD_PATH 所代表的上传目录是否存在// 只有上传目录存在,才能进行文件上传操作if (file_exists(UPLOAD_PATH)) {// 定义一个数组,包含所有不允许上传的文件扩展名// 这里涵盖了常见的脚本文件扩展名(如 PHP、JSP、ASP 等)、网页文件扩展名(如 HTML、HTM)以及一些特殊配置文件扩展名(如 .htaccess、.ini)$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");// 从 $_FILES 超全局数组中获取上传文件的原始文件名,并去除文件名首尾的空白字符$file_name = trim($_FILES['upload_file']['name']);// 使用 strrchr 函数从文件名中提取文件扩展名// strrchr 会返回从最后一个点(.)开始到字符串末尾的部分$file_ext = strrchr($file_name, '.');// 将提取的文件扩展名转换为小写// 这样做是为了实现大小写不敏感的扩展名检查$file_ext = strtolower($file_ext); // 去除文件扩展名中可能包含的 '::$DATA' 字符串// 在 Windows 系统中,'::$DATA' 是一种特殊的文件流标识,攻击者可能会利用它来绕过文件类型检查$file_ext = str_ireplace('::$DATA', '', $file_ext);// 再次去除文件扩展名首尾的空白字符$file_ext = trim($file_ext); // 检查提取并处理后的文件扩展名是否不在禁止上传的扩展名数组中if (!in_array($file_ext, $deny_ext)) {// 从 $_FILES 超全局数组中获取上传文件在服务器临时存储的路径$temp_file = $_FILES['upload_file']['tmp_name'];// 拼接上传文件的最终存储路径// 将上传目录(UPLOAD_PATH)和文件名组合成完整的路径$img_path = UPLOAD_PATH.'/'.$file_name;// 使用 move_uploaded_file 函数将临时存储的文件移动到指定的上传路径// 此函数确保文件是通过 HTTP POST 上传的,防止恶意文件上传if (move_uploaded_file($temp_file, $img_path)) {// 如果文件移动成功,将文件上传状态标志设置为 true,表示文件上传成功$is_upload = true;} else {// 如果文件移动失败,将错误信息存储到 $msg 变量中$msg = '上传出错!';}} else {// 如果文件扩展名在禁止上传的数组中,将错误信息存储到 $msg 变量中$msg = '此文件类型不允许上传!';}} else {// 如果上传目录不存在,将错误信息存储到 $msg 变量中,并提示用户手工创建该目录$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}
?>

从上图可知,源码中没有$file_name = deldot($file_ext);服务器无法实现将文件后的.过滤,所以可以在文件末尾添加一个“.”,这样就可以绕过黑名单的限制

例如:上传"test.php"文件,抓包后在文件名后添加一个点变为"test8.php.",上传到服务器的时候,得到的后缀就是"test8.php.",从而绕过黑名单的限制。当"test8.php."文件上传到windows服务器后,会被windows系统自动去掉不符合规则符号后面的内容(也就是将".php."中最尾部的点去掉),文件末尾就变回了".php", 这样文件名又恢复成为"test.php",可以成功渗透。

四、渗透实战

1、构建脚本test8.php

<?php
phpinfo();
?>

 2、打开靶场

 打开靶场第8关,浏览选择该脚本,但不点击上传。

3、bp开启拦截

4、点击上传

5、bp拦截

bp捕获到上传报文,下图红框的部分即为需要修改的文件名,需要将".php"后缀改为".php.",修改之前文件名为”test8.php“,如下所示

6、后缀名增加点

test8.php后添加一个点,变为“test8.php.”,修改后效果如下所示。

7、发包并获取脚本地址

将bp的inception设置为off,此时修改后的报文发送成功。

回到靶场的Pass08关卡,图片已经上传成功,在图片处右键复制图片地址。

右键图片获取图片地址,如下所示获取到图片URL。

http://127.0.0.1/upload-labs/upload/test8.php.

8、访问脚本

 如下所示访问test8.php脚本获取到服务器的php信息,证明文件上传成功。

http://www.dtcms.com/wzjs/520837.html

相关文章:

  • 马来西亚的网站后缀东莞网站推广哪里找
  • 网站做微信支付接口优化关键词排名seo软件
  • 今天广州白云新闻黑帽seo排名
  • 如何在招聘网站上做薪酬统计多少关键词排名优化软件
  • 办理宽带多少钱一个月排名优化方案
  • ae模板免费下载网站有哪些今日头条新闻大事
  • 免费云主机永久使用免费体验seo培训学什么
  • 重庆建设工程信息网查询平台入口官网合肥百度推广优化排名
  • 网站UI怎么做网络营销策略有哪几种
  • 自己做网站怎么别人怎么浏览seo搜索引擎优化名词解释
  • wordpress文章同步微博seosem是指什么意思
  • 做时时彩网站宝塔没有域名直接做网站怎么弄
  • 创造网站的最简单 软件是哪个来几个关键词兄弟们
  • 网站建设策划实施要素我要推广网
  • 做网站还能挣钱二十条优化措施全文
  • 北京网站名称注册证书百度售后服务电话
  • 海口制作手机网站免费浏览网站推广
  • 建设网站协议360seo排名优化服务
  • 奎文建设局网站五种关键词优化工具
  • 苹果id钓鱼网站制作搜狗网站
  • 做创意ppt网站好用的seo软件
  • 做网站收会员费违法吗网络营销方案怎么写
  • 动态网站怎么做伪静态网站官网优化包括什么内容
  • wordpress 动静分离实时seo排名点击软件
  • 自己做网站推广品牌运营推广方案
  • 广州商城网站建设公司搜索引擎推广培训
  • 日照网站建设哪家专业软件外包网站
  • 做全屏式网站尺寸是多大浙江企业seo推广
  • 上海制造网站公司嘉兴seo
  • wordpress更改网站信息中国十大品牌营销策划公司