这几天利节前的空闲时间刷了几噵buuctf上的题目,遇到一道开启了debug模式的flask发现了这道题目的两种解法,学习了一波flask开启debug模式下存在的打开安全问题题踩了不少坑,来和大家┅起分享一下
与师傅们的文章的区别在第10~19行,首先尝试打开/proc/self/cgroup文件读取第一行,并将/docker/字符串后面的内容作为该函数的返回值如果该文件不存在或者该值不存在,才会走入师傅们文章中提到的依次尝试读取”/etc/machine-id”,
可见第一行没有/docker这个字符串那么走入下面的流程,尝试读取/etc/machine-id
其值存在那么返回这个值,至此我们用于计算pin码的所有变量已经获得,就可以计算PIN码了这里直接借用一下kingkk师傅的exp:
那么尝试来获取該题目的pin码,依然需要获取6个变量首先是用户名,我采用的办法是读取/proc/self/environ环境变量的办法加密生成读取文件的payload:
第四个值getattr(mod, "__file__", None)
要注意,服务器上python2的安装路径和我们本地的可不太一样这可以从报错信息中看出:
最后是get_machine_id()的返回值,依照上面的处理逻辑我们需要先判断一下服务器上是否存在/proc/self/cgroup文件,可以看到该文件不仅存在而且第一行有/docker/字符串:
至此,所有参数获取完毕输入payload计算pin码:
然后就可以为所欲为了,唎如获得flag:
这次做题给我的经验可以用一句古诗来总结:纸上得来终觉浅绝知此事要躬行。做安全不能只停留在读懂别人的paper更不能只會用现成的exp,而是要加强实践动手能力提高代码分析能力,否则目标环境稍有变化就会不知所措
您投送的稿件违反了金色财经的投稿协议现已关闭您的投稿功能,如有异议请发邮件至进行申诉