记载一次CMS的代码审计

打印 上一主题 下一主题

主题 866|帖子 866|积分 2598

本次代码审计利用了白加黑的伎俩,用黑盒的视角测试功能点,用白盒的方式作为验证。
0x1 XSS

guestbook处,可以看到有一个留言板
[img=720,354.96]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529963.png[/img]

idea搜索guestbook。发现代码如下,此中的getModel是获取数据的方法。Guestbook.class就是具体要获取的数据。
[img=720,449.28]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529965.png[/img]

跟进Guestbook.class查看,发现GuestBook继承自BaseGuestbook
[img=720,409.68]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529966.png[/img]

继续跟进BaseGuestbook可以发现http请求的数据,没有发现有过滤函数。
[img=720,640.08]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529967.png[/img]

[img=720,680.4]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529968.png[/img]

然后利用管理员登录后台查看留言,发现确实如我所想,存在xss漏洞。
[img=720,275.76]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529969.png[/img]

ps:审计小本领,开启sql日志然后一边打payload一边看记事本是否漏掉过滤哪些字符。这里是完全没有过滤,以是在出库的时候假如没有防护,基本上就是实锤xss了。
[img=720,326.16]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529970.png[/img]

【----帮助网安学习,以下所有学习资料免费领!加vx:dctintin,备注 “博客园” 获取!】
 ① 网安学习发展路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技能电子书
 ⑤ 最权威CISSP 认证测验指南+题库
 ⑥ 超1800页CTF实战本领手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)
0x2 SQL注入

在产品中央发现有一个搜索框
[img=720,385.2]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529971.png[/img]

看到源码,没有发现有过滤字符,这里采用之前开启的mysql日志,通过日志文件的sql语句判断是否有过滤。
[img=720,417.6]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529972.png[/img]

直接输入单引号发现该cms返回500报错,很有可能存在sql注入。
[img=720,434.0220661985958]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529973.png[/img]

于是利用两个单引号''使得体系不抛出异常,然后查看日志文件中发现sql语句没有过滤单引号,阐明注入确实存在。
[img=720,251.28]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529974.png[/img]

or 1 效果
[img=720,769.8347107438017]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529975.png[/img]

or 0效果 注入确实存在
[img=720,513.6448598130842]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529976.png[/img]

0x3 文件下载

/common/down路由中的file方法,直接获取http请求中的filekey参数,并且没有过滤../等关键字符。fileKey的值和PathKit.getWebRootPath()函数的返回值拼接。然后fileKey实在就是http中的参数。
[img=720,311.76]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529977.png[/img]

[img=720,154.8]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529979.png[/img]

ps:该路由不在前台,只能通过白盒的方式去举行,但是后续通过github上的fuzz字典发现也可以fuzz得到但是fuzz发包数量巨大不作为参考。但是日后假如实在挖不出洞,可以考虑多fuzz一下,也许就出货了也说不准。这里用的字典较大,实在可以考虑小一些的字典,算是个人的一些挖洞经验吧。
[img=720,269.28]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529980.png[/img]

[img=720,439.2]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529981.png[/img]

[img=720,228.96]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529982.png[/img]

参数的fuzz
[img=720,297.36]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529983.png[/img]

0x4 csrf

在体系管理-> 体系用户 -> 添加用户处,抓包然后利用burp天生csrf poc
[img=720,521.28]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529984.png[/img]

[img=720,673.3418043202033]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529985.png[/img]

保存至html后,点击submit request

可以看到用户被成功添加了
[img=720,370.8]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529987.png[/img]

[img=720,177.12]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529988.png[/img]

0x5 组合拳+sql备份getshell未果(条件较为苛刻)

这里是想getshell来着,究竟都白盒了,固然能getshell就getshell,不能getshell就想办法getshell了。这里是发现后台上传接口,过滤了jsp,jspx文件名。
发现公司管理->基础内容->公司信息有上传图片
[img=720,538.56]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529989.png[/img]

上传jsp文件,jspx文件均被拦截。
[img=720,471.6]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529990.png[/img]

然后发现体系管理->数据库管理处发现可以举行数据库备份还原利用。在数据库还原抓包,发现是一个sql文件名字。这里想到之前的任意文件下载,那么岂不是可以通过上传一个sql文件,然后通过备份这个sql文件举行数据库备份getshell。
[img=720,331.2]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529991.png[/img]

首先去下载备份好的sql文件,路径在static/back/文件名
[img=720,70.56]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529992.png[/img]

然后添加getshell的payload
[img=720,219.6]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529993.png[/img]

然后上传该sql文件,注意需要改后缀名为png
[img=720,211.68]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529994.png[/img]

然后sql备份处填写上文件名,利用../让体系跨目录读取png图片
[img=720,406.7480577136515]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529995.png[/img]

然后查看payload上的1.jsp是否成功天生。
[img=720,218.16]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529996.png[/img]

访问的时候失败了,无法解析jsp,jspx等文件,但是服务器确实有写入了jsp文件
[img=720,174.96]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529997.png[/img]

得到了两个前置条件

  • 需要知道体系的绝对路径
  • 体系下得开启其他能够解析的应用(如另外一个java体系在其他端口上,但是能够解析jsp,就可以通过该cms的漏洞在其他体系上写webshell,也算是一个任意文件写入,做到了"隔山打牛")
0x6 默认密码

一个比较轻易忽略的点,通常admin的默认密码管理员基本都会在部署网站之后马上修改,但是假如类似有几个账户的情况下,管理员可能会忽略掉其他用户的默认密码。这里可以直接看sql文件。在其sql文件下发现有两个默认账号一个是admin,一个是read。
[img=720,383.04]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529998.png[/img]

read登录成功
[img=720,246.96]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406261529999.png[/img]

0x7 总结

本次代码审计强化学习了白+黑的方式,更加简单的找出了漏洞,有些地方还短缺一些思路,比如0x5rce那一块,想着是不是可以写一个class文件达到rce的效果。大概覆盖掉原本的xml文件之类的利用,不允许上传jsp,jspx文件是否可以通过上传war包来举行getshell。总之以为还有诸多不足,篇幅关系记载到这。
更多网安技能的在线实操练习,请点击这里>>
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

千千梦丶琪

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表