安全矩阵

 找回密码
 立即注册
搜索
查看: 999|回复: 0

赏金猎人|SRC拿下某后台系统多个高危漏洞思路及试探通用...

[复制链接]

17

主题

17

帖子

63

积分

注册会员

Rank: 2

积分
63
发表于 2024-5-25 21:43:23 | 显示全部楼层 |阅读模式
赏金猎人|SRC拿下某后台系统多个高危漏洞思路及试探通用型漏洞
[url=]迪哥讲事[/url]
以下文章来源于州弟学安全,作者爱州
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 查询语句为:SELECTcolumn_name FROM table_name WHERE id = '用户输入的id';如果用户输入的 id 是 1' OR '1'='1,那么拼接后的 SQL 查询语句会变成:SELECTcolumn_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 WHEREusername = '输入的用户名' ANDpassword = '输入的密码';则使用万能密码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元的优惠券,用完今年不再发放

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-8 10:00 , Processed in 0.013026 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表