记一次Hvv中遇到的API接口泄露而引起的一系列漏洞

摘要:
引言最近朋友跟我一起把之前废弃的公众号做起来了,更名为鹿鸣安全团队,后面陆续会更新个人笔记,有趣的渗透经历,内网渗透相关话题等,欢迎大家关注前言Hvv中的一个很有趣的漏洞挖掘过程,从一个简单的API泄露到一系列漏洞。结语总结下上述的流程,从一个跨目录的尝试到大量API接口的泄露再到垂直越权获取管理系统的管理员账号,再到后台敏感数据泄露。
引言

最近朋友跟我一起把之前废弃的公众号做起来了,更名为鹿鸣安全团队,后面陆续会更新个人笔记,有趣的渗透经历,内网渗透相关话题等,欢迎大家关注
记一次Hvv中遇到的API接口泄露而引起的一系列漏洞第1张

前言

Hvv中的一个很有趣的漏洞挖掘过程,从一个简单的API泄露到一系列漏洞。这次的经历更让我体会到了细心的重要性。

挖掘起始

Hvv中拿到了一大堆的资产,有IP和URL的,我一般会先去手动挖掘已经给了的URL资产。面对众多的URL资产,怎么下手呢,我通常会选择去跑一下Title,然后根据Title来选择软柿子捏。
比如下面某个业务应用系统,定位好了,就开始手动测试挖掘了。
记一次Hvv中遇到的API接口泄露而引起的一系列漏洞第2张
打开URL进入这个业务应用系统,首页就是登录页面,见到这样的无验证码登录页码,直接起Burpsuite固定用户名字典然后爆破弱口令尝试。尝试了5分钟的弱口令爆破无果后,选择转换攻击思路。
记一次Hvv中遇到的API接口泄露而引起的一系列漏洞第3张

转换思路

转头去看下URL:http://fxxx/wxxx/login.html感觉可以尝试下是否存在目录遍历的问题
记一次Hvv中遇到的API接口泄露而引起的一系列漏洞第4张
于是转到上层目录查看的时候http://fxxx/wxxx,发现页面有一个渲染的加载的过程,然后才跳转到login.html登录页面,而且/wxxx目录看上去又像一个未授权的页面。于是Burpsuite在/wxxx一个一个放包,观察转到/wxxx/login.html过程中加载了什么东西。
记一次Hvv中遇到的API接口泄露而引起的一系列漏洞第5张
通过Burpsuite一个一个放包发现了一个特别的API调用接口
记一次Hvv中遇到的API接口泄露而引起的一系列漏洞第6张
在这个API接口之上再往前跨目录,直到回到根目录/DFWebAPIServiceHT下发现是一个接口数据库系统
记一次Hvv中遇到的API接口泄露而引起的一系列漏洞第7张
该系统存在非常多开放的接口,并且每个接口下面,还有详细的调用参数以及调用方法,过多的接口数据就不放了
记一次Hvv中遇到的API接口泄露而引起的一系列漏洞第8张
因为进入该业务系统后是一个登录页面,于是我直接去寻找是否有用户信息的一些相关接口开放。找到了如下接口
记一次Hvv中遇到的API接口泄露而引起的一系列漏洞第9张
通过/SXXXX_User/get接口可以获取到用户名相关的Json数据,其中的user_id键值就是用户名
记一次Hvv中遇到的API接口泄露而引起的一系列漏洞第10张
通过该接口获取到了很多的用户名,这些用户名的设置确实刁钻,例如pte,dpsas等用户名,这是难以简单猜解到的。通过收集获取到的这些用户名,再次进行弱口令爆破。这里的登录页面对表单中的用户名密码进行了Base64的加密。
记一次Hvv中遇到的API接口泄露而引起的一系列漏洞第11张
有一个很简单的方法,将收集到的用户名和简单的几个弱口令全部B ase64编码后放到txt里,然后导入Burpsuite的Simple list模式的payload中。这是比较简单的方法。
我这里用的是BurpCrypto插件来定义Execjs来将两个表单项在爆破过程中同时进行Base64编码。需要我们定位到加密或者编码的js位置,由于用的是Base64编码,图简单,用上面字典的方法即可。同样的Burpsuite爆破模块中可以通过设置payload processing进行Base64编码设置也可以起到一样的加密效果。
记一次Hvv中遇到的API接口泄露而引起的一系列漏洞第12张

柳暗花明

