首先,我们听说最多切实其实定是SQL注入,实在注入的方法还有很多,比如说:xml、soap、邮件头、crlf、代码实行。
为什么会涌现这种漏洞了?
由于这些系统并没有设计很好的过滤过程,以是产生漏洞,导致数据透露。
接下来是实验教程:
首先我们这里是LOW级别,我们查看页面的源代码:
<?php if( isset( $_POST[ 'Submit' ] ) ) { // Get input $target = $_REQUEST[ 'ip' ]; // 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 \"大众<pre>{$cmd}</pre>\"大众; } ?>
这段代码紧张功能是通过PING命令,PING用户输入的IP地址。
我给大家阐明一段这个代码:
第一行:通过isset函数判断是否为POST供应的值
第二行:通过POST供应的值发送给target变量(但是这里没有任何过滤)
接下来是if语句
If判断系统是否为Windows,如果是CMD赋值为ping target,如果不是CMD赋值为ping -c 4 target
末了利用shell_exec实行cmd。
我们用&&实行
192.168.220.133&&net user(先实行ping 192.168.220.133 后实行net user)
Net user:账户名 查看账户属性
我们可以看到账户名为administrator,解释用&&可以实行命令
接下来我们把DVWA级别设为high(高)
在查看一下源代码:
这时我们可以看到第三行已经进行了过滤
$substitutions = array( '&' => '', ';' => '', '| ' => '', '-' => '', '$' => '', '(' => '', ')' => '', '`' => '', '||' => '',
但是还是有方法绕过,他源码里面是'| ';后面多了一个空格,我们可以利用'|'绕过(这里是没空格的)
192.168.220.133|net user
有人会问为什么只实行了net user命令没有实行ping 192.168.220.133
下面说一下命令连接符:
command1 && command2 先实行command1后实行command2
command1 | command2 只实行command2
command1 & command2 先实行command2后实行command1
那么这个漏洞有什么危害了?
我做个演示:
在LOW模式下,我们实行192.168.220.133&&netstat -a(查看开启了哪些端口)
可以看到,如果被一些不法的人知道一些主要的端口开启会若何了,结果可想而知,还可以删除你的文件,可谓是毁灭性的。
总结:
1.如何防止这种漏洞产生,方法很多,我这里就说DVWA中的方法,他对IP地址进行了限定,必须是8位 数组.数组.数组.数组才会被吸收。
2. 为什么会想到用命令连接符,而不是用XSS,sql注入一个一个试了?
我们首先思考一下这一个网站实现了什么功能,能给我们带来什么?这里是一个ping地址的网站,那么ping在哪里实行了?DOS窗口里面吧,DOS窗口能干什么,访问、读取、删除等等功能都可以实现,以是我们要有这种举一反三创造问题的意识。
点个赞,关注一下感激!