内容简介:挖坑必须填,虽然已久过去比较久了,但是我还是得简单写一下。这个题目一共4个考点,文中图借用了参赛者的WP。我一向出代码审计相关的题目,所以一般都直接给源码。打开源码,并简单浏览页面,发现后台登录用白名单限制了IP。
挖坑必须填,虽然已久过去比较久了,但是我还是得简单写一下。
这个题目一共4个考点,文中图借用了参赛者的WP。
我一向出代码审计相关的题目,所以一般都直接给源码。打开源码,并简单浏览页面,发现后台登录用白名单限制了IP。
这其实是第一个考点,来源于之前遇到的一个案例:拿到目标的源码后发现无法访问,但在源码(Nginx配置文件)里找到了白名单的IP段,其中就包括目标办公网的IP。然后对这些IP进行扫描,发现了一些漏洞。
这个题也类似,登录的时候会爆出白名单的IP,其中有一个外网IP:
对这个IP进行扫描,发现开放了5000端口,这个端口运行的是debug模式的bookhub。我的原意是模拟了一个开发者,在本地(办公室)及线上运行了两个同样的系统,只是线上关闭了debug模式。
这里面我获取IP用的是 X-Forwarded-For
,很多人认为XFF一定可以伪造,其实不然,原因懒得说。
这是出本题的目的。其实已经有师傅说的比较清楚了:
http://blog.evalbug.com/2018/08/07/flask_decorator_sequence/
被Flask的 @route
装饰器修饰的函数,将作为一个view被外面访问。如果这个view需要鉴权,则增加 @login_required
修饰器。
但如果 @login_required
加在外层,将没有任何意义:因为 @route
只会将自己修饰的方法放入路由中。
Flask-Session将session序列化后存入redis,如果控制redis,将可以执行任意命令。这也是我从之前遇到的案例里提取出来,可以参考这几篇文章:
- https://www.leavesongs.com/PENETRATION/zhangyue-python-web-code-execute.html
- https://www.leavesongs.com/PENETRATION/getshell-via-ssrf-and-redis.html
第一篇文章是通过 redis 未授权访问控制redis,第二篇文章是通过SSRF控制redis。这个题目里面是通过redis.eval的任意 lua 代码注入来控制redis,其实核心没太大差别。
redis.eval注入点出现在debug模式下,用户可以清空redis中除了自己的sessionid以外其他所有的session。为了不多次读取redis,所以用到了redis.eval执行一个lua循环,其中自己的sessionid是拼接进去的。
我们需要向redis中注入一个session,然后带上sessionid访问,触发 python 反序列化,最终执行任意命令。
python反序列化有几个点要注意:
- python2.7和3默认protocol变化,所以你需要用python3生成payload
- windows和 linux 下os是不一样的,所以你需要用linux生成payload
- payload中有一些控制字符,所以你需要用lua代码来表示
这些坑慢慢试一下也就解决了,不再赘述。
整个题目都是用了一些老考点,但我自认为还是比较贴近实战的,因为几个知识点都是比较常见的错误,也有遇到案例。
一些其他人的WP:
以上所述就是小编给大家介绍的《Real World CTF 2018 bookhub 总结》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Everything Store
Brad Stone / Little, Brown and Company / 2013-10-22 / USD 28.00
The definitive story of Amazon.com, one of the most successful companies in the world, and of its driven, brilliant founder, Jeff Bezos. Amazon.com started off delivering books through the mail. Bu......一起来看看 《The Everything Store》 这本书的介绍吧!