syctf-web-2023
4号的罗纳尔多
题目代码
1 |
|
重点在这个正则这里,这里的话是只能使用字母下划线和括号还有;
那么就可以猜出来这里是考察的使用函数来进行RCE
这里的话对序列化字符也有限制,就是不能使用O和a打头的,那么就只剩一种了,就是之前ctfshow出的一个题了 就是使用内置类 C打头的 C打头的内置类
(这里的a打头就是在O打头的基础上加个array()函数而已)
还把array打头的类给禁掉了,不过没事
这些类都可以使用
只不过Spl开头的相对于Array打头的多一个push()函数
所以说先构造一下链子
1 | $a = new evil; |
链子就构造完成了,但是这个执行命令的时候会有一个麻烦就是
eval($this->cmd.'givemegirlfriend!');这个后面会有一个字符串,并且;的会被替换掉,不能使用,所以这里的话就得使用一个新的方法
__HALT_COMPILER()函数来截断后面的非法语句,这个熟悉phar协议的师傅都知道,它是phar文件的文件标识,这个函数会中断php的执行,并且不会检查后面的语句,而exit()这些中断函数即使中断了也会检查后面的php语句,如果报错则会抛出错误,所以这里是不能用exit和die的。
然后因为这个只能通过函数方法来进行rce,那么这里就有两篇文章专门讲了这个
最后的payload
1 | $a = new evil; |
getallheaders()这个函数是得在apache服务器下使用的,nginx不行
成功执行代码
Confronting robot
这里的因为没有环境,所以就不复现了
这题的话是由预期解是主从复制 主从复制wp1 主从复制wp2
非预期2是修改用户属性 修改用户属性
Tasks
这是题目的项目地址 tasks
就是通过审计这个代码来发现漏洞利用点的
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ke1nys`Blog!






