审计了挺多的cms了,也有挖出不少的CNVD,幸运的是还申请了1个CVE编号,第一个编号总归是有些许激动的;这篇审计小结,就当做是自己审计经验的小小总结吧
整篇文章会以漏洞类型进行一下小小的划分,当然都是个人比较热衷审计的那几种,并且结合之前的cms。由于整篇文章以文字叙述的部分占的很多,还是希望师傅们都一点耐心能够看完。
后台文件上传
1.后台设置
后台设置是一个容易存在文件上传漏洞的点,通常后台设置是能够上传网站站点logo的,并且部分的cms会把整个网站允许上传的文件类型写在后台设置当中,之前也是有遇到过这样的站点,一次攻防演练中的某系统就是后台可以修改上传的文件类型导致可以直接getshell。
以schoolcms为例
schoolcms
就存在后台设置处的文件上传点,如下图所示,简要说一下,这个点在跟进代码之后会发现他上传之后的文件名后缀直接从content-type
字段中以/
为分隔符进行了获取,并且文件名唯一都是html_logo
,所以就很轻易的绕过了上传文件的后缀,直接getshell了
小结一:代码中对上传文件之后的文件存储操作不当很有可能造成文件上传getshell
2.后台管理
后台管理的范围就很大像是后台的分类管理、权限管理等都有可能存在,主要还是要找存在文件上传点的地方,这里以fastadmin为例,也是我唯一的CVE编号的那个漏洞
当时在审计这个点的时候也不是特别的顺利,想看详细的分析的师傅可以直接去看那篇文章;这个点最终能被利用成功还是有一定的运气成分,这个点在限制上传的文件后缀和类型的时候逻辑写错了,本来应该是逻辑与把能够上传成功的文件类型限制的更死的,结果用了逻辑或,那么这个限制就形同虚设了,虽然限制了php,但是诸如phtml,php3等其他的都是能够解析php的;在后缀被限制的情况下可以尝试其他能够被解析的后缀,这很重要;此外,kali和ubuntu
的apache
环境,规则里是写了能够解析phtml
的,这和当初的积累的经验有关系,所以在当前搭建环境不能够解析某个后缀的shell
文件时可以搭建其他的web环境进行尝试。
小结二:对同样能够解析的不同后缀进行尝试,审计文件上传限制函数确认是否存在逻辑缺陷进而绕过,不同环境下的apache可能有不同的默认解析规则。
3.CMS更新/插件本地上传
这两个都是比较常见的,现在的CMS
为了便于使用,都是在后台写有更新文件上传功能或者插件本地上传的功能,一般的开发者对于这两种上传会比较随意,有些可能会限制上传的文件来源,只能是官方下载的,通过校验文件MD5值或者其他手段来防止压缩包文件被篡改。当然只有功能点还是不够的,还是需要进入到代码去进行分析,有些会只允许上传zip
,有些是rar
,并且在上传之后的函数中需要调用到解压缩的方法操作,像是PHP
原生类ZipArchive
。并且需要注意的是,有些会对压缩包和其中的shell文件名进行限制,还是需要去跟进代码,再去构造shell压缩包。下面的图中,这里就可以上传压缩包,通过方法中的解压缩操作进行getshell。
小结三:能够上传压缩包的地方能可能是潜在getshell的点,跟进代码审计确认是否有解压缩操作,并且压缩包结构或者其他需要满足代码检验要求。
文件写入
一般文件写入这种能够getshell的点,不会像是上面所提到的后台文件上传那样有明显的功能点,一般这种依靠文件写入来getshell的点,都是需要通过去审计代码的,在难度上会比较大,这有点类似于前端模板注入getshell那一类的漏洞。
以wuzhicms为例,这里没有功能点,就直接放代码图了
这个漏洞点,可以看到是一个在方法名为ueditor
的方法名,当然这其实和文件上传也有一点关系,因为ueditor
我们大家都知道是存在文件上传getshell的,所以会看这个方法也是有这个原因在。这个方法的主要问题就是,他分了两种情况,校验是不是存在submit
参数,在就会写入缓存文件,不在就会读取缓存文件,并且参数都是一样的,既然是这种情况,那么就可以先通过指定submit
参数来写入我们的shell代码,再通过去除该参数从缓存中读取缓存文件来进行getshell。
小结四:某些类似ueditor的函数,可能存在文件写入漏洞,对一些公开的编辑器漏洞要多了解掌握,类似编辑器的函数也不能放过。
任意文件删除
任意文件删除漏洞,在CNVD上并不是什么评分特别高的漏洞,但是我却比较热衷这个漏洞,因为这个漏洞如果利用得到的话是能够打一套组合拳来进行getshell的。
一般的CMS,只要后台存在文件删除的操作,一般来说存在这个漏洞的可能性都比较大。如下图所示,在其扩展模块的附件管理当中存在目录模式,能够看到当前默认路径下的文件名,并且在点击进入文件夹之后存在删除的功能。那么在这种情况下,只需要在删除的时候抓包,再定位到请求的API,定位到漏洞触发点,再审计代码,根据代码逻辑是否存在特殊字符的白名单或者黑名单限制,去尝试进行绕过,既然是任意文件删除,无非就是要结合路径穿越来进行,甚至某些CMS结合路径穿越能够删除系统文件。
再来说说为什么能够打组合拳,某些CMS可能在通过弱口令或者默认账号进入后台之后没办法getshell,如果存在任意文件删除漏洞,那么我们可以删除其安装之后校验是否安装过的锁文件来进行重新安装,结合安装界面诸如数据库名或者密码之类的可能通过闭合特殊字符写入shell的点,就能够getshell了。
小结五:不要忽视任意文件删除漏洞,抓住后台可以预览文件结构并且能够进行删除操作的功能点,很可能一套组合拳能够帮助getshell站点。
任意文件读取
从个人审计经验来看,一般存在任意文件删除的CMS,都会有任意文件读取存在;一般都是从后台模板处入手,模板文件都是会调用一些文件读取函数来进行文件内容读取的,所以通过后台模板的功能点来进行可能存在的漏洞点定位,会更快一点。此外可以结合file_get_contnets
之类的方法进行全局搜索,也能够帮助我们来进行定位和筛选。像是下面这个函数,里面的注释也写了获取文件内容,所以存在任意文件读取的可能还是比较大的。
小结六:任意文件读取漏洞从后台模板入手,读取漏洞可能能够帮助获取到一些关键名敏感信息进一步获取系统权限
总结
文章中的所有东西都是自己的一点总结,希望能够给师傅们审计CMS一点启发。
- 本文作者: joker
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/1035
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!