前言
这个系统是前两年在一个内网遇到的,当时顺手试了一个admin登陆之后再没有然后了,最近发现有大佬分享关于这个系统的漏洞,于是就把自己当初看的几个漏洞分享一下,系统比较简单,漏洞点很多,不要做坏事哦。
审计过程
先找系统指纹,到底是海康威视的还是SPON世邦的傻傻分不清楚,不管怎样先梭哈再说。
网上随便找了个安装包,安装过后界面如下
程序的目录差不多是这个样子的,我们想要的Web服务就在Wnmp
目录下
安装过后的Web页面差不多就是这个样子,PHP写的
弱口令
系统安装过后,会有一个admin/admin的默认密码
源码拿到本地搜了一下admin关键字发现js
里面留了一个后门的账号administrator/800823
任意文件读取
搜了一下fopen
函数,找到php/exportrecord.php
找到一处任意文件读取,且downname
参数没有任何过滤
命令执行
同样搜索exec
关键字,找到ping.php
文件中有一处执行命令的地方。
ping.php
页面接受的参数同样没有过滤,且是直接拼接执行的,用|
拼接一下就可以了
文件上传点1
找一下关于获取文件信息的接口,搜一下$_FILES
,定位到addmediadata.php
文件
代码如下:
这里可以手动指定上传路径,并且可以构造目录传越
只要我们上传的文件小于500m就可以正常上传,后面也没有对文件做任何的过滤
文件上传点2
同理找文件上传的方式,定位到my_parser.php
文件比较简单,没有任何过滤。
文件上传点3
addmediadatapath.php
文件同理上前面的几个差不多,也是没有过滤直接拼接的路径导致路径穿越
文件上传点4
addscenedata.php
也是将../images/scene/
和文件名拼接了
文件上传点5
busyscreenshotpush.php
这个就和之前有点不一样。
文件落地位置在file_put_contents($imagefile, base64_decode($content))
这里base64解密的内容来自我们传入的imagecontent
其中落地文件名由这几个参数控制的
最后imagename
需要满足这个条件1_2_3.php
文件上传点6
uploadjson.php
接口,接收了两个参数分别是文件内容和文件名,文件名可以拼接路径穿越。
声明:该漏洞已通报给相关单位修复,本文章仅供代码审计学习