渗透实战|两个0day漏洞挖掘案例
The following article is from 藏剑安全 Author 藏剑安全
公众号现在只对常读和星标的公众号才展示大图推送,
建议大家把听风安全设为星标,否则可能就看不到啦!
----------------------------------------------------------------------
一.前言
基本情况
这是之前挖到的两个0day,都拿了CNVD的证书,厂商已修复,大概说下整体思路和挖掘过程
挖掘过程
绕过登陆(无效)-发现接口-JS审计-爆破接口-未授权访问-SQL注入
二.打点收集
1.失败的绕过登陆
在进行信息收集的时候,发现该系统登陆失败与成功返回的状态码,登陆成功为1000、登陆失败为1100
在登陆的时候进行抓包,修改返回包的状态码为1000,此时提示登陆成功,页面跳转到后台管理首页,但是页面是空白
后边才发现直接吧login.html改成index.html也可以进入空白后台。。所以是失败的绕过登陆
刷新网页,F12看请求,查看有无接口存在:
尝试访问该接口,得到返回成功的一条信息
该接口返回的是后台系统的名称等信息,无其它敏感信息,但是接口的url展示出来的路径与进入后台的路径并不一样
未授权的后台路径:http://xxxxx.com/a-b-c/xxxx/xxx/index.html
未授权的接口路径:http://xxxxx.com/c-d-e/xxxxx/xxxxxx/xxxxxx
先将路径记下来,待会可能会用到,信息收集就是要面面俱到
2.JS审计
后台查看网站源代码,直接进行JS审计
第一个接口暴漏:就是刚刚进入后台刷新界面得到的接口路径,注意上边提到了与未授权的后台初始路径不一样,这就是说源代码中暴漏的所有接口都可以尝试使用接口暴漏的路径进行拼接访问。
第二个接口暴漏:接口使用get传递,后边拼接某个参数id值
使用刚刚的路径进行拼接访问:拼接的某个参数id值我赋值为0测试
但是提示404,说明这个id获取不到任何数据,一种情况是0不存在,对0设置变量进行爆破,第二种情况是0参数后边可能还需要跟参数(后边也验证了这个想法,确实需要跟参数才能正确获取接口数据)
第三个接口暴漏:提示接口url后边加当前用户名,继续拼接url测试访问
假设当前用户名是admin,那么在暴漏的接口后边加/admin访问,提示请求成功,但是并未返回任何有用的信息,这个时候猜测可能admin不存在,没有返回任何信息而已,直接对当前用户进行爆破
成功爆破出test用户并返回部分信息,但是并无特别敏感信息,继续找接口
第四个接口暴漏:看接口的名称像是获取系统管理设置的接口
直接访问该接口获取到了四五个路径以及一个类似管理员的账号twadmin
三.未授权访问x1
3.柳暗花明
刚刚爆破出一个test用户,直接把twadmin替换test获取管理员信息-返回管理员登陆系统的时间
这个时候可以针对管理员密码进行爆破,既然有那么多接口,不如继续挖未授权访问,其实是因为CNVD不收web通用型弱口令(吼吼吼吼吼吼吼吼)。。。。。
刚刚还有几个html页面没有访问,直接访问看看能不能发现别的接口,访问页面报错,很正常,空壳子,又没登陆,直接查看源代码找接口吧
第五个接口暴漏
第五个接口的url和第二个接口的url一模一样,只是后边加了一个ssxtbm参数,验证了刚刚后边加参数才能正确获取接口信息的猜想
dlyhid后边不加ssxtbm参数提示404
Dlyhid后边加ssxtbm参数提示请求成功,只是没有返回任何数据
说明dlyhid参数是存在的,而ssxtbm参数是不存在的,所以没有返回任何信息,对ssxtbm参数进行爆破!!!
发现该接口是获取后台管理系统菜单信息的接口,获取到的都是菜单信息,也不算特别敏感内容
此时获取菜单接口的url是:http://xxxxx/asas/saasas/asas/0/50000
把0改成1试一下,同时改变后边的参数
http://xxxxx/asas/saasas/asas/1/50000
http://xxxxx/asas/saasas/asas/1/30000
成功返回资源地址
尝试对资源地址进行访问,直接未授权访问,可以进行删除、查询、添加等操作
尝试访问别的资源
接口这么多……扎布夺得了
4.批量验证
直接POST请求以及GET请求未授权接口获取信息即可
吼吼吼
5.end
到这里你以为结束了???
怎么可能!!!
未授权到手了,证书有了,但是一个不行啊,太少了,都未授权了,为什么不试试别的???
不多搞一下对不起熬那么晚的夜啊
四.SQL注入x1
6.出货*2
刚刚测试未授权接口的时候,有个查询功能??query?
直接get访问提示get请求不允许,那就post:
content-type又不对
众多接口得知,需要改content-type为json格式
配合接口请求的数据
直接用bp发送:
请求成功!!!
修改null为1’,继续发送,测试是否存在SQL注入
意思是让我们字符型加引号就好了
SQL注入一枚,证书*2