针对Besder网络摄像头的逆向分析和漏洞挖掘

来源:岁月联盟 编辑:猪蛋儿 时间:2020-01-29
Bytes: ["0x0606"]
BINARY FILE "PK/u0003/u0004/u0014/u0000/u0000/u0000/b/u0000/u0000/u0000 /u0000/xE6/xE5/x90/u0618/u0002/u0000/u0000/u0004"
Bytes: ["0x0608"]
BINARY FILE "PK/u0003/u0004/u0014/u0000/u0000/u0000/b/u0000/u0000/u0000 /u0000/xC4/u0003#/"/u0018/u0000/u0000"
Bytes: ["0x066c"]
我还获得了一些包含设置转储的zip文件,而有趣的是其中不包含我对摄像头尚不了解的任何内容。
BINARY FILE "/xFF/xD8/xFF/xE0/u0000/u0010JFIF/u0000/u0001/u0001/u0000/u0000/u0001/u0000/u0001/u0000/u0000/xFF"
Bytes: ["0x0618"]
0x0618为我提供了来自摄像头的图像,对后来的分析很有用。
总的来说,现在我已经对设备有了一些有趣的见解,及时我还没有模糊所有命令以及未经身份验证的用户帐户!
用户帐户“默认”最终会让我清楚地了解到发生了什么,由于它只有一般权限,所以它的大多数响应都没有多大意义。
Command results: Started at 2019-04-18 20:07:00 -07:00
Total time: 00:51:34.994305000
"{ /"AliveInterval/" : 0, /"ChannelNum/" : 0, /"DeviceType /" : /"DVR/", /"ExtraChannel/" : 10976316, /"Ret/" : 205, /"SessionID/" : /"0x000042C9/" }/n"
Bytes: ["0x03e8"]
"{ /"Name/" : /"/", /"Ret/" : 102, /"SessionID/" : /"0x00000000/" }/n"
Bytes: ["0x03f2", "0x080e"]
"{ /"Name/" : /"OPMonitor/", /"Ret/" : 103, /"SessionID/" : /"0x00000000/" }/n"
Bytes: ["0x0585"]
"{ /"Name/" : /"OPPlayBack/", /"Ret/" : 103, /"SessionID/" : /"0x00000000/" }/n"
Bytes: ["0x0590"]
"{ /"Name/" : /"OPTalk/", /"Ret/" : 103, /"SessionID/" : /"0x00000000/" }/n"
Bytes: ["0x059a"]
"{ /"Name/" : /"GetSafetyAbility/", /"Ret/" : 103, /"SessionID/" : /"0x00000000/", /"authorizeStat/" : null }/n"
Bytes: ["0x0672"]
"{ /"Name/" : /"OPRecordSnap/", /"Ret/" : 100, /"SessionID/" : /"0x00000000/" }/n"
Bytes: ["0x07fc"]
"{ /"Name/" : /"/", /"Ret/" : 105, /"SessionID/" : /"0x00000000/" }/n"
Bytes: ["0x0852"]
"{ /"Name/" : /"/", /"Ret/" : 106, /"SessionID/" : /"0x000066E9/" }/n"
Bytes: ["0x02ee", "0x0192", "0x00a7", "0x0e27", "0x0041", "0x01c1", "0x0032", "0x0fa6", "0x03f7", "0x0740", "0x0d85", "0x0c3e", "0x095d", "0x06ee", "0x02b7", "0x08ac", "0x0db9", "0x08d6", "0x00bb", "0x0b37", "0x0606", "0x0996", "0x0cfb", "0x0afa", "0x00ba", "0x0974", "0x0d51", "0x0906", "0x0f42", "0x05e2"]
用Radamsa进行模糊测试
Radamsa是一种基于fuzzer的通用变异形式。这款fuzzer适用于无经验的测试人员,因为它易于安装和使用,它可尝试根据输入结构的不同变化的引擎随机识别数据结构和变异。从我之前进行的行为模糊测试中,我知道默认情况下可以使用哪些命令,因此我应该对那些特定项目进行模糊测试,以查看是否会使它们行为异常。
File.open("./rsrc/op_monitor.txt", "w+") do |file|
file.print Command::OPMonitor.new(session_id: 0xabcdef00_u32).to_s
end
File.open("./logs/radamsa/op_monitor.log", "w+") do |file|
puts "Testing connection"
socket = MagicSocket.new("192.168.11.109", 34567)
socket.login "default", Dahua.digest("tluafed")
xmm = Command::OPMonitor.new
socket.send_message xmm
puts "SENT: #{xmm.message}"
reply = socket.receive_message
puts "GOT: #{reply.message}"
1000.times do |x|
begin
socket = MagicSocket.new("192.168.11.109", 34567)
socket.login "default", Dahua.digest("tluafed")
message = `radamsa ./rsrc/op_monitor.txt`
file.puts "SENT: #{message.inspect}"
socket.send message
reply = socket.receive_message
file.puts "GOT: #{reply.message.inspect}"
rescue e : MagicError::SocketException
puts "SOCKET DOWN! #{e.inspect}"
raise e
rescue e : MagicError::Exception
file.puts "ERROR: #{e.inspect}"
puts "ERROR: #{e.inspect}"
rescue e
file.puts "BAD ERROR: #{e.inspect}"
puts "BAD ERROR: #{e.inspect}"
end
end
end
我先向OPMonitor发出一条消息,然后将其输出到文件中,然后通过Radamsa发送该文件,然后将其模糊数据发送到摄像头。在大约100次左右的尝试后,最终找到了一种方法,可以在重新启动摄像头时中断客户端和摄像头服务器约120秒。此字符串通过ping,连接等方式关闭了摄像头,这意味着摄像头本身实际上已重新启动。

上一页  [1] [2] [3] [4] [5] [6] [7]  下一页