web和小程序的漏洞排查

该篇文章为记录在工作时遇到的基本问题以及对应的解决方式,以免自己把一些方法用完就忘,下次遇到又得🐔🐔

记录

过前端加密

​ 在web端或者小程序中可能遇到请求包中的参数加密的情况,这种加密我一般用下面的两种处理方式。

1、在js中找加密和解密算法

​ —如果是自定义算法你可中大奖了,你得解算法

​ —>适用于简单的、有框架可套的算法,例如:AES、DES、RSA-酌情考虑

​ 1>主要是排查js代码中的加密函数和解密函数,小程序的话需要用工具调出控制台进行调试

​ 2>排查的函数通常为encrypt、decrypt函数,简单的直接在源代码处ctrl+f找这两单词就行,复杂的需要交数据前暂停执行进行调试,可能有点抽象,给个图就好了

1_1-2

​ 3>复杂的需要一步步找,一般是小程序需要调试,步骤如下:

​ (1)、暂停执行

​ (2)、输入框中输入数据

​ (3)、点下一步,或者下一个函数

​ (4)、等监视的数据突然加密了,就记下那个函数分析

​ (5)、主要找加密算法是什么、iv和key,自定义算法和国密那些就用第二个方法吧

​ 小程序需要用工具调出,工具推荐如下:

​ ①、windows_自动化反编译

​ ②、WeChatOpenDevTools-Python

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后尝试直接使用该网址的功能