常规的题解这里就不说了,可以参考这位师傅的https://www.jianshu.com/p/d20168da7284
这里我曾经写过一篇关于flask中debug模式的利用文章,这篇建议配合下面文章一起食用,效果更佳
debug模式
事实上,一个flask应用如果开启了debug模式,我们除了调试中返回debug报错,直接在应用根目录url输入/console,可以直接进入debug调试,但是我们需要服务端生成的PIN码,经过尝试这个码是不可以爆破的,关于生成的机制可以看我曾经写的一篇文章。
题解
回到这个题目上,师傅们都说了flask客户端session伪造的问题,但是很少有人关注debug模式下产生的更具危险性与破坏性的命令执行。
除去生成PIN码一些固定的内容,要构造PIN码我们还需要知道
1.服务端主机用户
2.服务器flask应用中app包的绝对路径
3.machine-id
4.网卡地址的
服务端主机用户可以通过构造软连接来查看/etc/passwd来查看,那么flask中app报的绝对路径呢?我们知道pyhthon下载的第三方包在Linux下的存放地址是在相应的目录下的/usr/local/lib/python2.7/site-packages/app.py
但是我们不知道python的版本就只能爆破。不过性欲的是我们生成/proc/self/environ的软链接,压缩后上传返回的信息可以看到python版本,那么剩下的就好解决了。
machine-id通过构造/etc/machine-id可以解决,同样可以由/sys/class/net/eth0/address的值计算出网卡mac地址的十进制值
之后使用上面的脚本就可以计算出PIN码,进入debug模式,相当于直接拿到了shell
什么session伪造不需要的,软连接不让查看flag?直接读取flag就行了!
复现题目的时候看到了开启了dubug模式,于是联想到曾经学习过flask-pin的生成流程,就想到了这个题目,算是一个非预期解吧。
记录一下自己的学习过程,如有错误还请师傅们指出,一起进步学习