一点闲话:
web一天白打工,这次的蓝帽几乎就是取证大爹们的主场,web题一共只有两道,一道题简单的fastjson1.2.62反序列化
加一道读内存和pickle反序列化
,思路都不复杂,但属实是被环境问题整麻了…不管怎么说还是记录一下吧
Ez_gadget
这个题有点麻瓜,我不管在本地还是题目环境下unicode绕过rmi
等协议的关键字后都不会发出连接请求,但是赛后问了下其他一些师傅很多都是用成功unicode绕过的(无话可说),不知道为什么unicode绕过修改ldap
关键字失败了但是经过atao师傅
指导说可以直接用换行绕过的方法绕过ldap
链接的检测,试了一下换行确实每次都没问题
file_session
这个题环境搞心态,不知道为什么一直不会读取到session中的data,赛后问了几个师傅都是说本地是可以打通的,但是到题目环境就没成功过,下面是我本地测试的POC构建过程.
队伍完整WP见奇安信攻防社区: 2022蓝帽杯初赛WriteUp
题目内容:听说有一个快的json组件有危险,但是flag被我放在了root的flag.txt下诶,你能找到么?
jar包附件下载:https://share.weiyun.com/v3yXxl87
题目源码逻辑很简单,就是一个绕过后的fastjson反序列化
首先要构造一个str满足hashCode
相同但是字符不同
构造方法直接将第一个字符ascii码大小-1,第二个字符ascii码大小+31,以下为简易的构造脚本,原理可以看Java 构建 HashCode 相同的字符串
拿到符合条件的str
参数后,构造fastjson反序列化的input
参数
将str和input通过POST传输进行测试
使用JSONReader
探测确认反序列化确实可用,然后使用fastjson 1.2.62(一幕环境fastjson版本)的黑名单绕过exp:
但是需要变一下,以绕过jndi
,rmi
,ldap
,\x
的过滤,可以使用unicode编码(其实也可以使用16进制\x,但是这里\x
被过滤了)
此外对于远程资源加载的Pattern.compile
匹配我们可以使用换行%0a
完成绕过
结合使用工具JNDIExploit
最终反弹shell拿到flag
详细操作可参考https://www.anquanke.com/post/id/232774
题目内容:这里可以下载“海量”的图片,不知道有没有你喜欢的图片。
根据题目提示可知有个/download路由可以任意文件读取,得到/app/app.py
源码
内容不多,就两个点:
/download
路由可以指定文件和偏移进行文件内容读取/admin_pickle_load
路由会反序列化session中的data数据所以我们要伪造session,那么首先就要获取SECRET_KEY
,这里用的是内存读取
解题步骤就是
/proc/self/maps
获取内存情况然后从/proc/self/mem
读取指定偏移的内存数据SECRET_KEY
的UUID下载内存数据到./save
目录下:
dump.py
对内存数据进行UUID正则匹配,获取全部UUID存放到./keys
文件中:
grep.py
通过./keys
逐个取出key然后结合工具flask_session_cookie_manager生成伪造的session(里面有要反序列化的data数据)后全部存到sessions数组中,再逐个带着生成的session访问/admin_pickle_load
进行反序列化(注意提前打开监听)
poc.py
这里注意使用工具flask_session_cookie_manager
伪造session的时候必须要和题目环境的python大版本相同(python2或python3,小版本可忽略),它们使用的脚本和生成的session是不一样的
按照下面顺序执行就能获得反弹的shell了:
窗口1:
窗口2: