渗透测试——七、网站漏洞——命令注入和跨站请求伪造(CSRF)

渗透测试

  • 一、命令注入
  • 二、跨站请求伪造(CSRF)
  • 三、命令注入页面之注人测试
  • 四、CSRF页面之请求伪造测试

一、命令注入

命令注入(命令执行) 漏洞是指在网页代码中有时需要调用一些执行系统命令的函数例如 system()、exec()、shell_exec()、eval()、passthru(),代码未对用户可控参数做过滤,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击。
常见连接符如下:

A;B,# 先执行A,再执行 B。
A&B,# 简单拼接,A、B之间无制约关系
A|B,# 显示B的执行结果。
A&&B,# A执行成功,然后才会执行 B。
A||B,# A执行失败,然后才会执行 B。

命令注入漏洞的分类如下:

  • (1)代码层过滤不严
    商业应用的一些核心代码封装在二进制文件中,在 Web 应用中通过 system 函数来调用svstem( “bin/program – arg $arg”) 😮
  • (2) 系统的洞造成命令注入
    例如 Bash 破壳漏洞(CVE-2014 -6271)
  • (3)调用的第三方组件存在代码执行漏洞
    例如 WordPress 中用来处理图片的ImageMagick 组件、Java 中的命令执行漏洞 (Struts2/Elasticsearch Groovy 等)、ThinkPHP 命令执行等。

对于命令注入,可从以下几个方面进行防御:

  • 1、尽量少用执行命令的函数或者直接禁用。
  • 2、参数值尽量使用引号括,并在拼接调用 addslashes 函数进行转义
  • 3、在使用动态函数之前,确保使用的函数是指定的函数之一
  • 4、在进入执行命令的函数方法之前,对参数进行过滤,对敏感字符进行转义。
  • 5、在可控点是程序参数的情况下,使用escapeshellcmd 函数进行过滤;在可控点是程序参数值的情况下,使用escapeshellarg 函数进行过滤。

二、跨站请求伪造(CSRF)

