文件上传js代码

news/2024/9/21 14:16:43 标签: xss, 安全, web安全

大家好,很久没更新了,今天空了,记录一下文件上传js代码。(自己搭建的网站,演示学习一下这种漏洞,不要做违法的事情!!!)

一般文件上传的话都是奔着getshell去的,但是一般像作者这种小白,很难去突破文件上传的限制,因为这种一旦被成功利用,攻击者将会直接拿到服务器权限。

但是针对于我们拿到网站授权,为我们的服务对象做渗透测试的时候,我们是不是可以有一些其他简单文件上传的思路,不能白白浪费这个功能点嘛~

  接下来我会用phpstudy起一个网页,来模拟一个文件上传点,针对文件上传列出可以改变页面内容的文件上传漏洞。

文件上传代码

首页

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>File Upload</title>
</head>
<body>
    <h1>Upload a File</h1>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        <input type="file" name="fileToUpload" id="fileToUpload">
        <button type="submit" name="submit">Upload</button>
    </form>
    <div id="result"></div>
</body>
</html>

上传功能

<?php
$target_dir = "uploads/";  // 定义上传文件的目标目录
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);  // 构建目标文件的完整路径

// 确保上传目录存在
if (!is_dir($target_dir)) {
    mkdir($target_dir, 0777, true);
}

// 尝试上传文件
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    // 如果文件上传成功,显示成功消息和文件访问链接
    echo "The file " . htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " has been uploaded. <a href=\"" . $target_file . "\">Click here to view the file</a>";
} else {
    // 如果文件上传失败,显示错误消息
    echo "Sorry, there was an error uploading your file.";
}
?>

有很多后缀文件都能执行xss,但我觉得本质就是,不管什么后缀,只要能执行js代码,就成!!!

弹框只是js代码的一种写法,有很多利用的写法,明显一点的,从外部服务器加载个图片,改变网站标题

那它这个网页原本内容不就被我们篡改了吗,我们可以控制网页内容。

下面我们整几个最简单的例子来展示一下执行js代码

第一种pdf后缀的

迅捷办公 - 提供专业的办公应用软件及技术服务

第一步新建空白页,

第二步右小角点击选项,选择文档属性

第三步javascript,添加js代码就行。

app.alert(xss);

有水印~

所以用另一种,我们这里用python 的PyPDF2库

from PyPDF2 import PdfWriter

# 创建一个新的PDF文件
new_pdf = PdfWriter()

# 添加一个空白页(可选)
new_pdf.add_blank_page(width=600, height=700)

# 写入JavaScript代码
new_pdf.add_js("app.alert('xss');")

# 将PDF写入文件
with open("xss.pdf", "wb") as f:
    result = new_pdf.write(f)
    if result:
        print("包含JavaScript的PDF文件已创建: xss.pdf")
    else:
        print("创建PDF文件失败")

运行完会在当前目录生成一个xss.pdf

第二个html后缀

这个大家都知道用script嵌入js代码

<!DOCTYPE html>
<html>
<head>
    <title>xss</title>
</head>
<body>
    <!-- 直接嵌入的XSS代码 -->
    <script>alert('xss');</script>
</body>
</html>

第三个svg后缀

<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg" onload="init()">
    <rect id="myRect" x="50" y="50" width="100" height="100" fill="blue"/>
    <script type="text/javascript">
        function init() {
            alert('XSS');
        }
    </script>
</svg>

第四个xml文件

 这个可以跨域引用,只需要上传引用xslt文档的那个xml文件就行,我们这里用的phpstudy搭的服务器

中间件使用的apache,打开模块headers_module

也就httpd.conf中的这一行不要注释就行LoadModule headers_module modules/mod_headers.so 

还有AllowOverride要配置成ALL (允许所有可用的 .htaccess 指令,相当于一步到位,不然还得针对不同的需求进行选择类型)

所以在网站根目录配置.htaccess文件,来允许跨域。

允许跨域,以下配置的含义是允许任何域发起的请求都可以获取当前服务器的数据

# 设置CORS相关头部
<IfModule mod_headers.c>
    # 允许任何源进行跨域请求
    Header set Access-Control-Allow-Origin "*"
    
    # 设置允许的HTTP方法
    Header set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
    
    # 设置预检请求的有效期
    Header set Access-Control-Max-Age "1000"
    
    # 设置允许的请求头
    Header set Access-Control-Allow-Headers "Origin, Accept, Range, Key, Content-Length, X-Requested-With, Content-Type, Authorization, Client-Security-Token"
</IfModule>

测试是否支持跨域:curl 域名/ip -H "Origin: https://baidu.com" -I

我们phpstudy开了允许跨域,所以放置需要被引用的xml文件,我们随便找一台网络互通的机器,用另一个phpstudy或者lnmp lamp环境,放一个引用需要被引用的文件,也就是1.2.xml。用火狐

ie有安全策略,一直显示拒绝,火狐可以弹

不涉及跨域的话,也就是符合同源策略,直接上传2个文件就行。

xml它需要上传2个文件 首先上传第一个xml文件, 然后再上传第二个xml文件

1.1.xml

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html><body>
<script>alert(/xss/);</script>
</body></html>
</xsl:template>
</xsl:stylesheet>

这是一个XSLT(可扩展样式表语言转换)文档,它的作用是定义如何将一个XML文档转换成另一种格式的文档,在这个例子中是HTML文档。

1.2.xml

<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="http://192.168.130.239/uploads/1.1.xml"?>
<test></test>

 这是一个XML文档,它通过一个特殊的处理指令引用了一个外部的XSLT样式表。

后续还有几个后缀,等有空补上吧


http://www.niftyadmin.cn/n/5668917.html

相关文章

[每日一练]利用pivot函数自定义数据透视表

#该题目来源于力扣&#xff1a; 2889. 数据重塑&#xff1a;透视 - 力扣&#xff08;LeetCode&#xff09; 题目要求&#xff1a; DataFrame weather --------------------- | Column Name | Type | --------------------- | city | object | | month | obje…

【图文详解】什么是微服务?什么是SpringCloud?

目录 一.认识微服务架构 ▐ 微服务带来的挑战 二.微服务解决方案SpringCloud ▐ SpringCloud的版本 ▐ SpringCloud和SpringBoot的关系 ▐ SpringCloud实现方案 Spring Cloud Netfix Spring Cloud Alibaba ▐ Spring Cloud 实现对比 在入门Spring Cloud 之前&#xff…

使用 Azure Functions 开发 Serverless 应用:详解与实战

使用 Azure Functions 开发 Serverless 应用&#xff1a;详解与实战 随着云计算的发展&#xff0c;Serverless&#xff08;无服务器架构&#xff09;已成为构建现代应用的重要模式。它能够让开发者专注于业务逻辑&#xff0c;而不需要关注底层的服务器管理、扩展等问题。Azure…

前端CSS学习框架

⭐️ CSS &#x1f4ac; 描述&#xff1a;层叠样式表&#xff0c;用于设计风格和布局。 &#x1f4da; 资源&#xff1a;学习使用 CSS 为 HTML 添加样式 - 学习 Web 开发 | MDN ⭐️ 基本语法 ⭐️ 引入方式 行内样式 内部样式表 外部样式表 ⭐️ 选择器 通用选择器 标签…

解决ubuntu22.04 gnome-terminal 无法启动的问题

22.04下面默认的python 版本是3.10. 如果你安装了3.8或其它版本&#xff0c;尽量不要去ln -s python3.8 python3修改默认python3版本&#xff0c;不然Terminal会打不开。猜测Terminal可能用到了python的_gi这个库。 可以在xterm或putty远程连上&#xff0c;输入 sudo gnome-te…

C#自定义曲线绘图面板

一、实现功能 1、显示面板绘制。 2、拖动面板&#xff0c;X轴、Y轴都可以拖动。 3、显示面板缩放&#xff0c;放大或者缩小。 4、鼠标在面板中对应的XY轴数值。 5、自动生成的数据数组&#xff0c;曲线显示。 6、鼠标是否在曲线上检测。 二、界面 拖动面板 鼠标在曲线上…

改进拖放PDF转换为图片在转换为TXT文件的程序

前段时间我写了Python识别拖放的PDF文件再转成文本文件-CSDN博客 最近有2点更新&#xff0c;一是有一些pdf文件转换出来的图片是横的&#xff0c;这样也可以识别文字&#xff0c;但是可能会影响效果&#xff0c;另一个是发现有一些文字识别不出来&#xff0c;看了关于提高Padd…

day21JS-npm中的部分插件使用方法

1. 静态资源目录 静态资源目录就是访问服务器的某些路劲时候&#xff0c;服务器可以吐出一个写好的指定页面。 实现思路&#xff1a; 1、先判断要找的路径是否是文件&#xff0c;如果是文件&#xff0c;就加载发给对方。 2、如果是文件夹&#xff0c;找到这个文件夹所在路径中…