web和小程序的漏洞排查
该篇文章为记录在工作时遇到的基本问题以及对应的解决方式,以免自己把一些方法用完就忘,下次遇到又得🐔🐔
记录
过前端加密
在web端或者小程序中可能遇到请求包中的参数加密的情况,这种加密我一般用下面的两种处理方式。
1、在js中找加密和解密算法
—如果是自定义算法你可中大奖了,你得解算法
—>适用于简单的、有框架可套的算法,例如:AES、DES、RSA-酌情考虑
1>主要是排查js代码中的加密函数和解密函数,小程序的话需要用工具调出控制台进行调试
2>排查的函数通常为encrypt、decrypt函数,简单的直接在源代码处ctrl+f找这两单词就行,复杂的需要交数据前暂停执行进行调试,可能有点抽象,给个图就好了

3>复杂的需要一步步找,一般是小程序需要调试,步骤如下:
(1)、暂停执行
(2)、输入框中输入数据
(3)、点下一步,或者下一个函数
(4)、等监视的数据突然加密了,就记下那个函数分析
(5)、主要找加密算法是什么、iv和key,自定义算法和国密那些就用第二个方法吧
小程序需要用工具调出,工具推荐如下:
①、windows_自动化反编译
2、在控制台中定义函数直接输入数据
1>这个如果处理的好,在web端基本可以直接无需理会加密
—>需要比较熟练的使用python或者其他的代码,但是,熟练使用ai也行
2>有篇文章讲的很细,如下:
—>保姆级教程—前端加密的对抗(附带靶场) - 先知社区
3、other
—>在应用软件中去壳逆向分析伪代码
jwt_api问题
我见识现在不多,有错误的地方,想起来了就回来改一下,没有想起来就错下去喽。
jwt身份验证,一般情况不会给人伪造为空或者爆破出来密钥的机会,对我们有利的地方是通过正规途径获得一个合法的jwt后他们的接口通常不会有过多的权限管理,人话就是越权,逻辑洞可能比较多
1、尝试jwt绕过
—>生产环境没成功过
在渗透测试中,可以尝试以下几种JWT绕过方法—没有也要试试,成功就爽了
1>修改JWT令牌:通过修改JWT的Payload部分,可以尝试提升权限。例如,将用户角色从普通用户修改为管理员1。
2>利用过期令牌:有时即使JWT令牌已过期,服务器端可能仍然接受该令牌。通过修改令牌中的exp(过期时间)字段,可以尝试让过期令牌重新生效2。
3>历史令牌伪造:如果能够获取到历史JWT令牌,可以尝试修改其中的iat(签发时间)和exp字段,使其看起来像是新签发的令牌3。
4>算法混淆:JWT头部中的alg字段指定了签名算法。如果服务器端没有正确验证该字段,可以尝试将其修改为none,绕过签名验证1。
5>密钥爆破:如果服务器使用了弱密钥,可以尝试使用密钥字典进行爆破,获取用于签名的密钥2。
6>SQL注入绕过key:在某些情况下,如果JWT令牌中包含SQL注入漏洞,可以通过注入攻击绕过密钥验证2。
2、利用jwt
—>找api看越权
拿小程序来说,一般会直接给你一个jwt,这个jwt在服务器里面没有绑定任何用户,里面一般会有一个类似于openid的存在,当然有些要你注册或者登录才会响应一个jwt或者token
1>将小程序反编译出来的代码进行分析整理,可以用我上面给的自动化反编译的那个软件,主要整理出接口和网址
2>有接口就直接爆GET、POST、PUT、HEAD、TRACE等(生产环境没事别爆delete,爆成功等死)分析响应包,很明显的,一般就几种响应,要么200,要么权限不足,要么返回数据,要么说你类型错误,当然还有给你拉小黑屋的
3>有响应就分析操作;该方法主要是找api,不一定只有反编译的js里有,其本身小程序也是前端,可以尝试更改响应包跑前端的接口
—>同一域名使用
拿网址举例,123.123.com的合法jwt,或许是可以到111.123.com的网址使用的,也就是说,如果你一个网址没有权限,可以先尝试去找一样域名的其他网址去注册一个合法用户,获得jwt后尝试直接使用该网址的功能