引言

最近朋友跟我一起把之前废弃的公众号做起来了,更名为鹿鸣安全团队,后面陆续会更新个人笔记,有趣的渗透经历,内网渗透相关话题等,欢迎大家关注

前言

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

挖掘起始

Hvv中拿到了一大堆的资产,有IP和URL的,我一般会先去手动挖掘已经给了的URL资产。面对众多的URL资产,怎么下手呢,我通常会选择去跑一下Title,然后根据Title来选择软柿子捏。

比如下面某个业务应用系统,定位好了,就开始手动测试挖掘了。



打开URL进入这个业务应用系统,首页就是登录页面,见到这样的无验证码登录页码,直接起Burpsuite固定用户名字典然后爆破弱口令尝试。尝试了5分钟的弱口令爆破无果后,选择转换攻击思路。

转换思路

转头去看下URL:http://fxxx/wxxx/login.html感觉可以尝试下是否存在目录遍历的问题



于是转到上层目录查看的时候http://fxxx/wxxx,发现页面有一个渲染的加载的过程,然后才跳转到login.html登录页面,而且/wxxx目录看上去又像一个未授权的页面。于是Burpsuite在/wxxx一个一个放包,观察转到/wxxx/login.html过程中加载了什么东西。



通过Burpsuite一个一个放包发现了一个特别的API调用接口



在这个API接口之上再往前跨目录,直到回到根目录/DFWebAPIServiceHT下发现是一个接口数据库系统



该系统存在非常多开放的接口,并且每个接口下面,还有详细的调用参数以及调用方法,过多的接口数据就不放了



因为进入该业务系统后是一个登录页面,于是我直接去寻找是否有用户信息的一些相关接口开放。找到了如下接口



通过/SXXXX_User/get接口可以获取到用户名相关的Json数据,其中的user_id键值就是用户名



通过该接口获取到了很多的用户名,这些用户名的设置确实刁钻,例如pte,dpsas等用户名,这是难以简单猜解到的。通过收集获取到的这些用户名,再次进行弱口令爆破。这里的登录页面对表单中的用户名密码进行了Base64的加密。



有一个很简单的方法,将收集到的用户名和简单的几个弱口令全部B ase64编码后放到txt里,然后导入Burpsuite的Simple list模式的payload中。这是比较简单的方法。

我这里用的是BurpCrypto插件来定义Execjs来将两个表单项在爆破过程中同时进行Base64编码。需要我们定位到加密或者编码的js位置,由于用的是Base64编码,图简单,用上面字典的方法即可。同样的Burpsuite爆破模块中可以通过设置payload processing进行Base64编码设置也可以起到一样的加密效果。

柳暗花明

使用上述方法一顿爆破后,真的爆破出来了一个普通用户弱口令123456。拿着这个弱口令,我登入了系统,发现该系统只是一个外壳,里面还有很多的分系统。



这让我非常的欣喜,我猜想这些系统的账号密码可能是互通互联的。经过测试发现,这里面只有两到三个系统可以正常访问,且账号密码并不都是互联互通的。其中有一个决策系统,通过刚刚爆破出来的用户弱口令是可以进入该系统的,且用户认证为灌区管理员,权限还是非常的低。



由于权限还是太低,只有两个没什么用途的菜单,翻找了很久,都没有发现可利用的地方,或者可以上传shell的地方,索性放弃拿shell。但是打开右上角人员设置界面的抓包中发现了有意思的地方,在人员设置中有一个修改密码的表单设置,虽然是********,看不到具体明文,但是在返回的包中是直接显示出来的。而且Get请求里有一个很有趣的参数就是id=用户名的这个参数。



也许我可以遍历之前用户接口泄露出来的用户名来尝试获取用户密码?

有了这个想法后,我直接起Bp的爆破模块,来遍历用户名尝试,果不其然。

这里没有鉴权机制,可以直接通过遍历ID用户名参数,就可以获得对应的用户密码。



通过上面的越权漏洞获取到了高权限的用户密码,如root,admin,xxadmin等。利用高权限用户登录后,发现后台多了非常多的菜单,然后查找下敏感信息,发现泄露了很多敏感信息,并且高权限用户是可以直接看到所有的用户密码的。



通过上述组合式的漏洞发现和利用,提了不少分。通过这次测试感受到了手测的魅力,还是非常的有意思的。其中这个接口数据库还有非常多的敏感接口,比如权限变更,文件上传,而且在此次测试中,发现了两个类似的API数据库,但是另一个利用价值不大,所以这里没写。

结语

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

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

记一次Hvv中遇到的API接口泄露而引起的一系列漏洞的更多相关文章

  1. 在Winform混合式框架中整合外部API接口的调用

    在我们常规的业务处理中,一般内部处理的接口多数都是以数据库相关的,基于混合式开发的Winform开发框架,虽然在客户端调用的时候,一般选择也是基于Web API的调用,不过后端我们可能不仅仅是针对我们 ...

  2. MVC代码中如何调用api接口

    关于代码解释,为了方便读者浏览时更好理解代码的含义,我把注释都写在代码里面了.因为一开始我只考虑到功能上的实现并没有考虑代码的优化所以代码我就全写在一个页面了.至于那些生成扑克牌类.计算类等代码优化方 ...

  3. windows服务中对外提供API接口

    public class SendMqService { private static bool isExcute = true; private static HttpListener listen ...

  4. 转载-常用API接口签名验证参考

    原文地址: http://www.cnblogs.com/hnsongbiao/p/5478645.html 写的很好,就做个笔记了.感谢作者! 项目中常用的API接口签名验证方法: 1. 给app分 ...

  5. 常用API接口签名验证参考

    项目中常用的API接口签名验证方法: 1. 给app分配对应的key.secret2. Sign签名,调用API 时需要对请求参数进行签名验证,签名方式如下: a. 按照请求参数名称将所有请求参数按照 ...

  6. abp 基于api接口的页面内容提交

    项目中,后端api接口需要接收来自页面提交的数据.注意下拉控件对应值,应该按以下方式赋值 @Html.DropDownListFor(m => m.IsFolder, new List<S ...

  7. 初识Django —Python API接口编程入门

    初识Django —Python API接口编程入门 一.WEB架构的简单介绍 Django是什么? Django是一个开放源代码的Web应用框架,由Python写成.我们的目标是用Python语言, ...

  8. 循序渐进VUE+Element 前端应用开发(13)--- 前端API接口的封装处理

    在前面随笔<循序渐进VUE+Element 前端应用开发(12)--- 整合ABP框架的前端登录处理>介绍了一个系统最初接触到的前端登录处理的实现,但往往对整个系统来说,一般会有很多业务对 ...

  9. 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入

    在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...

随机推荐

  1. 使用Flutter设计一个好看的"我"页面

    近期遇到一些很烦的琐事,状态比较down,很多原本计划好的事情都耽搁了,实在是难顶-- 看到后台一直有朋友问怎么博客和公众号没有更新,所以我忙完得闲就来更了! 前言 起因是最近重拾以前的旧项目(业余做 ...

  2. 使用 Docker 部署 Node 应用 - 镜像文件尺寸的优化

    前面 使用 Docker 部署 Node 应用 一文中完成了镜像的创建和运行,不过生成的镜像还有些粗糙,需要进一步优化. 镜像的优化 通过 docker images 看到简单的一个 node 服务端 ...

  3. 孟老板 ListAdapter封装, 告别Adapter代码 (四)

    BaseAdapter系列 ListAdapter封装, 告别Adapter代码 (一) ListAdapter封装, 告别Adapter代码 (二) ListAdapter封装, 告别Adapter ...

  4. ORA-09817:Write to audit file failed

    ERROR: ORA-09817: Write to audit file failed. --这种错误基本是磁盘空间满了 问题描述:sqlplus / as sysdba登不上,报上述ora-098 ...

  5. DOS命令行(3)——Windows运行窗口打开特定功能

    cmd 开启命令解释权或启用Windows中的某程序 cmd /c 执行完命令后关闭命令窗口 cmd /k 执行完命令后不关闭命令窗口   winver 查看Windows版本信息版权信息授权信息   ...

  6. 在C++中,你真的会用new吗?

    摘要:"new"是C++的一个关键字,同时也是操作符.关于new的话题非常多,因为它确实比较复杂,也非常神秘. 本文分享自华为云社区<如何编写高效.优雅.可信代码系列(2)- ...

  7. centos7安装kubernetes1.18.5

    一.设置hosts 修改主机名 [root@localhost kubernetes]# hostnamectl set-hostname master69 四台服务器安装kebernetes,一个m ...

  8. 整理一波Go工程化目录结构~

    在Go语言领域遨游了几个月后,发现自己对Go语言相关的工程目录结构有些不了解,按照原来的习惯在Go工程中建立的目录结构显得比较奇怪,好的目录结构绝对是可以加强工程效率的,所以接下来会参考煎鱼.毛大等大 ...

  9. C# 获取电脑Mac地址

    private string getMAC() { try { NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterf ...

  10. Nginx-多服务绑定80端口及映射域名

    多服务绑定80端口及映射域名 说明:业务需要配置的样例模板,如需深入了解,请查看官方文档 1.Nginx配置文件nginx.conf(可拆分多台机器部署) worker_processes  1; e ...