安全结合:

1、发现更多的有利用价值的信息(URL、域名、路径等等)

测试站、后台路径、未公开的路径、api地址等等

2、发现敏感信息(硬编码的帐号、pass、API密钥、注释等等)

硬编码帐号可登录、测试帐号可被登录、密钥泄露、注释中开发信息等等

3、发现危险的代码(eval、dangerouslySetInnerHTML等等)

URL跳转,XSS跨站、模版注入(SSTI)等

4、了解网站的逻辑校验功能

前端检测,加密逆向,数据走向等

学习文档:

原生JS教程

https://www.w3school.com.cn/js/index.asp

前端技术JS实现:

1、非加密数据大致流程:

客户端发送->明文数据传输-服务端接受数据->处理数据

2、加密数据大致流程:

明文加密->客户端发送->密文数据传输-服务端接受数据->解密数据->处理数据

疑问:

安全测试中对数据进行修改提交会在上述那一步操作中

前端加密 Crypto库

项目:https://github.com/brix/crypto-js

参考:https://juejin.cn/post/7382893339181613068

使用Crypto库进行MD5/SHA1/HMAC/AES/DES等加密

<script src="crypto-js.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>

1、BASE64加密
<script src="crypto-js.js"></script>
<script>
var str="zhaoyang";

//base64编码
var base64str=window.btoa(str);
console.log(base64str);
</script>
2、MD5
//MD5编码
var md5str=CryptoJS.MD5(base64str).toString();
console.log(md5str);

3、SHA1加密
//SHA1加密
var shastr = CryptoJS.SHA1(str).toString();
console.log(shastr)

4、HMAC加密
//HMAC加密
var key = 'key';
var hash = CryptoJS.HmacSHA256(key, str);
var HMACstr = CryptoJS.enc.Hex.stringify(hash);
console.log(HMACstr)
5、AES加密
//使用AES加密
var aeskey = "aeskey"    //定制密钥,长度必须为:8/16/32位,长度不一致也没问题
//加密 DES/AES切换只需要修改CryptoJS.AES <=> CryptoJS.DES
var aesstr = CryptoJS.AES.encrypt(str,CryptoJS.enc.Utf8.parse(aeskey),//参数1=密钥,参数2=加密内容
    {
        mode: CryptoJS.mode.ECB,//为AES的工作方式
        padding: CryptoJS.pad.Pkcs7//当加密后密文长度达不到指定倍数(8、16字节)则填充对应字符
    }
).toString();//toString=转字符串类型
console.log(aesstr);//在弹窗中打印字符串

6、DES加密

7、RSA加密
//公钥加密
var encrypt = new JSEncrypt();//实例化加密对象
encrypt.setPublicKey(PUBLIC_KEY);//设置公钥
var encrypted = encrypt.encrypt(str);//对指定数据进行加密
console.log(encrypted);

var PUBLIC_KEY=''
var PRIVATE_KEY=''
//私钥解密
var decrypt = new JSEncrypt(); // 创建解密对象
decrypt.setPrivateKey(PRIVATE_KEY); //设置私钥
var uncrypted = decrypt.decrypt(encrypted); //解密 'xiaodisec'
console.log(uncrypted);

var PUBLIC_KEY=
8、加密

这里就是给password进行加密

9、实战分析

这里看到了密码是被加密的,我们找下js

这里也很明显发现了调用了这个加密的库

这里就找到了加密密钥

尝试一下能否进行加密解密逆向

CryptoJS.AES.encrypt(i.ruleForm.password,CryptoJS.enc.Utf8.parse("SAXIqQnZ4CG2zi9d"),{mode:CryptoJS.mode.ECB,padding:CryptoJS.pad.Pkcs7}).toString();

前端加密 jsencrypt库

项目:https://github.com/travist/jsencrypt

参考:https://www.cnblogs.com/Lrn14616/p/10154529.html

使用jsencrypt库进行RSA等加密

<script src="jsencrypt.js"></script>

<script src="https://cdn.bootcdn.net/ajax/libs/jsencrypt/3.3.2/jsencrypt.js"></script>

代码混淆

混淆代码的主要目的是保护源代码,防止未经授权的复制、篡改或逆向工程。通过对变量名、字符串和控制流的修改,混淆代码看似毫无逻辑,但本质功能未变。混淆技术常用于商业应用和恶意软件中。

-压缩、混淆、加密技术

去除js代码中的不必要的空格、换行等内容。使源码压缩为几行内容,降低代码可读性,提高网站的加载速度。使用变量替换、僵尸函数、字符串阵列化、控制流平坦化、调试保护等手段,使代码变得难以阅读和分析,达到最终保护的目的,不影响代码原有功能,是理想、实用的javascript保护方案。

在线混淆:见打包PDF

https://obfuscator.io/

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