blubiu

My Love

上网不网恋,简直浪费电.


Python从0到POC编写--基础


前言:

Python POC编写 的第一篇 ,

没有开始,就没有结束,

本系列使用 Python3。


目录:


什么是EXP、POC、CVE:

在某个漏洞出现的时候,会经常看到 exp啊,poc啊什么鬼的,

那么这些究竟是什么东西??

余弦大大说:

POCProof Of Concept,观点验证程序。

运行这个程序就可以得到预期的结果,验证了观点。

再简单点,就是测试的代码。。。


EXPexploit(漏洞利用程序),就是利用代码


CVECommon Vulnerabilities & Exposures 公共漏洞和暴露。

简单的说,就是我们熟悉的 漏洞信息库。


输入输出:

啰嗦一堆之后,本节终于要进入Python环节了

Python语法比较简单,这里就不做更多说明了。

首先来了解一下Python的输入输出,

输入这个没啥好讲的,就是直接在控制台上写代码,

输出常用的有两种方式,一种是 表达式语句,另外一种是 print()

images


数据类型:

Python3中有6个标准数据类型:

  1. Number(数字)
  2. String(字符串)
  3. List(列表)
  4. Tuple(元组)
  5. Sets(集合)
  6. Dictionary(字典)

1. Number(数字)

数字类型包括整数、浮点数,

负数 、0 、正数都是整数,

例如:

images


2. String(字符串)

使用 '(单引号) 或者 "(双引号) 括起来的

例如:

"hello world"

images


3. List(列表)

列表是使用方括号括 [] 起来的,

例如:

list2 = [1,2,3,"小明",10.1,[1,2,3]]

一个列表里面可以存在多种类型,比如整型、浮点型、字符串,还可以包含另外一个列表

他们之间使用逗号分隔。

另外,有两个比较常用的函数:

  1. append() 函数是将参数作为一个元素增加到列表的末尾。
  2. extend() 方法则是将参数作为一个列表去扩展列表的末尾。

例如,使用 append() 函数向列表list2末尾增加元素

list2.append(1)  # 向列表list2末尾增加一个整数
list2.append("hello")  # 向列表list2末尾增加一个字符串
list2.append([1,2,3])  # 向列表list2末尾增加一个列表

例如,使用 extend() 函数向列表list2末尾增加元素

list2.extend([1,2,3])

append()extend() 都是向列表末尾增加元素,我们来看看两者的区别

images


列表切片:

与字符串的索引一样,列表索引从0开始。

获取第一个元素:

list2[0]

获取索引值1到5的元素(包含1但是不包含5,前包后不包)

list2[1:5]

获取索引值6后面的全部元素(包含6,前包)

list2[6:]

获取索引值6前面的全部元素(不包含6,后不包)

list2[:6]

获取索引值倒数第2前面的全部元素(包含2)

list2[:-2]

images


列表删除:

删除列表中的元素可以使用 del 函数 或者 指定为空 ,

例如: 删除第一个元素

del list2[0]  # 删除第一个元素

删除索引值 2到5 的元素:

list2[2:5] = []  # 指定为空

删除整个列表:

del list2

或者:

list2 = []

如果我们想要改变某个元素的值,可以这样

list2[0] = 233   # 将第一个元素的值改变为 整数233,如果使用单引号或者双引号就是字符串

4. Tuple(元组)

元组使用 小括号() 来定义,或者使用逗号

例:

tup1 = (1,2,3)

或者:

tup1 = 1,2,3

如果只有一个元素的时候,需要在元素后面添加逗号,否则括号会被当作运算符使用。

images


元祖一旦定义理论上不能进行增删改查,

如果非要修改,可以使用切片的方法,

例如:

tup1 = (1,2,3,4,5,6)
tup1 = tup1[:2] + ("小明",) + tup1[2:]

添加的东西也一定要是元祖,

images


5. Sets(集合)

集合是一个无序的不重复元素序列。

可以使用 set() 或者 花括号{ } 创建集合,

例如:

a = set('abcdefggfedcba')

或者:

b = {1,2,3,4,5,5,4,3,2,1}

images


可以使用 addremove 添加删除集合中的元素

但是集合不支持通过索引值来查找元素

images


6. Dictionary(字典)

当索引不好用的时候,我们可以使用字典。

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值(key=>value),对用冒号(:)分割,

每个对之间用逗号 , 分割,

整个字典包括在花括号 {}


创建字典

方法1:

dict1 = { 'a':123,'b':456,'7':789 }

方法2:

dict2 = dict((('a',123),('b',456),('7',789)))

使用方法2的时候,注意键值对是使用逗号,

如果要访问某个元素,我们可以通过键名来查找对应的值,

例如:

dict1['a']

images


流程控制:


if语句:

单向分支:

if 1 < 2:
	print('窝喜欢')

双向分支:

if 1 < 2:
    print('窝喜欢你')
else:
    print('窝还是喜欢你')

多项分支:

if 1 < 2:
    print('窝喜欢')
elif 2 < 1:
    print('窝还是喜欢你')
else:
    print('窝真喜欢你')

巢状分支:

就是条件嵌套。

if 1 < 2:
    print('窝喜欢')
	if 2 < 1:
    	print('窝还是喜欢你')
else:
    print('窝真喜欢你')

while语句:

语法:

while 条件:
	循环体

例1:

count = 0
while count <= 10 : 
    print("loop ", count)
    if count == 5:
    	break
    count +=1 

break:用于结束一个循环

count5 的时候,结束此次循环。


例1:

count = 0
while count <= 10 : 
    print("loop ", count)
    if count == 5:
    	continue
    count +=1

continue:只是终止本次循环,后面会接着继续循环。


while else 语句:

例:

count = 0
while count <= 5 : 
    print("loop ", count)
    count +=1
else:
	print("循环结束啦!!!");

else 作用是指,当 while 循环正常执行完,中间没有被 break 中止的话,就会执行else后面的语句,

如果执行过程中被 break ,就不会执行else的语句。


总结

第一篇 完。