- 这周主要复现了一下上个月打的vishwactf,算是打的第一个CTF比赛,写了MISC和web题的wp。
- 继续学习了反序列化各种魔术方法的触发、魔术方法的运行先后顺序、构造pop链,感觉要捡起JAVA的知识来,顺便把JAVA反序列化也学一下,以免以后熟练度下降
- 把计算机网络学到了讲课进度的下一章,操作系统的银行家算法,计算机体系结构的作业
vishwactf
通过一个题学会了SSTI
- 通过打比赛来学习知识点是最快,效率最高的。在打题的过程中,遇到不懂的知识点,现场学,现场利用,提升特别快,也更能记得住(及时写wp)
- flask模板注入:输入的内容被服务器渲染然后输出,形成SSTI模板注入漏洞。
注入思路:
随便找一个内置类对象用__class__
拿到他所对应的类
用__bases__
拿到基类(<class ‘object’>)
用__subclasses__()
拿到子类列表
在子类列表中直接寻找可以利用的类getshell(写脚本找第几个)
绕过技巧:
绕过括号、绕过逗号、绕过大括号
学会更多的加密方式
Twitter 隐写、rot47、维吉尼亚加密、md5、sha1
一个比赛就涉及这么多加密
熟悉这些加密的原理和典型特征,以后更好判断
通过jwt题熟悉hashcat
hashcat的基本使用和破解命令
蓝牙流量分析wireshark
套用王一航大神的脚本直接分析出键鼠的流量
php反序列化
魔术方法
__construct(),类的构造函数
__destruct(),类的析构函数
__call(),在对象中调用一个不可访问方法时调用
__callStatic(),用静态方式中调用一个不可访问方法时调用
__get(),获得一个类的成员变量时调用
__set(),设置一个类的成员变量时调用
__isset(),当对不可访问属性调用isset()或empty()时调用
__unset(),当对不可访问属性调用unset()时被调用。
__sleep(),执行serialize()时,先会调用这个函数
__wakeup(),执行unserialize()时,先会调用这个函数
__toString(),类被当成字符串时的回应方法
__invoke(),调用函数的方式调用一个对象时的回应方法
__set_state(),调用var_export()导出类时,此静态方法会被调用。
__clone(),当对象复制完成时调用
__autoload(),尝试加载未定义的类
__debugInfo(),打印所需调试信息
运行顺序
构造方法 => set方法(我们此时为类中并没有定义过的一个类属性进行赋值触发了set方法) => get方法 => isset方法 => unset方法 => isset方法 => 析构方法
析构方法在所有的代码被执行结束之后进行。
和文件包含漏洞结合
伪协议:
php://filter/read=convert.base64-encode/resource=