CALC-python和shell对字符的解析差异

news2024/12/23 19:00:51

好久没看题了,记录一道感觉还挺有意思的题目
一进去题目界面非常简洁,一个计算器在这里插入图片描述
这个简洁的界面,好像似曾相识,总感觉好像以前做题时遇到的ssti题目的界面,果断来一波ssti
在这里插入图片描述
emem有WAF,尝试下绕过,发现他过滤了好多ssti用到的字符或者关键字,于是决定找一找别的出路
在这里插入图片描述
看了下源代码,发现有个/calc路径
在这里插入图片描述
去那边看看发现站是python写的,然后还爆出了源代码,看到了waf的黑名单,真的麻了,ssti应该是很难走了,看看哪里有危险函数吧
在这里插入图片描述
这段应该就是这道题的核心了,可以看到我们传入的num会被waf过滤,然后才会到我们的eval函数里,这里我尝试了下num传一些python代码进去,这个黑名单太绝了,搞不定,果断放弃这条路,下面还有个os.system(log),我们来研究一下这个玩意。
log = “echo {0} {1} {2}> ./tmp/log.txt”.format(time.strftime(“%Y%m%d-%H%M%S”,time.localtime()),ip,num)这句话命令执行的最终效果应该是把时间,ip,num写到./tmo/log.txt里去,其中num我们可控,如果我们直接注入命令那他能执行吗?
在这里插入图片描述
这里我们注入的命令没有执行,不过也很合理,因为这里是个字符串,所以他直接写入log.txt里了,这时候如果我们用点linux命令执行的特性,让他知道这一串是我们想要执行的命令,效果会是什么样呢?
在这里插入图片描述
反引号可以用,但是这里用不了,被waf拉黑了,同时我们要注意一点num还会被扔到eval里去,直接扔一个字符串到eval里会报错,eval必须不报错才能走到我们的os.system(),我们传入的肯定会是一个字符串其内容不为python代码,但是又要让eval不报错,最好的办法就是用python的注释了。

python中第一种注释方法是用#,但在Linux中不会把#当作注释,所以就可以用这个方法绕过eval(),并成功到达os.system执行系统命令,而#前面一定要有东西,不然会报错。
在这里插入图片描述
很可惜这道题把#过滤了没法用,但python中还有个多行注释’‘’,我们可以用这个,同样,在linux中不会把’‘‘当成注释,他解析时会把前两个‘凑一对,因此在Linux中’’'等价于‘。
我们可以这么构造传参给num

'''ls'
whoami
'pwd'''

这样shell执行系统命令时就会是这样

'ls'
whoami
'pwd'

在这里插入图片描述
这样命令就成功逃逸出来了,然后扔到实际环境看看吧,因为实际环境中把空格给过滤了,所以要tab代替,填了它的url编码%09
在这里插入图片描述
emem样式应该是没问题的,但是没收到curl的请求,再把换行符也换成url编码%0a
在这里插入图片描述
剩下的部分就不多说了,这道题的学习到这里就结束了,主要是利用了python和shell对不同字符解析的差异来做的。

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

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

相关文章

C++ 实现守护进程

文章目录1.守护进程概念1.什么是守护进程2.守护进程的特点3.如何查看linux系统中已存在的守护进程2.守护进程编写的步骤3.示例1.守护进程概念 1.什么是守护进程 Linux Deamon守护进程是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或者等待处理某些事…

系统小工具API接口,免费好用

1、前言 系统小工具接口,可生成长短不重复id,可获取服务器标准时间。 查看接口完整信息:https://www.idmayi.com/doc/detail?id23 2、接口明细 注意:app_id和app_secret是临时秘钥,如果真正使用,需要去 ht…

ArrayList源码解析

ArrayList源码解析 简介 ArrayList 是一种以数组实现的 List,与数组相比,它具有动态扩展的能力,因此也可称之为动态数组。 ArrayList 线程不安全,除该类未实现同步外,其余跟 Vector 大致相同。 Java 泛型只是编译器…

赛先生的新旅行:昇腾AI带来的科学智能变革

《三体》动画即将开播,又一次引发了全球科幻迷的无限热情。提到《三体》,大家有很多深刻记忆。其中之一是三体人在入侵地球之前,首先是派智子锁死地球的基础科学进步,从而限制人类的整体发展。很多人会担心,物理、化学…

LeetCode题解12 (146,97) LRU缓存<HashMap + 双向链表>,二叉树的中序遍历

文章目录LRU缓存(146)完整代码解答:二叉树的中序遍历(94)完整代码解答:LRU缓存(146) 从题上看存在Key和Value因此我们采用HashMap来进行存储,这里我们采用HashMap双向链表来实现,我们需要实现里面的get,put方法。 我们需要先创建1个链表节点 //先定义一个节点类 class ListNode…

一个合格的程序员也是一名合格的侦探---Debug篇

