[命令注入]

首先登录漏洞学习平台,打开命令注入学习部分,地址为(请使用实际实验给到的靶机ip地址):

http://172.16.33.137/web/vulnerabilities/exec/

安全等级:低。将页面安全等级调为低。点击查看源码按钮,可以看到此时后台的实现代码如下:

简单看一下代码,此功能为使用php的shell_exec函数执行系统命令ping来探测一台设备是否网络可达,此功能常见于路由管理后台,其中php_uname函数会返回操作系统的相关描述,参数mode可取值"a",(此为默认,包含序列”s n r v m”里的所有模式),”s ”(返回操作系统名称),”n”(返回主机名),” r”(返回版本名称),”v”(返回版本信息), ”m”(返回机器类型)。 stristr函数搜索字符串在另一字符串中的第一次出现,返回字符串的剩余部分(从匹配点),如果未找到所搜索的字符串,则返回FALSE。

但是从上面的后台实现代码,我们可以看出,此代码中接收$_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

安全等级:安全,将页面安全等级调为安全。点击查看源码按钮,可以看到此时后台的实现代码如下:

可以看到,安全级别的代码加入了CSRF token,另外,对传入的参数ip进行了严格的限制,只能输入“数字.数字.数字.数字”的输入才会被接收执行,因此,不再存在命令执行的漏洞。

stripslashes函数会删除字符串string中的反斜杠,返回已剥离反斜杠的字符串;explode函数把字符串打散为数组,返回字符串的数组。is_numeric检测string是否为数字或数字字符串,如果是返回TRUE,否则返回FALSE。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值