当前位置:首页 > 时尚

渗透之c君黑暗欺骗

C君本名不叫C君。渗透他是君黑我前同事,在安全公司干了五年渗透测试,暗欺外号源于他总爱在靶场里用C段扫描起手。渗透去年秋天,君黑他接了个私活,暗欺去测一家做智能门锁的渗透初创公司。对方说得很客气:“帮我们看看系统有没有洞,君黑价格好商量。暗欺”C君没多想,渗透拎着笔记本就去了。君黑 那家公司办公区不大,暗欺二十来号人挤在开放工位里。渗透C君被安排在一张空桌前,君黑对面坐的暗欺是个戴黑框眼镜的运维,姓李。李哥全程没怎么说话,只在C君要Wi-Fi密码时抬头瞥了他一眼,慢吞吞地报了一串字符:“Zz@2023#Lock”。C君记下,连上,然后开始常规信息收集——子域名枚举、端口扫描、指纹识别。前半小时平淡无奇,门锁管理后台是套PHP写的,用了ThinkPHP框架,版本号藏在响应头里,5.0.23。C君心里咯噔一下,这个版本有个RCE漏洞,CVE-2018-1002015,网上PoC一大把。 他没急着打,先翻了翻前端代码。管理后台登录页有个“记住我”的勾选框,勾选后会把session存进localStorage。C君顺手点了下“忘记密码”,页面跳转后弹出一个邮箱输入框,他输入admin@lockcompany.com,回车。三秒后,李哥的手机震了一下。C君抬头,看见李哥低头看了眼屏幕,又抬头看他,表情没变,但手指在手机屏幕上划了一下。C君低下头,心里有数了——密码重置邮件是发给运维的,不是发给管理员的。 他绕开漏洞利用,转而翻了下门锁固件的更新日志。日志是公开的,挂在官网上,最近一次更新写的是“修复低电量状态下蓝牙广播密钥可预测问题”。C君把固件包下载下来,解包,提取出蓝牙通讯协议。协议没加密,明文传输,里面有个字段叫“device_key”,默认值全是“0000000000000000”。他拿自己手机装了官方App,添加设备时抓包,发现新设备首次配网会广播一个临时密钥,而那个密钥的生成算法用的是当前时间戳的低16位异或一个固定盐值。盐值就硬编码在固件里,偏移量0x2A3F,四个字节,0xDEADBEEF。 C君花了两小时写了个脚本,模拟门锁广播,伪造了一个“已配对”状态。然后他用App扫自己电脑模拟出的蓝牙信号,App直接跳转到了管理界面,没要管理员密码。他点了下“远程开锁”,对面那扇玻璃门“咔哒”一声弹开了。李哥猛地站起来,椅子往后一滑,撞在隔板上发出闷响。他盯着C君,嘴唇动了动,没出声。C君把笔记本屏幕转过去,上面显示着他伪造的设备ID和刚刚那次开锁记录。李哥慢慢坐下,掏出手机打了个电话。五分钟后,一个穿灰色卫衣的人从里间走出来,C君认识,是他们公司CTO,以前在甲方见过。 CTO没寒暄,直接说:“你刚才那下,我们后台日志里显示的是‘正常用户授权操作’。”C君点头:“因为我把设备ID改成了你们老板手机里那个,他今天早上九点开过一次门,我把时间戳往后推了四分钟。”CTO沉默了几秒,问:“还有别的吗?”C君合上笔记本:“你们那个‘访客模式’的临时密码,生成规则是固定种子加当天日期,我猜是MD5后取前六位。你们员工手册里写了初始密码格式,我不用猜。”他说完,从包里掏出一张纸,上面是打印好的六位数字。CTO接过去,看了眼,没说话。 后来C君跟我说,那单活他收了双倍钱,但对方提了个条件——签保密协议,并且把那个蓝牙漏洞的细节删干净。他没删,留了份加密备份在自己硬盘里。他说:“这行干久了,你会发现真正的漏洞不在代码里,在人的习惯里。那个李哥,他手机号就是Wi-Fi密码的一部分,他邮箱前缀是admin,他连重置密码的邮件都不设二次验证。我打进去靠的不是什么高级技巧,就是他们觉得‘智能门锁嘛,没人会闲得慌去逆向固件’。” 我问他后来还接这种活吗。他笑了笑:“接,但只接有明确授权的。上次那个CTO后来介绍了个做医疗设备的客户,说是他们心电监护仪也有类似问题。我去看了,那玩意儿的调试端口直接暴露在公网上,连个登录框都没有。”他顿了顿,补了句:“最讽刺的是,那家公司的官网首页写着‘用科技守护生命’。”

分享到: