-
-
[原创]mqtt 协议pwn入门(ciscn2025 final mqtt)
-
发表于:
2025-7-23 20:31
3951
-
[原创]mqtt 协议pwn入门(ciscn2025 final mqtt)
第一次参加打进国赛的总决赛,早听闻过决赛会出一些工控和车联网类型的题目,也大致了解过有mqtt协议类型的pwn题,并使用python的paho库进行客户端交互,但在比赛前全网搜,没有搜出来现成的exp交互板子。。。(明明我前段时间才看到过,不知道是不是啥原因下架了)
再加上自己对mqtt以及车联网这块的东西非常不熟,导致决赛的时候交互的脚本出现了各种离谱的错误,通过赛后反复拷打AI,和自己本地调试研究,总算是搞懂了大体的交互逻辑和思路。可惜,比赛的时候我太菜了,这题被打烂了都没做出来。。。不然就一等奖了,感觉对不起队友,队里大手子都发力那么多了,还是没进国一,我太菜了55555~~ 遗憾~
可以理解为提供mqtt服务的代理服务器,每个客户端都要连接它,通过subscribe(订阅)topic(主题),并在指定的topic上发布消息,所有与这个broker相连接的,订阅相同topic的client都能收到发布者客户端发布的消息。broker承担的主要就是一个中继器的作用,负责接受发布者的消息,并分发给订阅相同topic的client。
都需要连接到broker,通过给broker发布指定topic的消息,让其它订阅相同topic的client收到
client1,2,3,4同时连接broker,client1,2,3订阅topic"diag" ,这时client4发送topic为"diag" msg="hello"给broker,broker会向同时订阅topic="diag"的client1,2,3发送这个消息

1.使用安装 Mosquitto MQTT
2. 启动服务并设置开机自启
3.测试服务(在终端开两个窗口)
窗口1 订阅主题
窗口2 发布消息
如果一切顺利,可以在窗口1中看到对应的消息
4.更改配置文件
ciscn2025 mqtt
题目给压缩包看起来东西非常多,我一开始还怕像去年国赛的题目,需要手动patchelf调半天,但实际上只要放在一个文件夹下就可以直接运行

题目总体的符号表没去,逻辑也很清晰,这里做了些函数重命名
main函数

我们直接往下看关键点,getmessage函数做了什么

接着跟进start_routine函数,看看它做了什么
先做了鉴权,然后根据我们的cmd传入的值,执行不同的操作,arg是我们传入的参数

漏洞点存在于当cmd为set_vin的时候,存在明显的命令注入

仔细分析逻辑可以知道,程序开始读了/mnt/VIN的文件内容,并将它赋值到dest全局变量中
在鉴权环节,会将我们的dest中的内容进行处理,给到s2,然后比对我们的auth和s2是否一致 

但在sub_1E1A中,会将dest的内容发布到 topic="diag/resp" 中,我们只需要在exp中接受dest,并采用sum2hex的处理方法计算出auth即可


再来看看check_arg对我们的传入的参数做了哪些限制,反正我比赛的时候没看懂,靠猜了,估计是限制可见字符或者数字字母之类的。问问AI说是限制为数字和字母


[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!
最后于 2025-7-23 21:54
被sparkle666编辑
,原因: