首先,我们听说最多切实其实定是SQL注入,实在注入的方法还有很多,比如说:xml、soap、邮件头、crlf、代码实行

为什么会涌现这种漏洞了?

由于这些系统并没有设计很好的过滤过程,以是产生漏洞,导致数据透露。

php命令行注入web渗入渗出敕令行注入 NoSQL

接下来是实验教程:

首先我们这里是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窗口能干什么,访问、读取、删除等等功能都可以实现,以是我们要有这种举一反三创造问题的意识。

点个赞,关注一下感激!