台山网站设计,哈尔滨网站建设外包公司,大网站开发语言,全国医院网站建设时间轴#xff1a; 演示案例#xff1a;
JS 原生开发-DOM 树-用户交互 DOM#xff1a;文档操作对象 浏览器提供的一套专门用来操作网页代码内容的功能#xff0c;实现自主或用户交互动作反馈 安全问题#xff1a;本身的前端代码通过 DOM 技术实现代码的更新修改#xff…时间轴 演示案例
JS 原生开发-DOM 树-用户交互
DOM文档操作对象 浏览器提供的一套专门用来操作网页代码内容的功能实现自主或用户交互动作反馈 安全问题本身的前端代码通过 DOM 技术实现代码的更新修改但是更新修改如果修改 的数据可以由用户来指定就会造成 DOM-XSS 攻击 1、获取对象 标签直接写 Class加上符号. id加上符号# h1 idmyHeader οnclickgetValue()这是标题/h1 document.querySelector(h1) document.querySelector(.id) document.querySelector(#myHeader) 2、获取对象属性 h1 idmyHeader οnclickgetValue()这是标题/h1 const h1document.querySelector(h1) const idh1.id console.log(id) 2、操作元素数据 innerHTML 解析后续代码 innerText 不解析后续代码 3、操作元素属性 className src id 等 img srciphone.jpg width300 height300/img const srcdocument.querySelector(img) src.srchuawei.png 案例1
1.使用visual studio打开文件夹打开28天的demo01。 2. 使用此进行调试 3.dom.html:
操作元素 innerHTML 解析后续代码 innerText 不解析后续代码 h1 idmyHeader onclickupdate1()这是标题/h1img srchuawei.png width300 height300brbutton onclickupdate()刷新/buttonscriptfunction update(){const sdocument.querySelector(img)console.log(s.src)}function update1(){const sdocument.querySelector(h1)//s.innerText这是小迪br //innerText 不解析后续代码s.innerHTML这是小迪hr //innerHTML 解析后续代码//hr下划线console.log(str)}/script 其中 点击这是标题会转换为这是小迪点击刷新会得到src中的img图片 效果展示 触发图 使用innerText会显示这是小迪br 使用innerHTML会显示这是小迪 4.图片切换
将s.srchuawei.png转为iphone.jpg。 scriptfunction update(){const sdocument.querySelector(img)s.srciphone.jpgconsole.log(s.src)}function update1(){const sdocument.querySelector(h1)//s.innerText这是小迪brs.innerHTML这是小迪hrconsole.log(str)}/script 5.DOM XSS漏洞
const sdocument.querySelector(img)s.srciphone.jpgconsole.log(s.src)
如果这里iphone.jpg为一个变量由用户传递决定那么就会造成DOM XSS改为用户传递 s.srcJaVaScRiPt:alert(XSS) XSS payload参考文章 XSS攻击绕过过滤方法大全转_xss绕过-CSDN博客 有时候不弹窗的原因 1.不支持高版 2.浏览器安排策略问题 使用img src# onerror alert(1)br在上面可以绕过弹窗alert1。 真实案例1
有道翻译已经被修复
在输入whoami后会在下方出现值 使用dnslog.cn进行带外处理 在network中看到访问成功 进行关键字搜索ctrlshiftf) (搜索出第三个js/textTranslate.729eda88js 根据表单值发现idjs_fanyi_input 在文本中查找idjs_fanyi_input 归纳下来就是换数据的关系 接着修改数据 发现点击左边过滤掉img src http:127.0.0.1 点击右边不过滤 单击左边 被进行了实体化技术 单机右边成功进入 用自己的案例进行尝试: alert1 function update1(){const sdocument.querySelector(h1)//s.innerText这是小迪brs.innerHTMLimg src# onerroralert(1) //注入代码console.log(s)} JS 导入库开发-编码加密-逆向调试
//MD5
script srcjs/md5.js/script
scriptvar str1 xiaodisecvar str_encode md5(str1);console.log(str_encode)
/script//SHA1
script srcjs/crypto-js.js/script
scriptvar str1 xiaodisec;var str_encode CryptoJS.SHA1(str1).toString(); // 注意1是数字1console.log(str_encode)
/script//HMAC
script srcjs/crypto-js.js/script
scriptvar key key;var str1 xiaodisec;var hash CryptoJS.HmacSHA256(key, str1);var str_encode CryptoJS.enc.Hex.stringify(hash);console.log(str_encode) // 11a7960cd583ee2c3f1ed910dbc3b6c3991207cbc527d122f69e84d13cc5ce5c
/script//AES
script srcjs/crypto-js.js/scriptscript typetext/javascriptvar aseKey 12345678 // 定制秘钥长度必须为8/16/32位, 长度不一致也没问题var message xiaodisec; // 需要加密的内容// 加密 DES/AES切换只需要修改 CryptoJS.AES CryptoJS.DESvar encrypt CryptoJS.AES.encrypt(message, CryptoJS.enc.Utf8.parse(aseKey), // 参数1密钥, 参数2加密内容{mode: CryptoJS.mode.ECB, // 为DES的工作方式padding: CryptoJS.pad.Pkcs7 // 当加密后密文长度达不到指定整数倍(8个字节、16个字节)则填充对应字符}).toString(); // toString转字符串类型console.log(encrypt);//在弹窗中打印字符串2vcsEDJv9vAZZLgFLjkZ9A//解密var decrypt CryptoJS.AES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(aseKey), // 参数1密钥, 参数2解密内容{mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8); // toString转字符串类型,并指定编码console.log(decrypt); // xiaodisec/script//DES
script srcjs/crypto-js.js/scriptscript typetext/javascriptvar aseKey 12345678 // 定制秘钥长度必须为8/16/32位, 长度不一致也没问题var message xiaodisec; // 需要加密的内容// 加密 DES/AES切换只需要修改 CryptoJS.AES CryptoJS.DESvar encrypt CryptoJS.AES.encrypt(message, CryptoJS.enc.Utf8.parse(aseKey), // 参数1密钥, 参数2加密内容{mode: CryptoJS.mode.ECB, // 为DES的工作方式padding: CryptoJS.pad.Pkcs7 // 当加密后密文长度达不到指定整数倍(8个字节、16个字节)则填充对应字符}).toString(); // toString转字符串类型console.log(encrypt);// 控制台打印 CDVNwmEwDRM//解密var decrypt CryptoJS.AES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(aseKey), // 参数1密钥, 参数2解密内容{mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8); // toString转字符串类型,并指定编码console.log(decrypt); // 控制台打印i am xiaochou ?
/script//RSA
script srcjs/crypto-js.js/scriptscript typetext/javascript// 公钥 私钥是通过公钥计算生产的不能盲目设置var PUBLIC KEY-----BEGIN PUBLICKEY-----MFWWDQYJKOZIhVCNAQEBBQADSWAWSAJBALyBJ6KZ/VFJYTV3vOC07jqWIqgyvHulv6us/8wz1sBqQ2e0TX7s5zKfXY40yZWDoCaIGktP/sc0D6dQzjaxECAWEAAQ-----END PUBLIC KEY-----;
//私钥var PRIVATE KEY-----BEGIN PRIVATEKEY-----MIIBVQIBADANBgkqhkiG9WOBAQEFAASCAT8WggE7AgEAAkEAvIEnqRn9UU1hNXe84LTuOpYiqDK8e6W/q6z/zDOVIGpDb545NfuznMp9djjTJlYOgJogaT60/x2QPP1DONrEQIDAQABAKEAu7DFSqQEDDnKJpiWYfUE9ySiIWNTNLJWZDN/Bu2dYIV4DO2A5aHZfMe48rga5BkoWq2LAL1Y3tqsOFTe3M6yoQIhAOSfSAU3H6jI0nlEiZaburVGqiFLCb5Ut3Jz9NN5p59AiEA0xQDMrxWBBJ9BYq6RRY4pXwa/MthX/8Hy3GnvNw/yUCIG/3Ee578KVYakq5pih8KsVeVj037c2gj60d30k3XPqBAiEAGGPVxTsAuBDz0kcBIPqASGzArumljkrLsoHHkakofU0cIDuhxKQwH1XFD079ppYAPcV03bph672qGD84YUaHFpQ-----END PRIVATE KEY-----;
使用js进行加密
将三个js放入js文件夹中 创建encry.html: //md5
script srcjs/md5.js/script
scriptvar str1 xiaodi jichu No1var str_encode md5(str1);console.log(str_encode)
/script//SHA1
script srcjs/crypto-js.js/script
scriptvar str1 xiaodisec;var str_encode CryptoJS.SHA1(str1).toString(); // 注意1是数字1console.log(str_encode)
/script//HMAC
script srcjs/crypto-js.js/script
scriptvar key key;var str1 xiaodisec;var hash CryptoJS.HmacSHA256(key, str1);var str_encode CryptoJS.enc.Hex.stringify(hash);console.log(str_encode) // 11a7960cd583ee2c3f1ed910dbc3b6c3991207cbc527d122f69e84d13cc5ce5c
/script//AES
script srcjs/crypto-js.js/scriptscript typetext/javascriptvar aseKey 12345678 // 定制秘钥长度必须为8/16/32位, 长度不一致也没问题var message xiaodisec; // 需要加密的内容// 加密 DES/AES切换只需要修改 CryptoJS.AES CryptoJS.DESvar encrypt CryptoJS.AES.encrypt(message, CryptoJS.enc.Utf8.parse(aseKey), // 参数1密钥, 参数2加密内容{mode: CryptoJS.mode.ECB, // 为DES的工作方式padding: CryptoJS.pad.Pkcs7 // 当加密后密文长度达不到指定整数倍(8个字节、16个字节)则填充对应字符}).toString(); // toString转字符串类型console.log(encrypt);var decrypt CryptoJS.AES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(aseKey), // 参数1密钥, 参数2解密内容{mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8); // toString转字符串类型,并指定编码console.log(decrypt); // xiaodisec/script赋值变量的三个方式 let var const 效果展示 两则案例分析-解析安全登录调试
小迪8案例一小迪8
1.根据传参值知道是edpassword 2.使用全局搜索edpassword
3.发现传参变量edtPassWord 4.其中的$(#btnPost).click(function()
与我们所学习的ajax技术相对应
script srcjs/jquery-1.12.4.js/script
script$(button).click(function (){$.ajax({type: POST,url: shop.php,data: {num:$(.number).val(),},success: function (res){console.log(res);if(res[infoCode]1){alert(购买成功);//购买成功的流程}else{alert(购买失败);}},dataType: json,});});
/script
5.在表单值中也是btnpost 为什么#btnPost前有#号
答 标签直接写 Class加上符号. id加上符号# h1 idmyHeader οnclickgetValue()这是标题/h1 document.querySelector(h1) document.querySelector(.id) document.querySelector(#myHeader) 6.进行md5传参后action提交给cmd.php?actverify 7.传输至这里 8.若不知道是md5加密可以用上面的方法进行溯源之后在console中进行调试 逻辑梳理 进行调试对比(发现相同 案例二申通快递 抓到包后看到看到LoginResult的usernameMobilePassword通过密文加密了 为了解密明文找到加密方式可以从表单入手 全局搜索此值找到以下内容 思考
如果我们现在要测试注入一样 注入payload admin ’ 11
明文admin ‘11 密文xxxxxxxxxx 如果不知道加密算法 你发送明文有效吗
没有效 因为对方可能会解密 有效 以同样的加密方式去发送payload
以相同方法找到密码。
之后在控制台尝试使用平台加密方式进行加密发现会进行报错是在本地环境不是在平台环境。 只能使用断点调试
点击此处进行断点调试 会在右下角显示明文密码 其中 左边是调试跟踪代码执行流程放走了
右边是继续往下调
当往下调后数据将会发生改变
现在在控制台调试会得到攻击语句和工具算法了 总结 如果我们现在要测试注入一样 注入payload admin ’ 11 明文admin ‘11 密文xxxxxxxxxx 如果不知道加密算法 你发送明文有效吗 没有效 因为对方可能会解密 有效 以同样的加密方式去发送payload 为什么进行断点操作 因为有些encrypt没有定义浏览器没有显示断点。 此文章由李豆豆喵和番薯小羊卷~共同完成。