说实话RWCTF实在不是给新手练手来的啊...本萌新当时稍微看了一些各种利用复现的文章,实在是觉得门槛好高。实战尝试做了Vision和Be-an-ActiveMq-Hacker,后者实在是不太会复现利用漏洞,前者做了一半了卡住,后面没做出来也没接着研究(到写这篇文章前),现在接着研究一下Vision这题
题目给出的压缩包包括环境搭建的docker以及启动脚本等,然后给出一个程序main_static和本地拿来试的伪flag.IDA打开main_static
但是nc连接的界面需要先解sha32,而且该界面的密码动态且限时,脚本求解(学姐提供)
脚本跑完之后终于进入main_static的程序,虽然程序中没有sys的直接调用,但是程序的输出应该是被重定向到shell了的,因为输入help中给出的被允许的指令ping,whoami等都是可以执行的那么我们精心构造一个payload应该就可以打通,审查代码中的过滤规则
(还有个Not Support4,后面会出现)
(居然(int)"||"按%c格式化输出时是&)
可以看到很多搞小动作的方法都被ban了,然后就一直想其他方法去拿full shell但是没什么头绪看了wp然后重新想了一遍,又试了下才知道问题在哪
首先IDA中的off_4020数组是可以使用的命令的列表,之前在想其他可以利用的地方就没注意到这里
可以看到date也可以使用,wp说有人用date -f /flag可以读取但是我的本地环境没有读到,可能是没配置好
那么对于Not Support4的检查就比较清楚了,其实是用strcmp检查输入s中检查是否有与命令列表off_4020相同的部分,长度为v13,对于v13的值一个是可以利用/x00截断,但是这里犹豫s2已经是截断到了命令的第一个空格的地方,所以可以构造一个巧妙的payload
wp的payload是sh -c "cat ./flag",利用了"showKey"和"sh -c /"cat .//flag/""的前两个字符相同,成功获取flag
总结
收获的话,应该意识到掌握linux的重要性了,后面打西湖的时候也狠狠的吃了大亏,光速学习去咯~