赏金猎人|SRC简单拿下某公交后台系统多个高危漏洞思路及试探通用型漏洞
2024-4-2 22:39:27 Author: mp.weixin.qq.com(查看原文) 阅读量:26 收藏

0x01 前言

   本次漏洞挖掘对象为某公交后台管理系统,经过前期信息打点,成功从js中拿到多个接口,通过接口获取到未授权信息泄露以及SQL注入,包括前端登录页面SQL语句不严谨导致的万能密码登录,某理论来说,应该算SQL注入

    实缴只有2000个,本想上交到补天通用,奈何系统太冷门,独立IP小于30个,补天没有通过,最后上交到CNVD,由于涉及私密性,所以部分截图厚码

* 文章仅供参考分享思路,一切均为虚拟,请勿非法使用技术进行破坏,否则后果自负

0x02 思路复现

    首先是一个登录页面,未知管理员账号,无法爆破,太费劲,所以先看看js里面有什么,分析一波

    好家伙,合着这把所有js都放前面了,不过这样审计太累,直接提取出js里面的接口放到txt里面,fuzz跑一下提取的接口

/upgrade/xxx 泄露所有设备状态以及设备信息这个必须登录后才能查看的,所以此处犯了两个错误1. 登录后的信息及接口包括js不应向外暴露2. 未对接口做鉴权(未授权)

/upgrade/xxx?id=number此处不输入数据默认是下载全部数据导出到excel表经过测试,发现前端可对查询数据直接控制

    在我输入1的时候,表示我想导出第一列数据,此处包长为6360

    在我输入2的时候表示导出前2列数据,此时包长为6364

    当我输入xxx?id=2-1时,此时导出的居然是1列数据,包长为6360了,这就很明显的用户可以操控拼接进SQL语句

假设原本的 SQL 查询语句为:SELECT column_name FROM table_name WHERE id = '用户输入的id';如果用户输入的 id 是 1' OR '1'='1,那么拼接后的 SQL 查询语句会变成:SELECT column_name FROM table_name WHERE id = '1' OR '1'='1';这个条件永远为真,导致查询返回所有记录,从而绕过了原本的查询条件,获取了所有列的数据。

    直接sqlmap跑一下,不用想就知道是盲注,而且经过/sys/config泄露出数据库为MSSql,并且泄露出数据库账号密码及地址

sqlmap -u "http://xxx.com/upgrade/xx?id=2-1" --dbs

    看数据库命名,其中包括IC卡、设备信息、密钥等

    但是我还是没有登录进去,正在一筹莫展之际,想到,既然有sql注入,万能密码是否可以呢,直接万能密码跑一下,成功

    管理员用户还真是admin,假设登录失败会提示账号或密码错误,登录成功,则后端会返回一个jwt编码,来赋予后期登录系统后所操作的一个令牌

模拟一下,前端登录页面大概SQL语句如下SELECT * FROM users WHERE username = '输入的用户名' AND password = '输入的密码';则使用万能密码admin'--后 如下SELECT * FROM users WHERE username = 'admin'--' AND password = '';- -是 SQL 中的注释符号,它会注释掉后面的所有内容。因此,' AND password = '' 这部分被注释掉了使得查询变成了只检查用户名是否为 admin,而不再需要密码验证

    所以它只需要查询用户admin存不存在,如果存在则登录成功,通俗易懂

    登录成功后大概是可以看得到刚才js文件接口中的那些数据的,没做鉴权,比如车辆的状态,比如系统的配置,部门信息,车辆型号,但是我估计数据库中有些库没有对接在这里

    然后就是找到一个上传入口,但是不管上传什么文件都提示解析异常,这里就先不搞了,到此为止了

    接着就是提交环节,一个站不能扩大危害,且后台管理,谁没事天天去访问啊,然后大佬告知我可以去查一下特征同源站点

    直接fofa语句,然后加上hunter

body="xxxxx"&&title="xxx"

    可能系统太冷门,或者企业需要的少,满打满算就二十多个站,最后交上去看一下吧

0x03 总结

    虽然,这次挖的并不难,没使用fuzz大量扫描,基本上分析分析,梭,全程不到半小时就出来了,再加上学会了不少东西,也是很满足的

关于以上出现漏洞成因分析及修复方法:  1. 部分JS文件不应出现在未登录页面  2. 未对接口做鉴权,这和不登录直接访问接口没区别  3. 未对用户做的操作做判断,用户可直接拼接sql语句修复方法:  1. 将合适的js文件放在合适的位置,在用户非法访问时提示403或报错  2. 对相关接口做鉴权处理,后端都生成jwt令牌了做个鉴权不难吧  3. 对前端数据库语句固定,使用参数化查询或者预编译语句来代替直接拼接用户输入的方式

如果你是一个长期主义者,欢迎加入我的知识星球,我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款
前面有同学问我有没优惠券,这里发放100张100元的优惠券,用完今年不再发放

往期回顾

dom-xss精选文章

年度精选文章

Nuclei权威指南-如何躺赚

漏洞赏金猎人系列-如何测试设置功能IV

漏洞赏金猎人系列-如何测试注册功能以及相关Tips


文章来源: https://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247494012&idx=1&sn=3bb81f3d9522298e223796a3265b5e68&chksm=e8a5e31fdfd26a095e7f71621feb5ab6611ddf8125c91627fc10424a8e38bb5c1181818fdf05&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh