这期内容当中小编将会给大家带来有关XXE漏洞原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。XXE全称XML External Entity InjectionXML在引入外部实体的时候完成注入攻击称为XXE。那么它带来的危害有那些:1.DOS攻击2.SSRF攻击3免费云主机域名.使用file协议读取任意文件4.端口探测5.执行系统命令XML是一种用来传输和存储数据的可扩展标记语言。XML用于传输和数据存储。HTML用于显示数据。Dtd文档类型定义是一套为了进行程序见的数据交换而建立的关于标记符的语法规则。1.1 xml语法语法规则1.所有的XML元素都必须有一个关闭标签2.XML标签对大小写敏感3.XML必须正确嵌套4.XML属性值必须加引号“”5.实体引用:在标签属性,或者对应位置值可能出现符号,这些在对应的xml中都是特殊含义的,那么必须使用对应html的实体对应的表示:例如,if salary 如果把这个“if salary < 1000 then 1.2 xml结构XML 文档声明,在文档的第一行XML 文档类型定义,即DTD,XXE 漏洞所在的地方XML 文档元素1.3 XML DTD(文档类型定义)DTD的作用就是用来定义XML文档的合法构建模块DTD可以在XML文档内声明,也可以在外部引用。实例1.1:内部声明DTD实例1.2:外部声明DTD这个note.dtd的内容就是:DTD实体DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。实例2.1:内部声明实体实例2.2:外部声明实体外部实体用来引用外部资源,有两个关键字SYSTEM和PUBLIC两个,表示实体来自本地计算机还是公共计算机,外部实体的利用会用到协议如下:不同语言下支持的协议:参数实体参数实体只能在DTD中定义和使用实体,一般的话引用时%作为前缀。而内部实体是指在一个实体中定义的另一个实体,说白了就是嵌套的。实例:而里面引用的外部实体evil.dtd的内容:正因为外部实体支持的http,file等协议,那么就有可能通过以用外部实体进行远程文件读取。综上所述,xxe漏洞就是允许了引入外部实体的加载,从而导致程序在解析xml的时候,可以加载恶意外部文件,从而造成文件读取等危害。2.1 文件读取(有回显)xxe-php靶场演示:我们先看一下dologin.php代码libxml_disable_entity_loader(false);函数意思就是不禁止外部实体加载;file_get_contents()函数,把整个文件读入一个字符串中。LIBXML_NOENT: 将 XML 中的实体引用 替换 成对应的值LIBXML_DTDLOAD: 加载 DOCTYPE 中的 DTD 文件 通过php://input协议获取POST请求数据,然后把数据通过file_get_contents()函数,放在$xmlfile变量中。我们先抓包,看一下传输类型是xml,通过post传输的数据。然后看一下返回的响应包发现,响应包返回的信息中,有username的值admin。那么我么尝试构造payload来构造外部实体admin处的注入,利用协议读取文件成功读取了c盘下win.in文件。这种情况是提交请求后,响应有回显的时候。但是有时候没有回显的时候就可以使用Blind xxe。2.2 文件读取(无回显blind xxe)blind xxe虽然不回显信息,但是可以利用file协议来读取文件。对于这种情况,就可以用到参数实体了。用下面这个靶场演示一下靶场地址:https://www.vulnspy.com/phpaudit-xxe/在输入框输入构造的xxe代码,抓取请求包我们看到将我们提交的xxe代码,放在date里面,响应包没有返回我们要查询的信息,只有ok输出在页面上。对于没有回显,就要利用http协议将请求发送到远程服务器上,从而获取文件的内容。那么在我们自己的服务器上,写一个dtd文件然后在服务其上监听8081端口然后,我们将构造的xxe代码,输入到输入框并提交然后在vps看一下监听出现base64加密的数据,用base64解密内容:成功读取了passwd文件内容。上面构造的payload,调用了%remote ,%int ,%send三个参数实体。一次利用顺序就是通过%remote调用远程服务器vps上,我们常见的evil.dtd文件,然后%int调用了evil.dtd中的%file,而%file就会获取服务读取敏感文件,然后将%file的结果放到%send之后,然后我们调用%send,把读取的数据以get请求发送到服务器vps上,这就是外带数据的结果。2.3 端口探测正因为xml外部实体攻击利用的http协议,也就是说利用该请求探测内网端口的存活,从而可以进行ssrf攻击。构造代码:2.4命令执行前提是:在php环境中,如果说php扩展安装expect扩展,那么就能执行系统命令。构造代码:3.1 api调用是来自Jarvis OJ平台的一道web题型,地址http://web.jarvisoj.com:9882/看到题目说flag在/home/ctf/flag.txt中,那么就是访问这个目录了。首先,我们看一下地址入口,页面是一个提交框,点击go后,把输入框输入的信息,提交到文本框中看一下响应包中的提交数据包和响应包数据:发现,提交数据是以json格式提交的数据。那么对于这种提交方式,去尝试会不会解析xml,那么要修改一下Content-type为xml,然后写一个xml,看响应包解不解析:可以看到返回的响应数据包中,返回输入了内容,也就是说服务器成功解析,是由回显的xxe,那么我么那就构造paly了。用我们平常构造的代码,看是否能读passwd文件数据:构造paylaod果然成功读出了passwd的内容,那么就去访问flag.txt文件了,构造代码payload:看到成功获取了flag。3.2 vulnhub靶场这个靶场是透过我们平常渗透测试思路,信息收集,根据收集的信息查找漏洞,利用漏洞,一步步拿到flag。网站搭建,下载虚拟机,直接导入vm中就行,下载https://download.vulnhub.com/xxe/XXE.zip我们导入虚拟机后,需要密码账号进入,这里不需要。因为是虚拟机导入,就可以知道这个的ip地址:192.168.171.146,通过浏览器访问,出现apache2服务页面会不会含有其他目录呢,使用目录扫描扫描一下目录:发现robots.txt文件,访问一下:看到存在两个页面,访问xxe目录发现是一个登录页面,那么输入账号密码,看看响应包是什么数据看到通过xml传输数据,那么是不是可以利用xxe漏洞呢?那就尝试常用读取文件的payload:居然成功读取了,存在xxe漏洞。我们再查看一下,刚才robots.txt中的admin.php页面需要登录,那就利用xxe漏洞读取admin.php源。这里构造payload的时候,使用base64方法读取文件将响应包中的base64编码解码:看到登录页面的密码和账号,但是账号md5加密,解密就ok利用账号administhebest和密码admin@123 登录页面:页面出现flag,点击进去,页面跳转到flagmeout.php页面不显示,那么再利用xxe漏洞读取该文件内容然后把得到base64解密:成功拿到flag通过上面学习总结,xxe漏洞产生的原因是,允许加载了外部实体。那么要防御禁止外部实体加载。libxml_disable_entity_loader(true);将false不禁止外部实体加载,改为true禁止外部实体加载。上述就是小编为大家分享的XXE漏洞原理是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注云编程开发博客行业资讯频道。
相关推荐: Google社交梦之隐私问题
Google+从设想的第一天开始就考虑到隐私问题,而同样是隐私安全问题,加速了这个曾经全球第二大社交网络平台的覆灭。 经历了Google Wave、Google Buzz两款产品的失败,Google开始调整产品方向,转向用户隐私控制,而当时Facebook虽然…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。