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!