调试 文章目录调试1.什么是bug?1.1bug概念1.2bug的起源2.什么是调试,调试的重要性2.1调式的概念2.2 调试的基本步骤2.3Debug版本和Release版本2.3.1Debug版本2.3.2Release版本2.3.3区别2.3.4同一代码在Debug和Release下的差别3.Windows下visual stdio的调…

ioDraw - 免费的在线图表制作工具

介绍: ioDraw是一款数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表,支持折线图、柱状图、饼图、散点图等 地址:https://www.iodraw.com/chart 特点: 图表…

springboot实现License证书的授权和许可到期验证

前言 在客户服务器部署软件项目后,为了项目版权管控或者对项目进行授权收费处理的,就需要实现项目的授权和许可验证。 在这里讲解的是使用 license证书 的形式实现授权和许可验证(已通过测试)。 主要是通过 IP地址、MAC地址、CP…

PyTorch - 线性回归

文章目录普通实现准备数据反向传播构建模型 实现实例化模型、损失函数、优化器训练数据评估模型普通实现 准备数据 import torch import matplotlib.pyplot as plt # 1、准备数据 # y 2 * x 0.8 x torch.rand([500, 1]) y_true 2 * x 0.8 # 2、通过模型计算 y_predict …

MyBatis面试题(2022最新版)

整理好的MyBatis面试题库,史上最全的MyBatis面试题,MyBatis面试宝典,特此分享给大家 MyBatis简介 MyBatis是什么? MyBatis 是一款优秀的持久层框架,一个半 ORM(对象关系映射)框架,它…

Kotlin 开发Android app(二十一):协程launch

什么是协程,这可是这几年才有的概念,我们也不用管它是什么概念,先看看他能做什么。 创建协程 添加依赖: implementation org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9implementation org.jetbrains.kotlinx:kotlinx-cor…

DCDC电感下方铜箔如何处理

挖:电感在工作时,其持续变化的电流产生的电磁波会或多或少的泄露出来,电感下方的铜箔受电磁波影响,就会有涡流出现,这个涡流,①可能对线路板上的信号线有干扰,②铜箔内的涡流会产生热量&#xf…

申请阿里云域名SSL证书步骤

1.【点击登录】 阿里云 2.选择 DV单域名证书 3.确定购买,支付。 4.完成后,跳转回控制台。 5.点击 证书申请。 6.填写域名、申请人姓名、手机号、邮箱、所在地 7、选择域名验证方式,官方提供了三种验证方式,根据自身情况选择其中…

【Linux】Linux的常见指令详解(下)

目录 前言 head/tail 命令行管道 date sort cal 搜索指令 find which whereis alias grep zip tar file bc history 热键 前言 之前讲了Linux的常见指令详解(上),这次终于把下也补齐了。如果对你有帮助还麻烦给博主一个…

Netty_05_六种序列化方式(JavaIO序列化 XML序列化 Hessian序列化 JSON序列化 Protobuf序列化 AVRO序列化)(实践类)

文章目录一、普通的序列化方式(bean对象有直接的java类)1.1 普通的java io byteArray输入输出流的序列化方式1.2 xml序列化方式(xml用来做配置文件,这样序列化出来长度很大)1.3 Hessian序列化方式(这个Dubbo中使用的序列化方式&am…

flask前后端项目--实例-前端部分:-3-vue基本配置

一、基本配置以及验证 1.基础环境:nodejs的安装配置以及注意事项 https://blog.csdn.net/wtt234/article/details/128131999 2.vue使用vite创建文件包的过程 创建项目 npm init vitelatest 根据提示一步步选择: 选择vue 进入项目目录,安装…

【计算机网络】网络层:IPV6

IPV4耗尽,使用具有更多地址空间的IPV6 IPV6特点: (1)IPV6地址128位,更大地址空间,可以划分位更多的层次 (2)IPV6定义许多拓展首部,可提供更多功能,但IPV6首部长度固定,选项放在有效载荷中 (…

打败阿根廷的究竟是谁

2022年卡塔尔世界杯正在如火如茶的进行着。在今年的世界杯中,有两个令人意外的点,一个是日本队击败的德国队,另外一点是沙特队战胜了实力强盛的阿根廷队。 有人说打败阿根廷队的不是沙特队,而是科技------"半自动越位"技…

某Y易盾滑块acToken、data逆向分析

内容仅供参考学习 欢迎朋友们V一起交流: zcxl7_7 目标 网址:案例地址 这个好像还没改版,我看官网体验那边已经进行了混淆 只研究了加密的生成,环境不正确可能会导致的加密结果对 (太累了,先缓缓吧,最近事比…

创建Mongo官方的免费数据库并使用VSCode连接

注册账号 https://cloud.mongodb.com/ 在这个平台注册账号,并登录 创建数据库 选择shared,其他要收费 导入样本数据 导入后会发现数据中多了很多sample数据,用于练习 创建访问用户 允许任何地址访问 如果需要任何IP地址都能访问&#xff…