命令注入

命令注入是一种常见的漏洞形态。一旦存在命令注入漏洞,攻击者就可以在目标系统执行任意命令。

测试脚本command.py:

import os,subprocess
import sys
command = "ping -c 4 {}".format(sys.argv[1])
p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
out = p.stdout.readlines()
for line in out:
    print(line.decode('utf-8'))

这允许我们从外部传入参数执行ping命令,但是参数并没有被限制,那么我们就可以注入其他命令,让OS去执行。例如测试注入whoami

python command.py 8.8.8.8 && whoami

实际执行的是ping -c 4 8.8.8.8 && whoami 命令。 

原本功能只是用来测试主机和别的主机是否网络可达,现在就造成可以执行任意操作系统命令的漏洞。

一般测试命令可以用 | 、`、&&、;等符号来进行命令拼接。

但是一般情况下很少遇到会完全不过滤的情况,如过滤掉空格

import os,subprocess
import sys
#测试ping功能
command = "ping -c 4 {}".format(sys.argv[1].replace(' ',''))
p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
out = p.stdout.readlines()
for line in out:
    print(line.decode('utf-8'))

那么可以用payload  python command.py  8.8.8.8&&{cat,/etc/passwd}

以上是有回显的情况下,可以直接看打印的命令结果去判断注入的命令是否执行了,但是一般正常情况很少有回显的,因为回显显得比较难看。

一般我们遇到的都是直接输入一个ip地址,然后点击测试,最后告诉你是网络可达还是不可达。

这种就是命令盲注的情况了。

和SQL盲注一样,我们可以用sleep来延时,从返回响应结果的时长来判断是否注入成功。

测试 payload  python command.py  8.8.8.8 && sleep 5

这里要注意一点,不是返回响应的时间为5秒就是存在注入,要判断上一次直接ping 8.8.8.8和我们使用payload后的时间差为5秒才能判断命令被注入了。

现在的命令执行中,喜欢做系统权限最小化,只能执行某些命令,不是所有的命令都能执行,这时候可以使用sleep来测试系统是否存在这个命令

例如我直接测试aaa命令不存在的情况

这时候会返回命令不存在,但是是盲注我们看不到这个返回结果,我们能感知的是sleep 5秒没有被执行,因为结果很快被返回了。

curl -h && sleep 5
wget -h && sleep 5
ssh -V && sleep 5
telnet && sleep 5

这样的话就可以用来测试一些用得到的命令了。

 

参考链接:https://www.freebuf.com/vuls/139924.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值