前言
年前参与的一个项目测试出了许多漏洞,客户就开始用千奇百怪的方式去修复漏洞。
这次遇到了一个比较典型的案例,客户将数据全部加密,企图告诉我漏洞已修复,你找不到能够利用的参数漏洞点。
最开始的时候,发现一个漏洞,就是分公司的成员,在查看分公司信息时,抓包后发现,存在一个参数名叫companyCode,即公司代码。
通过修改companyCode的值后发现,可以以当前分公司的权限,去查到到母公司以及其他分公司的员工信息。
因此今天开始复测漏洞
过程分析
使用之前的在测试过程中积累的账号弱口令成功登入至目标系统(客户未提供测试账号)
再次来到之前的越权功能点进行抓包测试
发现整个请求数据体是被加密了,目前加密方式未知。
看数据的结构,大概率是AES算法,数据以base64格式输出。
再次抓包该功能点,发现密文发升了变化,因此有大概率是RSA算法,数据以base64格式输出。
较小概率是AES算法,被加密的数据中含有时间戳等随机字符串。
此处无法通过关键字定位,因为关键字(也就是参数名)也被加密了。
因此直接看该接口数据包的堆栈过程。
压栈信息如下:
此处根据经验判断
无用的堆栈文件是jquery-1.10.2.min.js
此处可以一个一个堆栈慢慢分析
通过分析,找到了密文所处的堆栈
跟进到该堆栈,并设置断点,重新触发该过程中的请求
在scope中找到了明文数据jsonparam和密文数据jsonStr
通过关键字搜索,找到了jsonStr的声明
可以发现jsonStr是通过函数queryhouduancanshu进行加密的。
分析该加密算法的流程
jsonparam先进行url编码,在进行unescape解码,在用btoa进行base64编码后得到了vasbtoa。
vasbtoa字符串的下标是5时,插入一段长度为6的code字符串,在进行base64编码就得到了最终的密文。
将该加密算法整个复制粘贴下来
利用该密文重新发包
发现,越权漏洞并没有修复。
编写解密算法脚本
密文数据也被成功还原。
最后提交报告,并和客户沟通,告知加密并不能解决问题。
总结
加密可以通过堆栈信息来定位,也可以通过关键字定位,但是尽量多根据堆栈来分析。
加密并不能修复漏洞,只是会提高漏洞的利用难度和黑客的攻击成本。