python 黑名单测试(前置技能)

来源:在做nc签到时,底层用了python黑名单过滤,这里进行一个复现

过程

import os
if __name__=="__main__":
    blacklist=['cat','ls','cd','echo','<','>','${IFS}']
    while True:
        command = input("what do you want:")
        for i in blacklist:
            if i in  command:
                exit(0)
            os.system(command)

 然后在cmd窗口打开:

这里就成功运行了一个python黑名单脚本,不过最好是在linux。

system函数很危险,是我们的最爱。

注意:

1.程序入口

在Python中,`__name__` 是一个内置变量,它用于区分当前模块是被直接运行还是被导入到其他模块中。当Python文件被直接运行时,该文件被视为程序的入口点,此时 `__name__` 的值会被设置为 `"__main__"`。相反,如果该文件被导入到其他模块中,则 `__name__` 的值会是该文件的模块名。

例:

在python文件夹下创建一个包,并编写自己的模块(注意避免使用数字开头!最好小写字母加下划线)

moudle1:

def my_fun():
    print("this is a function inside the modle.")
class myclass:
    def __init__(self):
        print("this is a class inside the moudle.")
if __name__ ==  "__main__":
    print("this moudle is being run directly.")
    my_fun()
    my_instace = myclass
else:
    print("this moudle is being imported.")

moudle2:

import moudle1
moudle1.my_fun()
moudle1.myclass

 运行出现各自的结果。

再介绍其他导入包的方式:

相对导入:

# 假设当前文件是 package/module1.py,想要导入同一包下的module2.py
from . import module2

# 从上一层包中导入模块
from .. import module3

# 从顶层包中导入模块
from .package import module4

 导入选择内容:

from math import *         //全部导入,不建议

from math import sqrt    //选择性导入,建议

print(sqrt(16))  # 直接使用sqrt函数

 

__name__="__main__"这种方式使得模块既可以作为独立的程序运行,也可以作为库被其他程序导入使用。

2.绕过方式

管道符绕过:(部分)

        windows

&        前后都要执行,无论真假

|          直接执行后面语句

         linux

;        前后都要执行

 空格过滤:

${IFS}

$IFS$9

%09                php环境

<

<>                    重定向

绕过原理我也不太清楚,在cmd试了 也不行,应该在linux或者system()函数下的识别有关

反斜杠绕过

cat ==  ca/t

 

编码绕过

 还有很多绕过方式,但原理都不大懂,就不再赘述,以后一定会专门讲绕过。

tip:对于csdn图片上传问题,我的菜鸟解决方法是把截屏的文件放到桌面blog文件夹下,使用时直接打开拖拽就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值