在对客户网站以及APP进行渗透测试服务时候,越权漏洞对业务系统的正常运转影响很大,很多客户网站信息被泄露,数据库被篡改一大部分原因跟越权漏洞有关,前端时候某金融客户因为数据被泄露,通过老客户介绍,找到我们SINE安全做渗透测试服务,找出数据被泄露的原因以及目前网站APP存在的未知漏洞,根据我们十多年的渗透经验来分享这次网站安全测试的整个过程。
首先要收集客户的资料,我们SINE安全技术与甲方的网站维护人员进行了沟通,确定下网站采用的是php语言(Thinkphp二次开发系统),数据库类型是Mysql,服务器采用的是linuxcentos,买的是香港阿里云ECS,数据库采用的是内网传输并使用了RDS数据库实例作为整个网站APP的运营环境.
在对客户有了一定的了解后,客户提供了网站的会员账号密码,我们模拟攻击者的手法去黑盒测试目前网站存在的漏洞,登陆网站后,客户存在交易系统功能,使用的是区块链以及虚拟币进行币与币之间的交易金融网站,包括币币交换,转币,提币,冲币,包括了去中心化,以及平台与虚拟币交易所进行安全通信,第三方的API接口,也就是说客户的币上了链,
直接到交易所进行公开交易,资金安全很重要,只要出现一点安全隐患导致的损失可能达到几十万甚至上百万,不过还好客户只是用户信息泄露,针对这一情况,我们展开了全面的人工渗透测试。
首先我们对用户测试这里进行漏洞检测,在这里跟大家简单的介绍一下什么是越权漏洞,这种漏洞一般发生在网站前端与用户进行交互的,包括get.post.cookies等方式的数据传输,如果传输过程中未对用户当前的账户所属权限进行安全判断,那么就会导致通过修改数据包来查看其它用户的一些信息,绕过权限的检查,可直接查看任意用户的信息,包括用户的账户,注册手机号,身份认证等信息。
接下来我们来实际操作,登陆网站,查看用户信息,发现连接使用的是这种形式,如下:/user/58,上面的这个网址最后的值是58,与当前我们登陆的账户是相互对应的,也是ID值,USERID=58,也就是说我自己的账户是ID58,如果我修改后面的数值,并访问打开,如果出现了其他用户的账户信息,那么这就是越权漏洞。/user/60,打开,我们发现了问题,直接显示手机号,用户名,以及实名认证的身份证号码,姓名,这是赤裸裸的网站漏洞啊!这安全防范意识也太薄弱了。
用户信息查看这里存在越权漏洞,发生的原因是网站并没有对用户信息查看功能进行权限判断,以及对账户所属权限判断,导致发生可以查看任意用户ID的信息,如下图所示:
漏洞很明显,这是导致用户信息泄露的主要原因,并且我们在测试用户注册的账户也发现了用户信息泄露漏洞,我们抓取了POST到用户注册接口端这里,可以看到数据包里包含了userid,我们渗透测试对其ID值修改为61,然后服务器后端返回来的信息,提示用户已存在,并带着该ID=61的用户信息,包含了姓名,邮箱地址,钱包地址,等一些隐私的信息,如下返回的200状态代码所示:
HTTP/1.1 200 OK Date: Tue, 08 Mon 2020 09:18:26 GMT Content-Type: text/html Connection: OPEN Set-Cookie: __cQDUSid=d869po9678ahj2ki98nbplgyh266; Vary: Accept-Encoding CF-RAY: d869po9678ahj2ki98nbplgyh266 Content-Length: 500 {"error":"exist","user":[{"id":"61","username":"zhangchunyan","email":"admin@whocare","mobile":13005858****,"btc":"69jn986bb2356abp098nny889".
通过上面的漏洞可以直接批量枚举其他ID值的账户信息,导致网站的所有用户信息都被泄露,漏洞危害极大,如果网站运营者不加以修复漏洞,后期用户发展规模上来,很多人的信息泄露就麻烦了。如果您的网站以及APP也因为用户信息被泄露,数据被篡改等安全问题困扰,要解决此问题建议对网站进行渗透测试服务,从根源去找出网站漏洞所在,防止网站继续被攻击,可以找专业的网站安全公司来处理,区块链网站的安全,在网站,APP,或者新功能上线之前一定要做渗透测试服务,提前检查存在的漏洞隐患,尽早修复,防止后期发展规模壮大造成不必要的经济损失。