西湖论剑IOT-inkon
BabyShark IoT安全 223浏览 · 2025-03-25 06:41

西湖论剑IOT-inkon

题目给出了完整的镜像内核以及启动脚本

image-20250124200959236.png
图片加载失败


这里加了一个映射端口用来调试,因为启动的虚拟机是和宿主机共用ip的,这里映射了80端口和2222端口

image-20250124201210716.png
图片加载失败


可以通过scp来传输文件,比如

题目考点在cpio-root/etc_ro/lighttpd/www/cgi-bin目录下的login.cgi文件里面

对文件进行逆向分析

首先有一个跨站请求的检查

image-20250124201438771.png
图片加载失败


需要保证HTTP_REFERER字段不为空,使得函数返回值为0

继续检查对发送的POST请求长度做了检查,长度不能大于0x1f3

image-20250124201730147.png
图片加载失败


这里获取发送的报文的属性值page

image-20250124201811881.png
图片加载失败


之后对其匹配,而漏洞正是发生在Goto_chidx函数里面

image-20250124201838460.png
图片加载失败


可以看见再次进行了匹配,获取wlanUrl的值,并通过sprintf函数放到栈中,但是空间只有0x80大小,而v6的值用户可以控制,那么这里就存在未授权,且栈溢出的可能

image-20250124201943762.png
图片加载失败


EXP

本人通过本地调试发现不好绕过前面那个跨站请求的检查,设置环境变量不管用,那么还又一种思路是直接启动环境,然后发送报文

原本想通过libc里面gadget来ROP的但是发现官方写的wp并不是利用libc地址,而是通过libwebutil里面的system函数来获取shell的,因为

调试发现当利用system里面的system函数的时候

image-20250124202524019.png
图片加载失败


这里gp寄存器会变成一个不可写的地址导致后面会报错(这里不知道为什么正常索引索引不到)

尝试变成可写地址之后发现会出现gp变成0的情况

image-20250124205603265.png
图片加载失败


而通过libwebutil也需要伪造gp

image-20250124211122626.png
图片加载失败


合理构造偏移跳转到do_system

image-20250124211348598.png
图片加载失败


image-20250124211413551.png
图片加载失败


最终效果

image-20250124211430481.png
图片加载失败


image-20250124211441788.png
图片加载失败


调试方法

对于这种一闪而过的调用还是利用无限跳转法来实现卡住进程

然后利用如下命令来实现远程连接

image-20250124211620888.png
图片加载失败


image-20250124211757028.png
图片加载失败


总结

当libc里面的gadget不好构造的时候也可以考虑别的so文件里面的关键函数和gadget

1 条评论
某人
表情
可输入 255
fsrm
2025-04-14 03:29 0 回复
膜拜