首先登录漏洞学习平台,打开命令注入学习部分,地址为(请使用实际实验给到的靶机ip地址):
http://172.16.33.165/web/vulnerabilities/exec/
安全等级:低。将页面安全等级调为低。点击查看源码按钮,可以看到此时后台的实现代码如下:
但是从上面的后台实现代码,我们可以看出,此代码中接收$_REQUEST[ 'ip' ] 作为输入,并未进行任何处理,所以我们可以构造任意的输入字符,另外,在Win及Lin中,系统都可以使用&&来执行多条命令,所以我们可以尝试输入:
127.0.0.1&&whoami
可以看到,除了预期执行的ping命令外,执行了我们的whoami命令。
安全等级:中。点击查看源码按钮,可以看到此时后台的实现代码如下:
这里对特殊字符&&,;进行了过滤,但是其本质是使用了黑名单的方式来进行过滤,因此,仍然存在问题。 因为&&,;不能进行使用,但是&,|等并未进行过滤,我们可以构造的payload还有很多,比如:
127.0.0.1 & whoami
127.0.0.1 | whoami
127.0.0.1&;&whoami
其中&&与&的区别是,&&要求前面的命令成功执行结束才会执行后者,&执行前面的命令,无论是否成功,都会执行后者
安全等级:高。将页面安全等级调为高。点击查看源码按钮,可以看到此时后台的实现代码如下:
高安全等级的代码依然使用了黑名单机制,只是进一步完善了黑名单,但是黑名单是有局限性的,总是会有被绕过的风险,仔细查看这个黑名单列表,过滤的字符里面'| '后面是有一个空格的,于是我们依然可以使用|进行绕过。所以可使用以下payload:
127.0.0.1|whoami
安全等级:安全,将页面安全等级调为安全。点击查看源码按钮,可以看到此时后台的实现代码如下: