【29】WEB安全学习----XML注入

一、XML基础

简介:

XML:可扩展标记语言。XML被设计用来是传输和存储数据,XML是一种“元标记”语言,开发者可以根据自己的需要创建标记的名称。

XML结构

XML是一种树结构,从“根部”开始,然后扩展到“枝叶”,XML文档必须有根元素。

<?xml version="1.0" encoding="UTF-8"?>   //XML声明(可选部分),定义XML的版本和编码
<note>      //描述文档的根元素
<to>Tove</to>   //4个描述根的子元素
<from>Jani</from>    //4个描述根的子元素
<heading>Reminder</heading>    //4个描述根的子元素
<body>Don't forget me this weekend!</body>    //4个描述根的子元素
</note>    //定义根元素的结尾

XML语法规则

  • XML 文档必须有一个根元素
  • XML元素都必须有一个关闭标签
  • XML 标签对大小写敏感
  • XML 元素必须被正确的嵌套
  • XML 属性值必须加引号

PHP解析XML

<?php
    $xml_str=$_POST['xml'];
    $xml=simplexml_load_string($xml_str);  //将XML字符串解释为对象
    print_r($xml);

二、XML注入例子

XML注入攻击,和SQL注入的原理一样,都是攻击者输入恶意的代码来执行自身权限以外的功能。

可测试XML文档中子元素各属性值是否存在注入点。

PHP代码

<?php
  header('content-type:text/html;charset=utf-8');
  if(isset($_POST['xml'])){
    $xml_str=$_POST['xml'];
    $xml=@simplexml_load_string($xml_str);  //将XML字符串解释为对象
    if(!$xml){
      die('XML文档格式有误,请检查');
    }
    $username=$xml->username;
    $passwd=$xml->passwd;

    $mysqli=new mysqli();
    $mysqli->connect('localhost','root','root');
    if($mysqli->connect_errno){
      die('数据库连接失败:'.$mysqli->connect_error);
    }
    $mysqli->select_db('user');
    if($mysqli->errno){
      dir('打开数据库失败:'.$mysqli->error);
    }
    $mysqli->set_charset('utf-8');
    $sql="SELECT username,paawd FROM users WHERE username='{$username}'";
    $result=$mysqli->query($sql);
    if(!$result){
      die('执行SQL语句失败:'.$mysqli->error);
    }else if($result->num_rows==0){
      die('查询结果为空');
    }else {
      $array1=$result->fetch_all(MYSQLI_ASSOC);
      echo "用户名:{$array1[0]['username']},密码:{$array1[0]['paawd']}";
    }
    $result->free();
    $mysqli->close();
  }
?>

注入测试

和POST-SQL注入一样,只是提交数据格式换成了XML格式而已。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值