命令注入与dvwa中的Command Injection

news2024/11/25 0:58:50

一、什么是命令注入?

即 Command Injection,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。

攻击与代码注入不同,因为代码注入允许攻击者添加自己的代码,然后由应用程序执行。 在命令注入中,攻击者扩展了执行系统命令的应用程序的默认功能,而无需注入代码。

注入原理:

黑客将构造好的命令发送给web服务器,服务器根据拼接命令执行注入的命令,最后将结果显示给黑客。

在Web应用中,有时候会用到一些命令执行的函数,如php中system、exec、shell_exec、passthru等对用户输入的命令没有进行限制或者过滤不严导致用户可以执行任意命令时,就会造成命令执行漏洞。

1.1、system()

执行外部程序,并且显示输出

test.php内容如下:

<?php
$whoami=system('whoami',$retval);
echo $retval; //外部命令执行后的返回状态
?>

访问test.php,输出如下:

test.php内容如下:

<?php
$host= $argv[1];
system("ping ".$host);
?>

使用PHP执行php test.php www.baidu.com

如果恶意攻击者输入以下命令php test1.php '|ls',则会造成任意命令执行:

1.2、 exec()

执行一个外部程序

test.php内容如下:

<?php
//输出运行中的php/httpd进程的创建者用户名
//(在可以执行"whoami"命令的系统上)
echo exec('whoami');
?>

访问test.php,输出如下:

1.3、 shell_exec()

通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。

test.php内容如下:

<?php
$output=shell_exec('ls');
echo"<pre>$output</pre>";
?>

访问test.php,输出如下:

1.4、 passthru()

passthru() 函数与 exec() 函数类似,执行外部程序并且显示原始输出。

1.5、 popen()

打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。

popen ( string $command , string $mode ) : resource
参数:
command:命令。
mode:模式。

二、命令注入的防御措施

  1. 采用白名单,或使用正则表达式进行过滤。

  1. 对输入不要让用户可以直接控制eval()、system、exec、shell_exec等函数的参数。

  1. 在进入执行命令函数和方法前,对变量进行过滤,对敏感字符进行转义。

三、绕过及技巧

3.1、命令拼接符

  • |:管道符,将一条命令的标准输出作为另一条命令的标准输入

  • &:后台任务符,命令从左到右执行,无论执行成功或失败,使命令在后台执行

  • &&: 逻辑与,只有前面的命令执行成功了,才会执行下一条命令

  • ||: 逻辑或,只有前面的命令执行失败了,才会执行下一条命令

  • ;: 分号,linux特有,从左到右按顺序执行命令(linux)

  • 反斜杠:c\at fl\ag

