Python黑客绝技03:Python基础知识1

Python黑客绝技学习笔记03:Python基础知识1

在上一期中,我们学习了如何使用pip安装第三方库,修改pip镜像源提升下载速度和安装VScode编辑器。接下来我们将学习Python的基础知识,我们将分两次学习这些内容。

1.3 Python基础知识

1.3.1 Python解释器

与其他脚本语言类似,Python 是一种解释型语言。在运行时,解释器处理代码并执行它,正如我们上期所演示的那样,我们写一个.py 文件来打印“hello”。
在这里插入图片描述
可以看到,命令行调用/usr/bin/python3运行了test.py这个脚本。
此外,python具有交互能力,我们可以调用python解释器,并直接与解释器“交流”。
要启动解释器,我们要先不带参数的执行python,接着解释器会呈现一个>>>来提示我们,他可以接收命令了。在这里,程序设计师输入print(“hello”)。按下回车后,python交互解释器会立即执行该语句。

$ python3
Python 3.8.2 (default, Apr  1 2020, 15:52:55) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('hello')
hello

在这里插入图片描述

在下面的内容中,我们会学习变量,数据类型,字符串,复杂的数据结构,网络,选择,循环,文件处理,异常处理,与操作系统进行交互
如果您想了解更多,您可以查看Python官方提供的帮助文档。
网址:https://docs.python.org/zh-cn/3/
为了显示这一点,我们将构建一个简单的TCP 类型的漏洞扫描器,读取来自服务的提示消息,并把他们与已知的存在漏洞的服务版本做比较。

1.3.2 基本数据类型

首先,我们从任何编程语言的基础——变量开始吧!

变量

在python中,变量对应的数据存储在内存中,这种在内存中的位置可以存储不同的值,如整型,实数,布尔值,字符串,或更复杂的数据结构,例如列表或字典。
下面的代码定义一个存储整形的变量和一个存储字符串的提示消息,为了把这两个变量连接到一个字符串中,必须用str()函数。

>>> port = 21
>>> banner = "FreeFloat FTP Server"
>>> print("[+] Checking for "+banner+" on port "+str(port))
[+] Checking for FreeFloat FTP Server on port 21

当我们声明变量后,python为这些变量保存了内存空间。我们不必声明变量类型,相反,python解释器决定了变量类型何在内存中为他保留的空间的大小。
下面的例子中,我们正确的声明了一个字符串,一个整数,一个列表和一个布尔值,解释器都自动的正确的识别了每个变量的类型。

>>> banner = "FreeFloat FTP Server" # 字符串
>>> type(banner)
<class 'str'>
>>> port = 21 # 整数
>>> type(port)
<class 'int'>
>>> portList = [21,22,80,110] # 列表
>>> type(portList)
<class 'list'>
>>> portOpen = True # 布尔值
>>> type(portOpen)
<class 'bool'>
字符串

python的string模块提供了一系列非常强大的字符串操作方法。
可以在https://docs.python.org/3/library/string.html查看该模块各种方法的详细内容。
让我们来看几个常用的函数。思考下面这些函数的用法
upper()方法将字符串中的小写字母转为大写字母
lower()方法转换字符串中所有大写字母为小写
replace(old,new)方法把字符串中的old(旧字符串) 替换成new(新字符串)
find()方法检测字符串中是否包含指定的子字符串。

>>> banner = "FreeFloat FTP Server" # 字符串
>>> print(banner.upper())
FREEFLOAT FTP SERVER
>>> banner = "FreeFloat FTP Server" # 字符串
>>> print(banner.upper())  # 全部大写
FREEFLOAT FTP SERVER
>>> print(banner.lower())  # 全部小写
freefloat ftp server
>>> print(banner.replace('FreeFloat', 'Ability'))  # 字符串替换
Ability FTP Server
>>> print(banner.find('FTP'))  # 检测字符串
10
列表

Python 的列表数据结构(list)是一种存储对象数组的极好方式。我们可以构建任何数据类型的列表。
另外,有一些内置的操作列表的方法,例如添加,删除,插入,弹出,获取索引,排序,计数,排序和反转等。
请看下面的例子,一个程序通过使用append()添加元素来建立一个列表,打印项目,然后在再次输出前给他们排序。
我们可以找到特殊元素(例如样例中的80)的索引,此外,指定的元素(例如样例中的443)也可以被删除。

