首页 > 其他分享 >opcache导致的RCE复现

opcache导致的RCE复现

时间:2024-02-01 19:44:43浏览次数:26  
标签:bin 文件 system 复现 RCE php id opcache

前言

RCE得搭配着文件上传的点来进行利用

环境搭建

用docker搭个php7的环境,作者用的php7.0
docker run -itd --name php7 -p 8083:80 php:7.0-apache
安装opcache拓展

  1. 进入docker容器:docker exec -it 容器id /bin/bash
  2. 安装opcache:cd /usr/local/bin && docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache
  3. 重启apache:cd /etc/init.d && ./apache2 restart

查看phpinfo,出现这个说明安装成功:

修改一下php.ini,应用opcache:
cd /usr/local/etc/php && cp php.ini-development php.ini
然后改php.ini:

最后重启一下docker容器,配置生效:

opcache原理

Opache是php中一个生成缓存文件的拓展,当我们访问一个php文件时,他会产生一个缓存文件,下次访问该php文件时,就会直接根据缓存文件回显页面,查看tmp下,已经生成了缓存文件:

RCE操作

想要rce,我们就得覆盖掉生成的bin文件,首先得计算出文件夹的这个system_id,也就是8431e96e6adfc8fc75ad38a0f6a7eb4e,那么这个system_id怎么计算呢?偷别人的脚本(bushi : https://github.com/GoSecure/php7-opcache-override
非常的方便快捷

现在得生成我们的恶意bin文件去覆盖掉原先的bin文件,先分析一下bin文件的结构:

010可以看出,bin文件的文件头是OPCACHE+system_id,由于opcache有个时间戳验证,如果我们伪造的时候,时间戳对不上是不会生效的,上图中的40h处就是时间戳的值,点击40h处,然后看Signed Int64的值,到时直接替换这个值就行了

我们在自己服务器上生成一个恶意的bin文件,改掉时间戳跟system_id的值,上传覆盖phpinfo.php.bin,访问覆盖成功(我这里语法写错了,难崩)

php8的opcahce

在php8后,system_id的生成方式发生了改变,所以7的脚本用不了了,但是8是有规律的,其实我们只要能获取到php的正确版本,就能自己搭建生成一个完全一样的system_id,其余操作都是相同的,唯一不同的就在于system_id的生成

标签:bin,文件,system,复现,RCE,php,id,opcache
From: https://www.cnblogs.com/F12-blog/p/18001985

相关文章

  • Codeforces Round 922 (Div. 2)
    基本情况A题当时做完提交一直编译错误后面发现是语言选择错误,浪费了五六分钟,然后去做B没想到去看C看了样例感觉可以做,结果干了好久都没出来,倒回去看B还是没做出来,感觉全程很紧张不知道为什么,脚一直在抖。A.BrickWall没啥好说的,就是全部放竖直的,实在不能放了再放横的而且把横......
  • Codeforces Round 921 (Div. 1)
    Preface被折纸狠狠地腐乳了,但好在手速够快光速写完前两题成功把Ohara_Rinne这个号也打上橙了之后就不开其它小号打了,也差不多该尝试去向上挑战了,不然一直呆在舒适圈内也没啥提升的说A.DidWeGetEverythingCovered?直接把序列自动机建出来,不妨设状态\((x,y)\)表示构造了长......
  • Codeforces Round 922 (Div. 2)
    CodeforcesRound922(Div.2)比赛链接A.BrickWall思路简单的模拟,要想实现最高的稳定性,就横着放就可以了,因为长度必须大于等于2,所以最后即使不能被2整除,也可以算在里面Code#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongvoidsolve(){ intn,......
  • Codeforces Round 922 (Div.2)
    题目链接点这里CF1918ABrickWallvoidsolve(){lln,m;cin>>n>>m;cout<<n*(m/2)<<endl;}CF1918BMinimizeInversions注意到,当其中一个排列有序时,总的逆序对数量最少()今天找个时间补上证明对于任意一对\(i,j\)位置,其可能的逆序对总......
  • Codeforces Round 922 (Div. 2) A-C
    这次还好,虽然还是不够满意,因为D题没写出来。。A一个明显的贪心,都竖着放就好了#include<bits/stdc++.h>#definelllonglongusingnamespacestd;inlineintread(){ charc=getchar();inta=0,b=1; for(;c<'0'||c>'9';c=getchar())if(c=='-')b=-1; for(;c......
  • Codeforces Round 922 (A-C)
    第一次打Div2,对我来说还是很难,写篇博客记录一下~A题题意:T组输入,每组输入一个n,m,代表nm大小的地板,以1k大小的地砖完全覆盖地板(k>=2,且同一地板中k可以不同)。将水平放置的地砖与垂直放置的地砖相减的值定义为稳定性,求最大的稳定性是多少。思路:尽可能的使得水平放置的地砖多,垂......
  • Fatsjson1245漏洞复现
    Fastjson1245利用简介这是一个利用fastjson1245反序列化漏洞的靶场。漏洞复现点击登录,进入登录页面,进行用户名和密码的输入。在bp中就可以发现登录使用的是json格式的post请求。发送到Repeater中,也可以看到请求头中Content-Type为application/json。使用{"@......
  • idea-Project Structre设置 Sources:显示项目的目录资源,那些是项目部署的时候需要的目
    idea-ProjectStructre设置ProjectStructreProject Projectname:定义项目的名称;ProjectSDK:设置该项目使用的JDK,也可以在此处新添加其他版本的JDK;Projectlanguagelevel:这个和JDK的类似,区别在于,假如你设置了JDK1.8,却只用到1.6的特性,那么这里可以设置语言等级为1.6,这个是......
  • Simple-BEV_ What Really Matters for Multi-Sensor BEV Perception_
    title:"Simple-BEV:WhatReallyMattersforMulti-SensorBEVPerception?"tags:-paperSimple-BEV:WhatReallyMattersforMulti-SensorBEVPerception?ZoteroAbstractBuilding3Dperceptionsystemsforautonomousvehiclesthatdonotrelyo......
  • Xamarin.Android中使用TaskCompletionSource创建阻塞式的对话框
    代码如下usingAndroid.OS;usingAndroid.Views;usingAndroid.Util;usingActivity=Android.App.Activity;namespaceKangHuiXinCai_FangDai_AndroidScanner{publicclassDialog_SettingPassword:Dialog{TaskCompletionSource<DialogResu......