命令执行漏洞基础

命令执行漏洞

本次实验均在linux下测试:

1、命令执行(Command Execution)漏洞即黑客可以直接在Web应用中执行系统命令,从而获取敏感信息或者拿下shell权限

2、命令执行漏洞可能造成的原因是Web服务器对用户输入命令安全检测不足,导致恶意代码被执行

3、更常见的命令执行漏洞是发生在各种Web组件,包括Web容器、Web框架、CMS软件、安全组件等

可能存在漏洞的函数:system、exec、shell_exec、passthru、popen、proc_popen等

一.命令执行的原理和测试方法

源代码:

<?php
show_source(__FILE__);
echo"<pre>";
if(isset($_GET["cmd"])){
system($_GET["cmd"]);
echo"</pre>";
?>

 

传入?cmd=ipconfig

返回命令执行漏洞基础

 

 

 这边就是一个很典型的命令执行漏洞

接下来当命令改变时:

<?php
echo system("ping -c 2 " . $_GET[‘ip‘]);
?>

此时被限制为只能输入ip

使用&&,||等进行突破

命令执行漏洞基础

 

 

 

 这里的%26便是&的url编码,为了解决url中的歧义,会讲一些特殊字符进行编码

如果使用&&则不行

命令执行漏洞基础

 

 使用||

注意:&&与||均存在惰性,&&相当于and,当第一个命令返回真,则不执行第二个;||则相当于or,当第一个为假,便执行第二个,否则不执行第二个,因此这里url对应改变。

命令执行漏洞基础

 

二、命令执行基础

1.windows中的转义字符是^,linux中的转义字符是\

命令执行漏洞基础

 

命令执行漏洞基础

 

可见转义字符的作用。

2.多条命令执行。

windows下可用&&,||,%0a;linux下可用&&    ||    ;,    $()    ``    %0a    %0d    来连接多句命令

命令执行漏洞基础

 

命令执行漏洞基础

 

 3.注释符号:

windows为::,linux中为#

 三、存在过滤的绕过与技巧

空格过滤:

命令执行漏洞基础

 

 

 

则可以使用url编码进行绕过,可以进行一波Fuzz

当url编码都被过滤,还可以通过截取的方式获取空格:

1.windows下:

%ProgramFiles:~10,`%

~相当于截取符,表示从$ProgramFiles的值中截取,一般为C:\Program Files. 代表从第10个开始并获取一个字符,则是空格。

 命令执行漏洞基础

 

2.linux下:

$IFS$9        {cmd,args}          cat<>flag    $[IFS]

命令执行漏洞基础

 

 

 

变量拼接绕过黑名单:

linux:a=c;b=at;c=he;$a$b ${c}{c}

命令执行漏洞基础(cat 123.txt)

例子:/?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php

 

 

 

 

使用通配符绕过:

?代表任意一个字符,*代表任意个字符串

命令执行漏洞基础

 

 

借用已有字符,用substr截取获得<>等符号

 

base64绕过

命令执行漏洞基础

 

 三、执行无回显

1.http通道

2.dns通道

3.时间盲注

4.写入文件,二次返回

 

命令执行漏洞基础

上一篇:函数节流与防抖的实现


下一篇:Vue 模态框 取消/提交后清除数据