1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
local http = require "http"
local json = require "json"
local shortport = require "shortport"
local stdnse = require "stdnse"
local table = require "table"
description = [[
Connects to a VLC Streamer helper service and lists directory contents. The
VLC Streamer helper service is used by the iOS VLC Streamer application to
enable streaming of multimedia content from the remote server to the device.
]]
---
-- @usage
-- nmap -p 54340 --script http-vlcstreamer-ls <ip>
--
-- @output
-- PORT STATE SERVICE
-- 54340/tcp open unknown
-- | http-vlcstreamer-ls:
-- | /Applications
-- | /Developer
-- | /Library
-- | /Network
-- | /Pictures
-- | /System
-- | /User Guides And Information
-- | /Users
-- | /Volumes
-- | /bin
-- | /bundles
-- | /cores
-- | /dev
-- | /etc
-- | /home
-- | /mach_kernel
-- | /net
-- | /opt
-- | /private
-- | /sbin
-- | /tmp
-- | /usr
-- |_ /var
--
-- @args http-vlcstreamer-ls.dir directory to list (default: /)
--
author = "Patrik Karlsson"
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
categories = {"discovery", "safe"}
portrule = shortport.port_or_service(54340, "vlcstreamer", "tcp")
local arg_dir = stdnse.get_script_args(SCRIPT_NAME .. ".dir") or "/"
local function fail(err) return stdnse.format_output(false, err) end
action = function(host, port)
local response = http.get(host, port, ("/secure?command=browse&dir=%s"):format(arg_dir))
if ( response.status ~= 200 or not(response.body) or 0 == #response.body ) then
if ( response.status == 401 ) then
return fail("Server requires authentication")
else
return
end
end
local status, parsed = json.parse(response.body)
if ( not(status) ) then
return fail("Failed to parse response")
end
if ( parsed.errorMessage ) then
return fail(parsed.errorMessage)
end
local output = {}
for _, entry in pairs(parsed.files or {}) do
table.insert(output,entry.path)
end
table.sort(output, function(a,b) return a<b end)
return stdnse.format_output(true, output)
end
|