跨站请求伪造(cross-site request forgery),也被称为 one-click attack 或者 session riding.通常缩写为 CSRF 或者XSRF,是一种挟制用户在当前已登录的 Web 应用程序上执行非本意的操作的攻击方法。
跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作 (例如发邮件、发消息,甚至财产操作,比如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了 Web 中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
在这里插入图片描述

三、命令注入页面之注人测试

将安全级别调整至 Low 级别,打开“命令注人”页面,查看源码,可以知道 Low 级别的代码接收了用户输入的 IP,对目标P 从主机服务器的角度进行 ping 测试。代码中对用户输人的IP 并没有进行任何的过滤,所以利用该漏洞进行命令注入。
网页在编辑时,要注意编码格式,使用UTF -8 格式时,中文相应地会出现HTML乱码。
在这里插入图片描述
在这里插入图片描述
可以利用&、&&、|、||等命令连接符,在 ping 完后再执行系统命令,如查看IP 信息、为服务器添加用户 等非法操作。
在这里插入图片描述
将安全级别调整至 Medium 级别,打开“命令注入”页面,查看源码,可以知道 Medium级别的代码在 Low 级别代码的基础上增加了对字符“&&”和“;”的过滤,但在做 Low 级别实验时,用的字符“&”并不在它的过滤范围中。
在这里插入图片描述
&& 和&的区别在于,&& 是执行完前面的命令后,再执行后面的命令;& 是不管前面的命令是否已执行,后面的都执行。
将安全级别调整至 High 级别,打开“命令注入”页面,查看源码,可知道 High 级别的代码进行了黑名单过涨,把一些常见的命令连接符给过滤了。黑名单过滤看似安全,但是如果黑名单不全,则很容易进行绕过。仔细看黑名单过滤中的“1”,其后面还有一个空格,于是用“1”或者“1”又可以绕过。
实际渗透中,命令注入可以用来修改上传文件的文件类型。利用“重命名”命令把上传的JPG 文件改成 PHP 文件。
在这里插入图片描述

四、CSRF页面之请求伪造测试

将安全级别调整至 Low 级别,打开“CSRF”页面。
在这里插入图片描述
页面功能是用户更新密码,但代码里没有对更改代码的合理性做验证。在界面中输入要修改的密码并用 Burp Suite 软件抓包,修改密码的 URL为:
在这里插入图片描述
在这里插入图片描述
这时攻击者可利用这个 URL,稍做修改,发送给受害者,并引诱受害者在登录网站的情况下点击,如 URL 修改为 http://192.168.217.130/dvwa/vulnerabilities/csrf/? password_new =harker&password_conf = harker&Change =%E6%9B%B4%E6%9%B9#,受害者点击链接后,就会在不知情下把登录网站的密码修改为“harker”。
为了隐藏攻击者发送的URL,可将URL链接写在网页里,发布在攻击者的网站上,当受害者无意中浏览攻击者的网站时原有的密码被修改。
将安全级别调整至 Medium 级别,打开“CSRF”页面。
在这里插入图片描述
Medium 级别比Low 级别多了一个验证:if(stripos($_SERVER HTTPREFERER门SERVER['SERVER NAME )! == false)。
验证受害者访问的网页与修改密码网页是否同一网站。这时含有 CSRF 的网页就不能放在攻击者的服务器上了,而需要利用文件上传的方式上传至与受害者访问修改密码网页的网站上进行访问。
在这里插入图片描述
High 级别的代码加入了 Anti - CSRF token 机制,用户每次访问修改密码页面时,服务器都会返回一个随机的 token。向服务器发起请求时,需要提交 token 参数,而服务器在收到请求时,会优先检查 token,只有 token 正确,才会处理客户端的请求。要绕过这个机制,就需要获得 token 值,这需要一定的网页编程基础,这里就不赘述了。

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

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

相关文章

基于ssm在线云音乐系统的设计与实现论文

摘 要 随着移动互联网时代的发展,网络的使用越来越普及,用户在获取和存储信息方面也会有激动人心的时刻。音乐也将慢慢融入人们的生活中。影响和改变我们的生活。随着当今各种流行音乐的流行,人们在日常生活中经常会用到的就是在线云音乐系统…

走迷宫(详细分析)

目录 一、课题描述 输入样例: 输出样例: 二、需求分析 输入的形式和输入值的范围: 输出的形式: 程序所能达到的功能: 三、概要设计 四、流程图 五 、代码详细注释 六、测试数据和结果 一、课题描述 以一个…

freeswitch webrtc video_demo客户端进行MCU的视频会议

系统环境 一、编译服务器和加载模块 二、下载编译指定版本video_demo 三、配置verto.conf.xml 1.修改配置文件 2.重新启动 四、MCU通话测试 1.如何使用video_demo 2.测试结果 五、MCU的通话原理及音频/视频/布局/管理员等参数配置 附录 freeswitch微信交流群 系统环境 lsb_rel…

lv11 嵌入式开发 IIC(下) 20

目录 1 Exynos4412下IIC控制器介绍 1.1 总览 1.2 特征 1.3 工作框图 1.4 其他内容介绍 1.5 四种工作模式寄存器流程 2 IIC寄存器详解 2.1 概述 2.2 控制寄存器 2.3 状态寄存器 2.4 地址寄存器 2.5 数据寄存器 2.6 其他寄存器 3 MPU06050 3.1 简介 3.2 MPU6050主…

HJ103 Redraiment的走法

题目: HJ103 Redraiment的走法 题解: dfs 暴力搜索 枚举数组元素,作为起点如果后续节点大于当前节点,继续向后搜索记录每个起点的结果,求出最大值 public int getLongestSub(int[] arr) {int max 0;for (int i 0…

data_loader返回的每个batch的数据大小是怎么计算得到的?

data_loader是一个通用的术语,用于表示数据加载器或数据批次生成器。它是在机器学习和深度学习中常用的一个概念。 一、data loader 数据加载器(data loader)是一个用于加载和处理数据集的工具,它可以将数据集划分为小批次&#…

内存学习——堆(heap)

目录 一、概念二、自定义malloc函数三、Debug运行四、heap_4简单分析4.1 heap管理链表结构体4.2 堆初始化4.3 malloc使用4.4 free使用 一、概念 内存分为堆和栈两部分: 栈(Stack)是一种后进先出(LIFO)的数据结构&…

AVFormatContext封装层:理论与实战

文章目录 前言一、封装格式简介1、FFmpeg 中的封装格式2、查看 FFmpeg 支持的封装格式 二、API 介绍三、 实战 1:解封装1、原理讲解2、示例源码 13、运行结果 14、示例源码 25、运行结果 2 四、 实战 2:转封装1、原理讲解2、示例源码3、运行结果 前言 A…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑电力-交通交互的配电网故障下电动汽车充电演化特性》

这个标题涉及到电力系统、交通系统和电动汽车充电的复杂主题。让我们逐步解读: 考虑电力-交通交互的配电网故障: 电力-交通交互: 指的是电力系统和交通系统之间相互影响、相互关联的关系。这可能涉及到电力需求对交通流量的影响,反…

回溯算法之N皇后

一 什么是回溯算法 回溯算法(Backtracking Algorithm)是一种用于解决组合优化问题的算法,它通过逐步构建候选解并进行验证,以寻找所有满足特定条件的解。回溯算法通常应用于在给定约束条件下枚举所有可能解的问题,如…

Git—文件添加查看删除修改

目录 1.添加文件—场景一 2.查看.git文件 3.添加文件—场景三 4.修改文件 5.版本回退 6.撤销修改 7.删除文件 1.添加文件—场景一 在包含.git的目录下新建⼀个ReadMe文件,我们可以使用 git add 命令可以将文件添加到暂存 区: ●添加一个或多个文…

Matlab数学建模算法之小波神经网络详解

🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 🔐#### 防伪水印——左手の明天 ####🔐 💗 大家…

存储成本降71%,怪兽充电历史库迁移OceanBase

怪兽充电作为共享充电宝第一股,业务增长迅速,以至于业务架构不停地增加组件。在验证 OceanBase 可以简化架构并带来更大的业务价值后,首次尝试在历史库中使用 OceanBase 替代 MySQL,存储成本降低 71%。本文为怪兽充电运维架构部王…

Docker 入门

Docker 入门 基础 不同操作系统下其安装包、运行环境是都不相同的!如果是手动安装,必须手动解决安装包不同、环境不同的、配置不同的问题 而使用Docker,这些完全不用考虑。就是因为Docker会自动搜索并下载MySQL。注意:这里下载…

【C++】输入输出流 ⑥ ( cout 标准输出流对象 | cout 常用 api 简介 | cout.put(char c) 函数 )

文章目录 一、cout 标准输出流对象1、cout 标准输出流对象简介2、cout 常用 api 简介 二、cout.put(char c) 函数1、cout.put(char c) 函数 简介2、代码示例 - cout.put(char c) 函数 一、cout 标准输出流对象 1、cout 标准输出流对象简介 cout 是 标准输出流 对象 , 是 ostrea…

端口被占用 --- 解决方案

问题描述 加速服务启动失败,443端口被magentproc(1576)占用。请关掉占用443端口的程序或者尝试使用系统代理模式。 问题解决 按下 win R 打开 输入cmd 输入命令 netstat -ano | findstr 443 找到 0.0.0.0:443 对应的端口 (1576) 按下 ctrl shift esc, 打开任务管…

综述 2023-IEEE-TCBB:生物序列聚类方法比较

Wei, Ze-Gang, et al. "Comparison of methods for biological sequence clustering." IEEE/ACM Transactions on Computational Biology and Bioinformatics (2023). https://ieeexplore.ieee.org/document/10066180 被引次数:1;研究背景&am…

力扣题:数字与字符串间转换-12.13

力扣题-12.13 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:442. 数组中重复的数据 解题思想:直接相除即可 class Solution(object):def optimalDivision(self, nums):""":type nums: List[int]:rtype: str"&qu…

Transformer 简介

Transformer 是 Google 在 2017 年底发表的论文 Attention Is All You Need 中所提出的 seq2seq 模型。Transformer 模型的核心是 Self-Attention 机制,能够处理输入序列中的每个元素,并能计算其与序列中其他元素的交互关系的方法,从而能够更…

再见了Future,图解JDK21虚拟线程的结构化并发

Java为我们提供了许多启动线程和管理线程的方法。在本文中,我们将介绍一些在Java中进行并发编程的选项。我们将介绍结构化并发的概念,然后讨论Java 21中一组预览类——它使将任务拆分为子任务、收集结果并对其进行操作变得非常容易,而且不会不…