day5

Python

转换数据类型的函数

int(x[,base]) 转换x为一个整数
float(x) 转换x为一个浮点数
complex(real[,imag]) 创造一个复数
str(x) 将x转化为字符串
repr(x) 转换为表达式字符串
eval(str) 用来计算在字符串中的有效python表达式,并返回一个对象
tuple(s) 序列s转换为一个元组
list(s) 序列s转换为一个列表
chr(x) 将一整数转换为一个Unicode字符
ord(x) 将一个字符转换为它的ASCII整数值

在这里插入图片描述在这里插入图片描述

创建和使用类:

方法__init__():这是一个特殊的方法,每当你根据类创建新实例时,Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,旨在避免Python默认方法与普通方法发生名称冲突。
下面是实例:
在这里插入图片描述输出为:
在这里插入图片描述三种不同的方式可以修改属性的值:
直接通过实例进行修改;
通过方法进行设置;
通过方法进行递增(增加特定的值)。

继承

当A类继承B类时,A将获得B类的所有属性和方法,原有的B类称为父类 ,而A新类称为子类 。

子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。

创建子类时,父类必须包含在当前文件中,且位于子类前面。

super()函数,可以将父子相连,且可以调用父类的属性及方法。

导入类

当模块要太大的时候,类会分散在各个模块。
但,当需要某类加入模块的时候,需要使用的时候,就可以使用导入类了。

它的操作跟函数类似。

Python标准库

python里面几乎自带。
创建字典并记录其中的键值对的添加顺序,使用模块collections 中的OrderedDict类。

当需要同时导入标准库中的模块和编写的模块时,先编写导入标准库模块的import 语句,添加空行,然后再编写导入的模块的import 语句。

文件中读取数据

函数open(要打开的文件的名称):

with关键字,在访问完成后,不再需要访问的时候,会将其关闭,相当于,调用了close()函数。使用此关键字时,open()返回的文件对象只能在with代码块里使用。

打开此文件后,我们要用read()函数进行读取文件内容。

当read()读取完毕后,会在末尾返回一空行。删除空行,在print中使用rstrip()即可。

在这里插入图片描述如要检查文件的每一行,可使用for循环。

在这里插入图片描述在这里插入图片描述
用方法readlines()可从文件中读取每一行并存在一个列表里。

异常

当出现异常的时候,可以写一个try except代码块来处理异常。

在这里插入图片描述

5道题

1.PHP2
在这里插入图片描述
原题长这样的,标题是php,那么往php的源文件找。

经过后台扫描得知,php源代码是这样的。
在这里插入图片描述根据代码,首先要让第一步"admin"=== $_GET[id]不成立。
对admin其中一个字母进行url编码,这里对a进行编码:%61dmin

然后,要对第二步,经过 $ _GET[id] = urldecode( $ _GET[id]);,使得$_GET[id] == "admin"成立。再经过urldecode解码后变成admin

在这里插入图片描述

由于参数id传入,浏览器在后面对非ASCII码的字符进行一次urlencode编码,然后在运行时又会自动进行一次urldecode。所以我们要编码两次再运行。

在这里插入图片描述2. Web_python_template_injection
在这里插入图片描述
翻译:python模板注入 。

查看全局变量。
在这里插入图片描述首先通过python的对象的继承来一步步实现文件读取和命令执行的的。

一步步实现文件读取和执行:首先找到父类<type ‘object’>,再寻找子类,再找关于命令执行或者文件操作的模块。

魔术方法:
__ class __ :返回类型所属的对象
__ mro__ :返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。
__ base__ :返回该对象所继承的基类
【 __base__和__mro__都是用来寻找基类的】

__ subclasses__ : 每个新类都保留了子类的引用,这个方法返回一个类中仍然可用的的引用的列表
__ init__ :类的初始化方法
__ globals__ : 对包含函数全局变量的字典的引用

payload:
/{{’’.class.mro[2].subclasses()}}
可以看到type file类型的文件可以进行读取。
在这里插入图片描述{{ []. __ class__.base.subclasses()[40] (’/etc/passwd’).read() }}
40,是tupe file类型文件开始从0起的顺序位数。

看到 <class ‘site._Printer’>类型可以进行命令执行。

在这里插入图片描述{{’’.class.mro[2].subclasses()[71].init.globals[‘os’].listdir(’.’)}}

71 同 40道理一样,顺序位置。
在这里插入图片描述

在这里插入图片描述3.easytornado在这里插入图片描述经过一个个点进去,可以知道,flag在flag.txt里
在这里插入图片描述将其输入其中。
在这里插入图片描述显示了error。
开始尝试msg能否更改。
在这里插入图片描述发现可以更改。

然后在Tornado里,应用的设置可以通过handler.settings访问。
在这里插入图片描述拿到cookie。

在这里插入图片描述此提示得知要使用md5来做hash的值。在这里插入图片描述加上文件名字一起。
在这里插入图片描述
然后,输入进去
在这里插入图片描述
得到。
在这里插入图片描述

4.base64÷4
打开题目。
在这里插入图片描述
根据题目,64/4=16,16进制转文本。
在这里插入图片描述5.shrine
打开后,查看源代码发现,flask。
在这里插入图片描述
进入模板注入。
在这里插入图片描述

发现是10.则确定为ssti。

运用python的内置函数url_for

payload:
/shrine/{{url_for. __globals __ [‘current_app’].config}}

在这里插入图片描述
在这里插入图片描述

Javascript

一元操作符:

一元加(+)操作符:
当+放在数值前,数值不会产生任何影响,在对非数值时,操作符会像number()转型函数一样对这个值进行转换。

一元减(-)操作符:
与+相同的原则,只是表示的是负数。
在这里插入图片描述在这里插入图片描述

位操作符

按位非(~):
返回数值的反码。操作数的负值减1。
在这里插入图片描述按位与(&):
有两个操作数。将两个数值的每一位对齐,对相同位置上的两个数执行AND操作:
规则如下:
1 & 1=>1
1 & 0=>0
0 & 1=>0
0 & 0=>0

在这里插入图片描述结果是:1.对25和3 进行二进制转换,进行AND操作。(25:11001;3:00011)

11001
00011
————
00001

按位或(|):
有两个操作数。
规则如下:
1 | 1=>1
1 | 0=>1
0 | 1=>1
0 | 0=>0
在这里插入图片描述
同样例子,同样转化为二进制,结果是:27

按位异或(^):
有两个操作数。异为1.
规则如下:
1 ^ 1=>0
1 ^ 0=>1
0 ^ 1=>1
0 ^ 0=>0
还是上面的例子,结果为:26

左移(<<):
将数值为二进制形式,然后向左移动指定的位数。在这里插入图片描述
0000010
——————
1000000
结果为:64

有符号右移(>>):
与左移相反。

无符号右移(>>>):
对正数来说,无符号右移的结果和有符号的一样。但是负数来说,无符号右移是用0来填充,相当于,会把负数的二进制码转化为正数的二进制码。

在这里插入图片描述
结果为:134217726

运算符的优先级:

()–一元–算术–关系–相等–逻辑–赋值

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值