3.2、特殊技巧

  • `: 反引号,当命令被解析时,会先执行反引号里的命令(linux),例如ping -c 4 127.0.0.1`sleep 6`

  • $(command): 命令替换(linux)

  • $IFS: 特殊变量,默认值为:空白(包括:空格,tab, 和新行)。并不是所有shell都支持

  • */?: 通配符,可以利用通配符cat */passwd

  • []/{}: 正则的范围,cat e[a-z]c/passwd 、cat e{t,c}c/passwd

  • 利用变量:a=ca;b=t;c=/etc/passwd $a$b $c

  • 使用编码:echo "base64" | base64 -d | bash

  • %1a - 一个神奇的角色,作为.bat文件中的命令分隔符

  • 拼接:(sy.(st).em)(whoami)

四、dvwa中演示Command Injection

环境:

dvwa: 192.168.11.135 dvwa版本 Version 1.9 (Release date: 2015-09-19)

kail机器:192.168.11.156

4.1、LOW级别

代码:

输入:127.0.0.1,返回如下

若是出现乱码,修改/var/www/html/dvwa/includes/dvwaPage.inc.php,将 utf-8 全部替换成 gb2312。

输入:127.0.0.1&ifconfig,返回如下

输入:127.0.0.1 && dir,返回如下

4.2、Medium级别

代码:设置了黑名单 将 && 和 ;进行了转义。可以用 & 或 | 绕过

输入:127.0.0.1&ifconfig 或者 127.0.0.1 & ifconfig 或者 127.0.0.1 & dir

4.3、High级别

代码:设置的黑名单更详细,但是仔细看上面转义的字符 发现 | 后面有个空格

输入:127.0.0.1|ifconfig 或者 127.0.0.1 || ifconfig

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

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

相关文章

用队列实现栈

题目&#xff1a;225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09;准备工作这题明确说明了需要用队列来实现栈&#xff0c;介于C语言没有队列的库&#xff0c;所以在此之前我们需要用调用之前学的队列&#xff0c;详见队列typedef int QDataType;typedef struct Queu…

Ubuntu上安装 Hadoop 3详细过程(验证+填坑总结)

Ubuntu上安装 Hadoop 3 前提条件&#xff1a; Python 推荐3.8JDK 推荐1.8 解压安装 sudo tar -zxvf hadoop-3.3.0.tar.gz -C /usr/local cd /usr/local sudo mv hadoop-3.3.0 hadoop sudo chown -R hadoop ./hadoop 配置环境变量 vim ~/.bashrc # hadoop export H…

云原生安全系列 5:ETCD 安全加固

引言 etcd是一个强一致性的分布式键值存储&#xff0c;它提供了一种可靠的方式来存储需要被分布式系统或机器集群访问的数据。通过 raft 算法它能在网络分区期间优雅地处理领导者的选举&#xff0c;并能容忍机器故障&#xff0c;甚至在领导者节点上。除此之外&#xff0c; etc…

存储过程的基础知识

本文来简单说下存储过程的基础知识 文章目录概述什么是存储过程存储过程的优缺点概述 mysql官网提供的储存过程&#xff1a;https://www.mysqlzh.com/doc/225/499.html 什么是存储过程 简单的说&#xff0c;存储过程是一条或者多条SQL语句的集合&#xff0c;可视为批文件&…

Windows下更改yarn的安装位置,减小C盘占用

Windows下更改yarn的安装位置&#xff0c;减小C盘占用 绷不住了&#xff0c;yarn的C盘占用太高了&#xff0c;我这C盘感觉以后会受不了&#xff0c;太大了~~&#xff08;捂脸~~ nnd&#xff0c;撸他&#xff0c;更改yarn的位置开始&#xff01; 先看看yarn目前的位置 检查当前…

「自控原理」2.4 信号流图与梅逊公式、闭环传递函数

本节引入了信号流图以及梅逊增益公式&#xff0c;可以据此快速对系统进行化简 本节引入了闭环传递函数的概念&#xff0c;并介绍了常用的闭环传递函数 文章目录信号流图的基本概念信号流图与方框图的关系从结构图绘制信号流图从信号流图绘制结构图梅逊(Mason)增益公式Mason公式…

Workfine5.0扩展功能——如何识别身份证信息?

哈喽&#xff0c;我是办公助手小W&#xff0c;又到了跟大家分享办公小技巧的时候啦&#xff01; 最近Workfine5.0最新版本上线后&#xff0c;大家最感兴趣的就是它的扩展功能了&#xff0c;今天要跟大家分享的就是如何实现身份证信息的提取。 首先咱们先要知道如何下载安装扩…

(第五章)OpenGL超级宝典学习:缓冲

缓冲 前言 本篇在讲什么 关于OpenGL数据缓冲的相关内容 本篇适合什么 适合初学OpenGL的小白 想了解OpenGL缓冲对象的同学 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 具有全流程的图文…

使用OpenCV透视变换技术实现坐标变换实践

1. 概述 1.1. 需求 在局部空间&#xff08;无GPS定位&#xff09;视频监控过程中&#xff0c;把视频识别到物体位置&#xff0c;投射到空间平面坐标系中&#xff0c;获取物体在局部空间的平面坐标。 1.2. 解决方案 使用图像透视变换技术。 1.3. 透视变换概念 透视变换是指…

链路追踪组件Skywalking使用

前言Skywalking是一个国产开源框架&#xff0c;2015年由吴晟开源 &#xff0c; 2017年加入Apache孵化器&#xff0c;其用于追踪多微服务模块调用之间日志的追踪&#xff0c;协助程序员进行排除问题Skywalking架构Skywalking架构图大概如下SkyWalking OAP&#xff1a; SkyWalkin…

如何格式化U盘?以及优盘格式化的恢复方法

我们经常使用U盘来进行存储和传输数据&#xff0c;使用时间久了&#xff0c;可能需要我们进行优盘格式化。需要注意&#xff01;优盘格式化之前&#xff0c;记得对里面的数据进行备份&#xff0c;防止数据清空造成不必要的损失。 如何进行U盘格式化&#xff1f;格式化优盘后&a…

“深度学习”学习日记。误差反向传播法--加法层、乘法层、激活函数层的实现

2023.1.16 1、加法层、乘法层&#xff1a; 前两篇文章都在讲述理论&#xff0c;今天实现代码操作&#xff1a;关于加法节点&#xff0c;乘法节点的内容在这篇文章。 https://blog.csdn.net/m0_72675651/article/details/128695488 在以后的学习中&#xff0c;将把构建神经网…

AHOcoder声码器

AHOcoder声码器 目前最常见的声码器有WORLD&#xff0c;STRAIGHT&#xff0c;&#xff27;riffin_Lim等&#xff0c;AHocoder算是少见的&#xff0c;但也可以学习一下。 代码下载网址&#xff1a;AHOcoder 简介 AHOcoder 语音声码器由 Daniel Erro 在巴斯克大学的 AHOLAB 信…

若依配置教程(一)运行若依系统

一、下载源代码 若依的源代码是开源的&#xff0c;所以我们在若依的官方网站即可进行下载&#xff0c;若依的官网是&#xff1a;http://doc.ruoyi.vip/ruoyi-vue/&#xff0c;进入官网后&#xff0c;会显示代码下载的地址&#xff1a;https://gitee.com/y_project/RuoYi-Vue&a…

【进阶】Bean作用域和生命周期

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录一、通过⼀个案例来看 Bean 作⽤域的问题1. 被修改的Bean案例2. 原因分析二、作用域Scope定义1. Bean的六种作用域&#xff08;重点&#xff09;1&#xff09;singleton2&#xff09;prototype3&#xff09;request4…

JVM——类加载与字节码技术(2)

三、编译期处理 所谓的 语法糖 &#xff0c;其实就是指 java 编译器把* .java 源码编译为* .class 字节码的过程中&#xff0c;自动生成和转换的一些代码&#xff0c;主要是为了减轻程序员的负担&#xff0c;算是 java 编译器给我们的一个额外福利 【注意】以下代码的分析&am…

Python爬虫之基于 selenium 实现文献信息获取

目录初识 selenium网页分析代码实现踩过的坑最近有小伙伴后台跟我说&#xff0c;临近毕业&#xff0c;写毕业论文需要上知网查找大量的文献&#xff0c;但是一篇一篇看文献信息以及文献摘要又有点麻烦&#xff0c;能不能让我写一个爬虫去批量获取文献相关信息 我一听好家伙&am…

【算法】二叉树遍历

目录1.概述2.代码实现2.1.二叉树定义2.2.前序遍历2.3.中序遍历2.4.后序遍历2.5.层序遍历3.应用本文参考&#xff1a; LABULADONG 的算法网站 1.概述 &#xff08;1&#xff09;所谓遍历 (Traversal) 是指沿着某条搜索路线&#xff0c;依次对树中每个结点均做一次且仅做一次访问…

《从零开始编写一个直播服务器》 C++ 实现一个最简单的HTTP-FLV流媒体服务器

流媒体服务系列文章 文章目录流媒体服务系列文章前言一、http flv&#xff1f;二、使用步骤服务器代码总结前言 HTTP FLV通过http传输&#xff0c;时延可控制在2秒以内&#xff0c;浏览器可基于bilibili开源的flv.js(采用h5 mse技术)开发&#xff0c;比起rtsp、rtmp等免插件播…

Spring BeanPostProcessor

BeanPostProcessor&#xff0c;是bean的增强器&#xff0c;在bean初始化前后调用&#xff0c;常用的方法有postProcessBeforeInitialization和postProcessAfterInitialization&#xff0c;在Spring启动并初始化bean前后通过它们做一些扩展操作。 1、BeanPostProcessor 接口说明…