命令注入小结

概念

在Web应用中,有时候会将用户输入作为命令执行函数(如PHP中system、exec、shell_exec等)的参数或参数的一部分,如果对用户输入未加过滤或过滤不充分,就可能导致攻击者提交恶意构造的参数破坏命令结构,从而达到执行恶意命令的目的。

一个简单的例子

前端Web页面:

用户在输入框中输入114.114.114.114,点击Submit按钮,等待几秒,网页就会显示ping目标地址的结果。
在这里插入图片描述
后端PHP(Windows10环境):
在这里插入图片描述
$target是用户输入的IP地址。如果用户输入114.114.114.114 && hostname,就会执行命令ping 114.114.114.114 && hostname,返回服务器的主机名。
在这里插入图片描述

常用命令注入的方法

可以用口诀321来记忆:

3

三种符号在Windows和Linux下功能是相同的:

114.114.114.114 && hostname	执行ping成功后,才执行hostname,否则不执行hostname
x || hostname				执行ping不成功,才执行hostname,否则不执行hostname
114.114.114.114 | hostname	通过将ping的标准输出作为hostname的标准输入,执行hostname,这里hostname不需要输入,因此看不到效果

2

实现同一功能,Windows和Linux分别使用不同的符号(共两种符号):

114.114.114.114 & hostname	先执行ping,然后执行hostname
114.114.114.114; hostname	先执行ping,然后执行hostname

1

一种功能是Linux独有的:

114.114.114.114 & hostname 	后台运行ping,同时执行hostname

命令盲注

命令盲注指的是注入的命令并不会返回执行结果,因此我们无法知道命令是否执行成功,以及命令的输出是什么。

这里介绍一种通过命令执行的时间猜测主机名的方法。

sleep $(hostname | wc -c)

这里的$()是Bash命令置换的语法,执行时会首先执行括号内的命令hostname | wc -c,然后将执行结果作为sleep的参数,执行sleep

根据sleep的时间,可以猜出主机名的长度。

sleep $(hostname | cut -c 1 | tr a 5)

如果sleep了5s,说明主机名的第一个字符就是a,以此类推,就可以猜出完整的主机名。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值