使用上述方法一顿爆破后,真的爆破出来了一个普通用户弱口令123456。拿着这个弱口令,我登入了系统,发现该系统只是一个外壳,里面还有很多的分系统。
记一次Hvv中遇到的API接口泄露而引起的一系列漏洞第13张
这让我非常的欣喜,我猜想这些系统的账号密码可能是互通互联的。经过测试发现,这里面只有两到三个系统可以正常访问,且账号密码并不都是互联互通的。其中有一个决策系统,通过刚刚爆破出来的用户弱口令是可以进入该系统的,且用户认证为灌区管理员,权限还是非常的低。
记一次Hvv中遇到的API接口泄露而引起的一系列漏洞第14张
由于权限还是太低,只有两个没什么用途的菜单,翻找了很久,都没有发现可利用的地方,或者可以上传shell的地方,索性放弃拿shell。但是打开右上角人员设置界面的抓包中发现了有意思的地方,在人员设置中有一个修改密码的表单设置,虽然是********,看不到具体明文,但是在返回的包中是直接显示出来的。而且Get请求里有一个很有趣的参数就是id=用户名的这个参数。
记一次Hvv中遇到的API接口泄露而引起的一系列漏洞第15张
也许我可以遍历之前用户接口泄露出来的用户名来尝试获取用户密码?
有了这个想法后,我直接起Bp的爆破模块,来遍历用户名尝试,果不其然。
这里没有鉴权机制,可以直接通过遍历ID用户名参数,就可以获得对应的用户密码。
记一次Hvv中遇到的API接口泄露而引起的一系列漏洞第16张
通过上面的越权漏洞获取到了高权限的用户密码,如root,admin,xxadmin等。利用高权限用户登录后,发现后台多了非常多的菜单,然后查找下敏感信息,发现泄露了很多敏感信息,并且高权限用户是可以直接看到所有的用户密码的。
记一次Hvv中遇到的API接口泄露而引起的一系列漏洞第17张
通过上述组合式的漏洞发现和利用,提了不少分。通过这次测试感受到了手测的魅力,还是非常的有意思的。其中这个接口数据库还有非常多的敏感接口,比如权限变更,文件上传,而且在此次测试中,发现了两个类似的API数据库,但是另一个利用价值不大,所以这里没写。

结语

总结下上述的流程,从一个跨目录的尝试到大量API接口的泄露再到垂直越权获取管理系统的管理员账号,再到后台敏感数据泄露。总之,就是在手动挖掘漏洞的时候,要注重每一个细节,尝试多种可能性,富有创造力的去将一些可能的漏洞点结合,这样能大大的增加漏洞挖掘的命中率。

该文章首发于奇安信攻防社区

免责声明:文章转载自《记一次Hvv中遇到的API接口泄露而引起的一系列漏洞》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇一个体验好的Windows 任务栏缩略图开发心得射频识别技术漫谈(9)——动物标签HDX【worldsing笔记】下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

突袭HTML5之Javascript API扩展2 地理信息服务

      现在比较火的一类服务叫做基于位置的服务(location-based service, LBS),这一类服务就是企业利用某点(例如用户所在的位置)坐标附近的区域提供服务的信息,比如常见的地图相关服务。在HTML5中,加入了新的地理位置API用来确定和分享地理位置。 隐私申明      在与远程Web服务器共享物理位置时,隐私是一个需要关注的问题...

使用腾讯语音合成技术生成有声书

  背景:不知是否在博客园看到的腾讯云平台广告,被AI接口几个项目吸引住了,其中有个   语音合成  接口在这里安利一下,还挺好玩。这个接口提供将一段文字转换成语音的功能,支持中文、英文,遗憾的是暂时无法通过自己的声音进行训练,推出自己独有声音的音频文件:) 不过总体来说,还是相当不错啦,附件中是我用这个接口转换的样例音频文件。 DEMO实测,代码案例简单...

Postman介绍(2)

一、使用Postman的模拟服务模拟(mock)后端 在整个开发过程中,前端或后端的延迟可能会阻碍相关团队有效地完成工作。一些后端的API工程师已经开始使用Postman去测试后端endpoint,而不依赖于前端UI来模拟API请求。 现在,Postman开发了一种新的模拟服务,使团队能够模拟后端服务器。前端开发人员可以模拟Postman collecti...

微信支付走流程中遇到的二个问题 CURLOP_TIMEOUT与curl出错,错误码:60

如下是运行微信支付测试代码时出错代码: Warning: curl_setopt() expects parameter 2 to be long, string given in D:wwwrootweixinpaytestpayWxPay.JsApiPay.php on line 99 Fatal error: Uncaught exception...

Logback 也爆雷了,惊爆了。。。

Logback 也爆雷了 Log4j2 漏洞最新进展: Log4j 2.3.1 发布!又是什么鬼?? Log4j2 核弹级漏洞刚结束没几天,Logback 其实也爆雷了,这你能信?? 栈长在上篇文章提到,因 Log4j2 漏洞的反复无常,导致某些公司已经切换到 Logback 了,如果这也是你们公司的决定,请在文章下面评论区留言。 可令栈长万万想不到的是,...

日常编码规范(Java版)

规范: 命名: 接口命名。接口必须是名词,并且接口是能准确的描述要做的事情,命名能清晰的看出输入输出,可以是抽象的行为描述。接口必须以一个动作的名词形式结尾,比如reader,handler等。接口的命名,必须是抽象的,除非接口本身和具体实现紧密相关,否则不应该在接口中包含任何和具体实现相关的名词。接口命名根据行为分为以下几种: 读取某个数据,命名: {...