一次有趣的通杀

一次有趣的通杀


0x00 目录


一次有趣的通杀

0x00 目录

0x01 前言

0x02 坏掉的弱口令

0x03 SQL注入*2

0x04 水平越权

0x05 跨平台越权

0x06 结言

0x01 前言


感谢Batteries安全 送来的一次弱口令通杀 兄弟萌弱口令都有了 那还说啥啊 进后台狠狠的测

在拿着师傅的弱口令通杀的过程中 再次遇到了"登录"按钮点了没反应的问题

让我想起了上次通杀时 按钮坏掉的一次渗透 感兴趣的师傅可以看看 这篇文章中的0x02

https://mp.weixin.qq.com/s/aF2Xtwni8XeynfpRAWdauA

其中本篇还有跨平台越权 和上次文章中的越权一样 感兴趣的师傅看看这篇文章中的0x05 有做详细的解释

https://mp.weixin.qq.com/s/E11la9TIzxAP17pcP_4m6Q

0x02 坏掉的弱口令


点登录按钮没反应 控制台爆红 这里有两种可能:

1.按钮没坏 照常发登录的请求包 只是不重定向到后台页面

2.按钮坏了 不发送请求包

对于第一种 就很好说了 可能在**"登录"** 这个响应包 中 会返回类似token、cookie的东西

对于第二种 就有些麻烦了 可能需要自己构造参数 实现**"拼好参"** 发包 这里参考**"前言"**中的链接

我们这里遇到的是第一种

可以看到这里正常发包 并且返回了jwt 但是没有正确的重定向到后台界面

兄弟萌 拿到jwt的第一时间是做什么呢?

当然是拿去爆破秘钥 看是否可以随意修改

好的无果 但是这里是一个很重要的点 后续我们会讲到这个没有正确秘钥的jwt该如何利用

很多师傅到这里可能已经看懵了 登录又登录不进去 拿到一个jwt有什么用呢?

jwt、cookie、token这类东西都代表着登录后才有的东西 那我们是否可以尝试在请求头中带着这串jwt 去拼接口呢?

这里我们也是收集到了一些接口(接口过多 其余的不一一做展示)

复制代码
/api/admin/user/myInfo

/api/admin/gxxxxxx/haveAll

/api/admin/gxxxxxx/haveAllLxxxxxx

/api/admin/Axxxxxx/uxxxxFaxxxxxxx

/api/admin/xxxx/haveAllTxxxxxxxxx

/api/admin/user/xxxxxList?page=1

/api/admin/user/xxxxxList?page=1

/api/admin/user/xxxxxAdminList?page=1

直接拿着接口去yakit中构造请求 进行一波Fuzz 先不带jwt试一下

可以看到这里大部分接口都是做了鉴权 显示未登录 其中有一个接口返回了大量信息

好家伙 状态码500 返回大量信息 不管了 妥妥的未授权拿下

从前端的js审计中发现 需要在jwt前加上Bearer

正确的拼接上jwt之后 这个响应大小 想必兄弟萌都应该猜到了吧

妥妥的信息泄露 拿下

0x03 SQL注入*2


为了方便测试 我这边找了一个可以正常登录进后台的站

最后也是找找找 终于找到了一处查询接口 在选择年级和班级 处均存在SQL注入

单引号报错 看到这里的时候已经笑了 99%都存在注入

通过报错返回的信息 判断为括号闭合 构造一波时间盲注来证明漏洞

我个人比较喜欢先用时间盲注 来判断闭合 因为sleep是最直观 的一种测试手段 无视是否有报错回显等 最后再通过其他注入手段来爆数据

这里我为了避免sleep 被执行多次 选择了其他函数代替sleep

BENCHMARK(1000000,MD5(1))大概意思就是 重复计算 MD5 (1) 100 万次(次数越多,延时越长)

payload:

复制代码
390632)/*8a792*/AND/*9b883*/(SELECT/*7c774*/5777/*6d665*/FROM/*5e556*/(SELECT(BENCHMARK(9000000,MD5(1))))Jedm)/*4f447*/AND/*3g338*/(3145=3145

重复计算 MD5 (1) 400 万次 延时2.5s左右

重复计算 MD5 (1) 900 万次 延时5s左右

使用sleep的时候切记一定要用limit限制sleep次数 不然可能会执行多次sleep(5) 导致数据库一直在睡或者服务过载 过载了就会出现。。。

群友直呼:

好了 等服务器恢复之后 我们已经确认了闭合符 开始测试报错注入

狠狠爆出

payload:

复制代码
419740)/*KV1QiLCJh*/and/*cyLCJleHA*/updatexml(1,concat(0x7e,(select/*GFPi1TdejA*/database()),0x7e),1)--+

