安全性测试入门(二):Command Injection命令行注入攻击和防御

安全性测试入门(二):Command Injection命令行注入攻击和防御

本篇继续对于安全性测试话题,结合DVWA进行研习。

Command Injection:命令注入攻击。

1. Command Injection命令注入

命令注入是通过在应用中执行宿主操作系统的命令,来达到破坏目的的一种攻击方式。如果我们的应用程序将不安全的用户输入传递给了系统命令解析器(shell),那么命令攻击就有可能发生。

通常来说,由应用程序传递操作系统命令会赋有和应用一样的权限,所以如果没有合理防御机制会给系统带来很大危害。命令注入攻击漏洞是PHP应用程序中常见的漏洞之一。

命令注入和代码注入不同,代码注入的目的在于将外部代码注入应用程序本身,并随程序执行;命令攻击的对象是服务器的宿主机。

DVWA的相应模块中,有如下功能:应用提供了一个用来ping对象主机的功能。正常情况下,输入IP地址,返回命令结果。

在DVWA最低防御级别下,尝试进行攻击。

由于在windows cmd和linux shell条件下,都可以通过&&来串行执行命令,我们附上dir命令执行后:

可以看到dir命令被执行,并且打印出了其结果。

如果我们用更复杂的命令附在以上命令之后,基本都可以执行,包括创建删除文件等等,可以对宿主系统造成非常大的危害。

2. 防御机制

分别对比DVWA4个安全级别的后台核心代码:

Low:

代码使用shell_exec将用户输入执行ping命令,基本没有任何防御。

Medium:

使用黑名单机制,替换掉如“&&”和“;”这样的命令符号。但是这样简单的黑名单是很容易绕过的,比如“|”管道符就没有屏蔽。

High:

完善了黑名单机制,筛除了更多字符,但仍有可能绕开。

Impossible:

使用白名单机制替换掉黑名单,将用户输入的字符串重组为数组,依次遍历数组内元素,删除其中所有的非数字和“.”。这样就达到了防御命令注入的目的。

原文地址:https://www.cnblogs.com/ht22ht22/p/11660627.html

时间: 2024-10-11 21:09:27

安全性测试入门(二):Command Injection命令行注入攻击和防御的相关文章

DVWA系列(四)----Command Injection (命令行注入)

一.攻击模块2:Command Injection(命令注入) 命令注入攻击的常见模式为:仅仅需要输入数据的场合,却伴随着数据同时输入了恶意代码,而装载数据的系统对此并未设计良好的过滤过程,导致恶意代码也一并执行,最终导致信息泄露或者正常数据的破坏. PHP命令注入攻击漏洞是php应用程序中常见的脚本漏洞之一,国内著名的Web应用程序Discuz!.DedeCMS等都曾经存在过该类型漏洞. 二.源码分析 1.Low(低)级别 [html] view plain copy <?php if( is

(二)NS3如何编译、运行脚本和 Command Line命令行参数设置

二.编译.运行脚本和Command Line命令行参数设置 7. 编译和运行脚本主要步骤 1) 将编写的脚本复制到ns-3.22/scratch目录下(可以在ubuntu窗口界面直接复制) 进入ns3目录: /ns-3.22 $ cp examples/tutorial/first.cc  scratch/myfirst.cc将脚本复制到scratch目录下 2) 构建(编译) $ ./waf 3) 运行 $ ./waf --run scratch/myfirst (可能会有运行权限问题,可在r

【C语言天天练(十二)】命令行参数

C程序的main函数具有两个形参.第1个通常称为argc,它表示命令行参数的数目.第2个通常称为argv,它指向一组参数值. 指针数组:这个数组的每个元素都是一个字符指针,数组的末尾是一个NULL指针.argc的值和这个NULL值都用于确定实际传递了多少个参数.argv指向数组的第1个元素,这就是它为什么被声明为一个指向字符的指针的指针的原因.注意:通常第1个参数就是程序的名称. 示例: #include <stdio.h> int main(int argc, char **argv) {

如何解决GitHub冲突&lt;二&gt;:使用命令行解决合并冲突

如何解决GitHub冲突<二>:使用命令行解决合并冲突 原文地址:https://help.github.com/desktop/guides/contributing/syncing-your-branch/ 你可以使用命令行和文本编辑器来解决"合并冲突". 合并冲突往往会发生在以下情况: (1)多个代码更改发生在同一行代码上 (2)一个提交删除了某一个文件而另一个提交尝试去编辑该文件 1.解决同行代码竞争引起的合并冲突 为了解决一个由更改同行代码引起的合并冲突,你必须决

安全性测试入门 (三):CSRF 跨站请求伪造攻击和防御

安全性测试入门 (三):CSRF 跨站请求伪造攻击和防御 本篇继续对于安全性测试话题,结合DVWA进行研习. CSRF(Cross-site request forgery):跨站请求伪造 1. 跨站请求伪造攻击 CSRF则通过伪装成受信任用户的请求来利用受信任的网站,诱使用户使用攻击性网站,从而达到直接劫持用户会话的目的. 由于现在的主流浏览器比如火狐和谷歌,都倾向于使用单个进程来管理用户会话(比如我们在FF和Chrome中,当要访问一个新页面时,通常是通过新增浏览器页面来达到的,而不是新开一

dvwa全等级命令行注入

1.LOW等级命令行注入 在低等级的命令行注入没有任何的过滤,通过查看源码可以得知, step1:使用ping 127.0.0.1&&dir可以得出如下结果 step2:使用 ping127.0.0.1&net user可以得到如下运行结果 step3:使用ping 127.0.0.1|dir可以得到如下结果 ps:在这里有必要说一下逻辑运算符“&”和“|”都是什么意思 &&:代表首先执行命令a在执行命令b,但是前提条件是命令a执行正确才会执行命令b,在a执

Command Injection(命令行注入)

实战部分: 说明:这里我用的是OWASP的一个平台和DVWA 下面简单说一下安装方法(windows下):     先下载webscarab-current.zip(这个自带tomcat,还有一个下载方式是war文件,需要自己安装tomcat,建议使用第一个),地址为http://www.owasp.org/index.php/Category:OWASP_WebGoat_Project,解压到一个文件夹,运行webgoat.bat即可启动其自带的tomcat,通过访问http://localh

SuperSocket入门(四)-命令行协议

前面已经了解了supersocket的一些基本的属性及相关的方法,下面就进入重点的学习内容,通信协议.在没有看官方的文档之前,对于协议的理解首先想到的是TCP和UDP协议.TCP 和 UDP 是传输层协议.在Socket程序中仅仅定义了传输层协议是不能让网络的两端进行通信的.我们需要定义应用层通信协议把我们接收到的二进制数据转化成程序能理解的请求. 命令行协议是一种被广泛应用的协议.一些成熟的协议如 Telnet, SMTP, POP3 和 FTP 都是基于命令行协议的. 在SuperSocke

大开测试:性能-如何在命令行下启动Controller(连载21)

7.21  如何在命令行下启动Controller 1.问题提出 如何在命令行下启动Controller进行负载测试? 2.问题解答 习惯使用命令行操作的读者可能十分关心,Controller是否可以在命令行下通过指定运行的场景和相关参数也可运行呢?LoadRunner提供了Controller命令行运行方式.如果在C盘存在一个场景文件Test.lrs,就可以通过在命令行下执行类似“wlrun-TestPathC:\Test.lrs-Run”的命令进行负载测试.关于命令行部分的描述前面章节已经多