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

Day29 -JS开发02 -两个实例:dom树(存在dom-xss) 加密及基础的js逆向(明文加密)

案例1:dom树

一、什么是DOM?

DOM 概述 - Web API | MDN

DOM运行机制:顾客(JS)去餐厅(浏览器)用餐,餐厅提供各类的餐食(api),顾客想要吃什么,就找服务员(Dom)点餐,服务员去后厨(浏览器引擎)端菜上菜。

关键点:顾客必须通过服务员上菜,自己不能去后厨(js必须通过dom进行交互操作)

总结:JavaScript 是顾客,DOM 是服务员,浏览器是餐厅,API 是菜品——想吃菜(操作网页),必须通过服务员(DOM),而厨房(浏览器引擎)对顾客不可见。

二、 DOM操作

我们先创建一个img标签,导入iPhone.png,然后给标签一些属性,id & class & width & height 

再给一个按钮,负责刷新。

<img src=iphone.jpg id="iphone" class="pic" width="300" height="300">

<button οnclick="update()">刷新</button>

然后在定义一个function功能名为update,根据返回类型的不同分为获取对象和获取

1、获取对象

 <!-- 查找对象 类比mysql条件查询 -->

<h1 id="myHeader" class="title" οnclick="getValue()">这是标题</h1>

document.querySelector('h1')

document.querySelector('.title')  

document.querySelector('#myHeader') 

<img src=iphone.jpg id="iphone" class="pic" width="300" height="300">

<button οnclick="update()">刷新</button>

<script>

    function update(){

    const img = document.querySelector('img')

    const width = document.querySelector('.pic')

    const src = document.querySelector('#iphone')

    console.log(src);

    }

</script>

2、获取对象属性

js如何获取dom元素属性值 | PingCode智库

<button οnclick="update1()">刷新</button>

<h1 id="myHeader" class="title" οnclick="getValue()">这是标题</h1>

<script>  

  function update1(){

    const h1 = document.querySelector('h1')

    const id= h1.id

    console.log(id);    

    }

</script>

3、标签内部内容(针对可视化文本) 及 dom-xss的触发

2种方法主要是代码执行能力上的差别

innerHTML:可以执行代码,可能存在xss-dom漏洞。

innerTEXT:将代码直接转为字符串,更安全。

1)innerHTML  ---不安全

首先,将内部内容利用innerHTML提取

然后我们将内部内容替换为img标签,触发一个onerror进行弹窗

document.getElementById('myHeader').innerHTML = '<img src=x οnerrοr=alert("XSS")>';

2)innerTEXT  --安全

document.getElementById('myHeader').innerTEXT = '<img src=x οnerrοr=alert("XSS")>';

按照刚刚上面innerHTML,进行img内部内容替换

三、DOM引发的安全问题

payload:><img src=x οnerrοr="alert('XSS攻击成功!')">

 

1、成因/原理

攻击者通过客户端途径(如 URL 参数、用户输入)将恶意代码注入到 DOM 中,浏览器在解析渲染 DOM 时将其当作合法代码执行。这种攻击完全依赖客户端处理,恶意代码无需经过服务器端存储或反射

2、易出现xss-dom的位置

测试 URL 参数(最常出现!)、 测试表单输入(搜索框、评论框等)

✅ 输入点:URL、表单、API、存储、WebSocket
✅ 触发方式innerHTMLevallocation、动态脚本
✅ Payload 技巧

  • 用 <img onerror=alert(1)> 测试 HTML 解析

  • 用 javascript:alert(1) 测试 URL 跳转

  • 用 " onclick=alert(1) x=" 测试属性注入

--------------------------------------------

案例2:JS简单调试 (逆向)

一、js实现数据加密

利用第三方库实现

开启调试,查看调试控制台,分别对应四种不同的加密

二、简单的js逆向

为什么要做js逆向:由于可能对我们传入的信息进行加密,我们要进行payload测试等时候,如果传入明文,那么是根本没有用的,要按照他的加密逻辑将我们的测试语句加密,测试语句才可能会被识别 。

思路:提交错表单,查看网络数据包,找关键参数,全局搜索关键参数名,找到关键参数所在的关键代码,打上断点,控制台去测试。

由于xiaosedi给的是申通的实例,但是申通现在修改了当时的页面登录逻辑

pwd:123456

加密后的:e10adc3949ba59abbe56e057f20f883e

我们又看到有md5.js 就去全局搜索md5关键词

全局搜索:ctrl + shift + f

一个个去看,找到关键代码

打上断点

由于看到的是hex_md5()所以说,我们用hex_md5()传入字符串进行测试

由此可以直接在控制台将我们的测试语句利用hex_md5进行加密。

相关文章:

  • 机器学习与人工智能:NLP分词与文本相似度分析
  • 深入解析VPN技术原理:安全网络的护航者
  • 学习alpha
  • 12 web 自动化之基于关键字+数据驱动-反射自动化框架搭建
  • 在 Neo4j 中实现向量化存储:从文本到高效语义搜索
  • asp.net IHttpHandler 对分块传输编码的支持,IIs web服务器后端技术
  • ROS2学习(5)------ROS2 功能包介绍
  • Neo4j 图书馆借阅系统知识图谱设计
  • 【学习笔记】因果推理导论第1课
  • NDK19无法在AppleM芯片运行解决方案
  • 用 Rust 带你了解 TCP 和 UDP
  • 协议不兼容?Profinet转Modbus TCP网关让恒压供水系统通信0障碍
  • pytorch 14.3 Batch Normalization综合调参实践
  • 【数据结构】手撕AVL树(万字详解)
  • JAVA:Spring Boot 集成 RDF4J 实现欺诈检测的技术指南
  • 源码与二进制包区别
  • 移除链表元素数据结构oj题(力扣题206)
  • 【笔记】记一次PyCharm的问题反馈
  • 图像处理:预览并绘制图像细节
  • PT2031单触控单输出触摸IC
  • 福州一宋代古墓被指沦为露天厕所,仓山区博物馆:已设置围挡
  • 终于,俄罗斯和乌克兰谈上了
  • 金融月评|尽早增强政策力度、调整施策点
  • 特朗普再提“接管”加沙,要将其变为“自由区”
  • 缅甸内观冥想的历史漂流:从心理治疗室到“非语言现场”
  • 第1现场 | 美国称将取消制裁,对叙利亚意味着什么