剩下的丢入sqlmap一把锁

同样的payload 我们在class处也发现了注入

SQL+2

0x04 水平越权


大家如果在平时肾透测试中 遇到存在多个身份账号的系统 一定要多多测越权 比如这个系统就存在 管理员、教师、学生三种身份

这里我们先记录下账号A和账号B分别是什么

**账号A:**0237 **莹

**账号B:**9831 **霞

先登录账号A 来到修改密码处

在点击修改密码的时候抓包 发现是通过id来判断修改哪个账号的密码的

记录下账号A的id为285

去登录账号B 同样找到修改密码处抓包

账号B 的id为278 我们这里把id替换为账号A的id(285)

再次尝试登录账号A 发现账号A 需要用刚刚账号B 改的密码才能正常登录 使用账号A 之前的密码会提示密码错误

最终实现了账号之间的水平越权(我除了能改自己的密码还可以改他人的密码)

0x05 跨平台越权


美美通杀sql与越权过程中 遇到了几个难绷的站

这次按钮没坏 但是密码错误 不是弱口令了

很多师傅到这里就已经放弃了 其实还是有办法将他强制变为弱口令的

还记得文章开头的那个jwt吗 这时候仔细观察解密出来的jwt

大致可以分为三部分 第一部分为ua头 第二部分为时间戳 第三部分为用户id和邮箱

那么我们是不是可以大胆猜想 在管理员账户改密码的时候 只对用户id和邮箱进行了判断

大概率管理员的用户id都是1 邮箱也是admin

说淦就淦 找到一个能弱口令登录进去的怨种站 找到管理员修改密码处

抓包将host处进行修改 新管理员密码为Qweasd123456!

8092 的站 改为8087的站

host:xxx.xxx.xxx.xx:8092-->xxx.xxx.xxx.xx:8087

再去尝试登录8087的系统 发现是我们刚刚改好的密码

最终实现了不同的学校平台任意修改管理员密码

0x06 结言


师傅们在测试中 不要一看到jwt就觉得越权没戏了 可能jwt没做很好的鉴权 只是一个摆设

还有在SQL注入中 要谨慎使用sleep 我这里比较推荐benchmark

在测试中 遇到4站或者按钮坏掉的站是很正常的 可能是被被人挖到了 系统拿去修了 也可能是按钮坏了 依旧可以发包

总结还是要细心观察数据包 本篇中的sql也是一个个点测才找到的 有些系统有多个查询接口

如果十几个接口都做了很好的防护 大家也不要放弃SQL 可能就是在这十几个接口中 程序员偷懒 少做一个接口的防护

最后附上通杀刷屏截图

相关推荐
坚持学习前端日记2 小时前
容器化中间件的优缺点
java·中间件
比奇堡鱼贩2 小时前
python第三次作业
数据库
季明洵2 小时前
反转字符串、反转字符串II、反转字符串中的单词
java·数据结构·算法·leetcode·字符串
嗯嗯**2 小时前
Neo4j学习2:概念、数据展示、CQL使用
数据库·学习·neo4j·数据存储·图数据库·序列化·cql
虫小宝2 小时前
查券返利机器人的异步任务调度:Java XXL-Job+Redis实现海量查券请求的分布式任务分发
java·redis·分布式
Python+JAVA+大数据2 小时前
SQL玩出算法竞赛高度!郑凌云数独算法:递归CTE+位运算DFS回溯全解析
数据库·sql·算法·搜索引擎·深度优先·dfs
Mr_Xuhhh2 小时前
C语言字符串与内存操作函数模拟实现详解
java·linux·算法
瑞雪兆丰年兮2 小时前
[从0开始学Java|第十一天]ArrayList
java·开发语言
TDengine (老段)2 小时前
TDengine TSDB 3.4.0.0 上线:虚拟表、流计算性能显著提升,安全能力全面进阶
大数据·数据库·物联网·安全·时序数据库·tdengine·涛思数据