>>> portList = []
>>> portList.append(21)
>>> portList = []  # 建立空列表
>>> portList.append(21) # 添加元素
>>> portList.append(80)
>>> portList.append(443)
>>> portList.append(25)
>>> print(portList)  # 打印列表
[21, 80, 443, 25]
>>> portList.sort()  # 排序
>>> print(portList)
[21, 25, 80, 443]
>>> pos = portList.index(80)  # 指定元素的索引
>>> print("[+] There are "+str(pos)+" ports to scan before 80.")
[+] There are 2 ports to scan before 80.
>>> portList.remove(443)  # 删除元素
>>> print(portList)
[21, 25, 80]
>>> cnt = len(portList)  # 列表长度
>>> print("[+] Scanning "+str(cnt)+" Total Ports.")
[+] Scanning 3 Total Ports.
字典

这是Python的另外一种典型的数据结构,提供了一个可以存储任意数量python对象的哈希表。字典的元素(item)由**键(key)和值(value)**成对组成,让我们继续用我们的漏洞扫描器的例子来学习python的字典。
当扫描指定的TCP 端口时,包含每个端口及对应的常见服务名的字典会很有用。建立一个字典后,我们能查找像ftp这样的键并返回端口关联的值21。
当我们建立一个字典时,每一个键和它的值用被冒号隔开,同时,我们用逗号分隔元素。
注意,.keys()这个方法将返回字典的所有键的列表,.items()这个方法将返回字典的元素的完整信息的列表。接下来,我们验证字典是否包含了指定的键(ftp),并返回该键对应的值21。

>>> services = {'ftp':21,'ssh':22,'smtp':25,'http':80}  # 创建字 典
>>> services.keys()  # 字典全部键
dict_keys(['ftp', 'ssh', 'smtp', 'http'])
>>> services.items()  # 字典的全部元素
dict_items([('ftp', 21), ('ssh', 22), ('smtp', 25), ('http', 80)])
>>> 'ftp' in services  # 键值是否存在
True
>>> services['ftp']  # 指定键值对应的条目值
21
>>> print("[+] Found vuln with FTP on port "+str(services['ftp']))
[+] Found vuln with FTP on port 21

1.3.3 网络

OWASP靶机下载

在开始这部分内容前,我们需要先安装一个渗透攻击的目标环境——靶机。靶机,顾名思义,就是我们攻击的靶子,因为我们是学习,所以不能拿一个实际的目标,尤其是网络上实际目标进行渗透攻击,那样警察叔叔会找你喝茶的。我们选择OWASP靶机,不是有什么特别的原因,只是因为我们也是小白,选择一个大牛推荐的攻击平台。如果您有更好的选择,您也可以推荐给我们。
我们从网上下载了最新的版本:OWASP_Broken_Web_Apps_VM_1.2.7,下载地址https://jaist.dl.sourceforge.net/project/owaspbwa/1.2/OWASP_Broken_Web_Apps_VM_1.2.7z

OWASP靶机配置

下载后解压,双击解压目录下OWASP Broken Web Apps.vmx文件,添加虚拟机。
先点击编辑虚拟机设置。
在这里插入图片描述
点击网络适配器,为了安全选择NAT或者仅主机模式,然后确定。
在这里插入图片描述
之后点击开启此虚拟机。
在这里插入图片描述
选择复制该虚拟机。
在这里插入图片描述
可以看到启动后虚拟机提示信息。
在这里插入图片描述
主要包含该虚拟机的IP地址为192.168.21.130,登录用户名root及口令为owaspbwa

至此,靶机基本完成配置。下面我们继续Python的内容。

套接字测试

套接字模块(socket)提供了一个可以使python 建立网络连接的库。让我们快速编写一个获取提示信息(banner)的脚本(banner-grabbing)。我们的脚本会在连接到特定IP地址(此处我们选择靶机的IP192.168.21.130)和端口后,将banner打印提示信息。
我们首先导入socket模块,之后实例化一个socket类的新变量s。使用connect()函数建立制定IP 地址和端口的网络连接。一旦连接成功,就可以通过套接字进行读写。
recv(1024)方法读取套接字中接下来1024 字节的数据。我们把该方法的返回结果存到一个变量中,并把这个来自于靶机的响应打印出来。
由于靶机未安装ftp服务,所以我们修改了端口号,将连接FTP服务的21号端口改为连接SSH服务的22号端口。

>>> import socket  # 导入套接字模块
>>> socket.setdefaulttimeout(2)  # 设定时限
>>> s = socket.socket()  # 实例化套接字
>>> s.connect(("192.168.21.130",22))  # 连接指定IP和端口
>>> ans = s.recv(1024)  # 读取套接字中接下来1024 字节的数据
>>> print(ans)  # 打印数据
b'SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu4\r\n'

可以看到,靶机返回了SSH服务的相关信息。

以上就是本期的内容,下期我们将继续学习Python的基础知识。
更多精彩,请👇。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值