要找出HTTP服务器的漏洞,先要确定这是用的什么服务器软件。
我发现 404 response 的 Reason-Phrase 是“Site or Page Not Found”,而不是最常见的”Not Found”。搜索“Site or Page Not Found”发现这很可能是某个早期版本的 goahead 服务器程序。
搜索可知 goahead 程序在早起有很多bug,甚至包括远程执行任意代码的漏洞。不过直接试用执行远程代码的漏洞失败了…
有一天突发奇想,能不能从固件升级包中找到 goahead 的版本信息呢?于是下载了一个 firmware 的 bin 文件,用 Binwalk 打开后,找到了 goahead 的可执行文件。此时终于可以确定服务器端软件用的就是 goahead 了。
不过开发方也不是拿来就用的,它们似乎注释掉了源代码中关于 goahead 版本信息的代码,这就很恶心了。好消息是这个 goahead 软件是开源的,不过官方 repo 里只有从2.5版至今的代码历史,但根据可执行文件中的内容推测,摄像头中的 goahead 是一个早于 2.5 版的版本。为什么官方不提供更早的版本管理信息呢?看源代码,我才之前是用 svn 管理的代码,后来在迁移到 git 时直接复制进来,放弃了 svn 时代的代码历史。现在官网也不提供更早版本的下载了,无奈之下在 github 上找到了几个包含早期 goahead 版本的 repo,从中提取出了几个离散的早期版本的 goahead。有趣的是,我无论如何也找不到1.x版本的 goahead,我猜这个软件是进入2.x时代开始才改名叫 goahead 的吧。
那么,我是怎么根据可执行文件推测程序版本的呢?说来惭愧,用的是一个很土很低效的方法。
首先,goahead 是一个 c 语言编译出来的程序。c 语言的编译器我不是很了解,但是直觉上来讲,编译后常量字符串应该原样储存在可执行文件体内。搜索发现事实符合我的猜测,而且编译器会就近把同一个原文件中出现的字符串按顺序放在相邻的位置。
根据以上信息,我通过比较代码的变更历史,找到了一些仅出现在特定版本中的字符串和它们的排列顺序,最终确定我的摄像头使用的是2.1.4到2.1.8之间的某个版本的 goahead。
根据这个版本信息,我找到了几个可能可用的 goahead 的漏洞信息,但这些漏洞信息都只说漏洞适用于2.1版本,没有小版本信息,没办法只好根据代码推测漏洞是否依然可用了。
你好!
我能跟你学习技术吗?可以留下你的联系方式,或者QQ我2655780380。谢谢了。
我不搞黑客技术的= =
你去看雪论坛问问看吧。
惊现粉丝团。
这个话题还有后续吗?
这是找错了人的,显然是我并不提供的别的东西的粉丝= =
这个话题应该是没有后续了。当时我比较无聊,现在手头有很多比这个有趣的内容想做。
本来安全漏洞查询利用呀,静态分析代码找可供攻击的内容之类信息安全分类我就不是很喜欢,因为这种知识的时效性极强。可能你花了100个小时做没有任何知识积累的体力重复劳动之后,终于找到了一个有用的点,然后90天后这仅有的一点点收获就再也不存在于世上了。
花时间做的事在我看来都是投资,我比较喜欢回报长期有效的项目,所以理财的话我可能会买网上宣传的很凶的那种香港长期投资保险吧(首先,我得有能拿来买保险的钱……)