XXE漏洞学习

引入外部的DTD文档分为两种:

  1. 当引用的DTD文件是本地文件的时候,用SYSTEM标识,并写上“DTD的文件路径”,如下:
    <!DOCTYPE 根元素 SYSTEM “DTD文件路径”>
  2. 如果引用的DTD文件是一个公共的文件时,采用PUBLIC标识,如下方式:
    <!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文件的URL”>
    例如:
    <!DOCTYPE web-app PUBLIC “.//sun microsystems,Inc./DTD web application 2.3//EN” “http://java.sun.com/dtd/web-app_2_3.dtd”>

实验环境:
·xxe靶机,kali 以及win10
·xxe以及kali的网络连接都为NAT
·win10为实体物理机
一、目标信息收集
使用kali的nmap进行主机探测
XXE漏洞学习获得目标IP为10.10.10.144,对目标进行端口扫描
XXE漏洞学习目标IP只开放了80端口,访问一下试试
XXE漏洞学习直接访问的结果是apache的默认页面,对网页进行目录探测
XXE漏洞学习知道目标有个/robots.txt,访问一下robots.txt
XXE漏洞学习得知目标还有一个/xxe/页面,以及/xxe/admin.php
访问/xxe/
XXE漏洞学习
是一个登陆界面,再访问一下/xxe/admin.php,也是一个登录界面
XXE漏洞学习在/xxe/的登陆界面中,提交参数,抓取数据包看看,
XXE漏洞学习数据提交方式是通过xml形式进行提交,符和xxe标题,测试xxe漏洞
XXE漏洞学习<!DOCTYPE note [<!ENTITY test SYSTEM “file:///etc/passwd”>]>
并将<name></name>中的内容改为&test;
上面内容表示:通过读取/etc/passwd中的内容,将内容保存到test中,并通过<name></name>标签,将返回的内容显示出来,实现内容读取。如上图右侧数据部分的内容(http协议相关知识:从sorry……到数据包末的内容为数据部分)
“file:///etc/passwd” 通过php伪协议中的file:// 协议对“/etc/passwd”中的内容及进行读取。(file:// 是其中一个php伪协议中的一个伪协议)
确定可以使用xxe漏洞,接下来对admin.php进行读取(因为好像没有其他可以读的内容了,/etc/passwd文件中读取不到root的密码,root密码处为x,即密码保存在/etc/shadow文件中,没有相关权限是读取不到的)

XXE漏洞学习利用php的另一个伪协议进行admin.php文件的读取,攻击载荷为:
<!DOCTYPE note [<!ENTITY test SYSTEM “php://filter/read=convert.base64-encode/resource=admin.php”>]>
并将中的内容改为&test;
php://filter 为php伪协议的一种
convert.base64-encode/resource将读取的目标内容进行base64加密
结果为右侧数据部分的内容,将内容进行base64解码,得到明文内容

XXE漏洞学习找到php登陆部分的内容,分析:登陆时,直接将输入的密码进行md5加密,加密完成之后与正确密码的md5值进行比较,若账号相同(账号在红框上,且为明文),且密码加密的结果相同,则登陆成功。对密码进行解密(md5加密其实是解密不了的,因为是单向加密,只能通过彩虹表进行匹配,如果彩虹表不够强大,则找不到密码)得到登陆密码,[email protected]
XXE漏洞学习已知登陆密码为[email protected],登陆账号为administhebest
So,在/xxe/admin.php进行登陆,
XXE漏洞学习登陆之后点击Flag,之后
XXE漏洞学习XXE漏洞学习空的。。。。右键查看源码
XXE漏洞学习说是flag在这个里面
拿去base64解码,之后是一个路径利用file:// 协议进行对该文件的内容读取,得到flag