网络攻防第二周作业
一、国内外黑客简介
1、袁仁广
在国内,他的windows系统方面的造诣可谓首屈一指,早在1999年就曾提出过windows的共享漏洞。而现在袁仁广领衔的360漏洞研究实验室被誉为“东半球最强大的白帽子军团”,并计划在大会现场收徒,传授的研究方向为高级漏洞利用技术。曾担任中国国家信息安全漏洞库特聘专家,北京奥运会特聘信息安全专家,现任腾讯湛泸实验室负责人。
2、莫里斯
二、安全工具、库
1、Wireshark使用教程:
Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。
认识界面:
说明:
常用按钮从左到右的功能依次是:
1、列出可用接口。
2、抓包时需要设置的一些选项。一般会保留最后一次的设置结果。
3、开始新的一次抓包。
4、暂停抓包。
5、继续进行本次抓包。
6、打开抓包文件。可以打开之前抓包保存后的文件。不仅可以打开wireshark软件保存的文件,也可以打开tcpdump使用-w参数保存的文件。
7、保存文件。把本次抓包或者分析的结果进行保存。
8、关闭打开的文件。文件被关闭后,就会切换到初始界面。
9、重载抓包文件。
设置数据抓取选项:
点击常用按钮中的设置按钮,就会弹出设置选项对话框。在这个对话框中我们可以选中需要监听的接口,设置混杂模式,设置抓取数据包的过滤条件。
首先,选中需要监听获取数据包的接口。接口列表区列出了所有可以使用的接口。如果接口前面的复选框被选中,说明对这个接口监听捕获数据包。
其次,设置混杂模式。设置混杂模式的作用是将网卡设置到混杂模式。如果不设置混杂模式,你的计算机只能获取数据包发往的目标是你计算机和从你计算机出去的数据包。如果设置了混杂模式,你就可以捕获局域网中所有的数据包。如果窗口中的 "Use promiscuous mode on all interfaces"前面的复选框被选中,说明对所有的接口使用混杂模式。如果想单独设置,可以双击接口列表中的接口,会弹出如下的对话框。然后选中或者去掉“Capture packets in promiscuous mode”前面复选框。然后点ok按钮。
再次,设置捕获过滤条件。在点设置按钮弹出的主设置对话框中和双击接口列表弹出的对话框中都会有“Capture Filter”项。在文本框中我们可以设置捕获过滤条件。如,我们只捕获http相关的数据包,我们就可以设置捕获条件为“port 80”。因为http使用的是80端口。
最后,所有的设置完毕后,点击设置主窗口中的“Start”按钮,开始捕获数据。数据捕获完后,可以点常用按钮中的“保存”按钮保存数据。
使用显示过滤器:
显示过滤器应用于捕获文件,用来告诉wireshark只显示那些符合过滤条件的数据包。显示过滤器比捕获过滤器更常用。他可以用来过滤不想看到的数据包,但是不会把数据删除。如果想恢复原状,只要把过滤条件删除即可。
过滤器表达式对话框,是的wireshark的可以很简单的设置过滤表达式。点击“Expression”按钮就可以打开这个对话框。如下图:
对话框分左中右三部分。左边为可以使用的所有协议域。右边为和协议域相关的条件值。中间为协议域与条件值之间的关系。过滤器表达式对于初学者很有用。如上图,我们创建的表达式的作用是,只显示http协议包中包含关键词“bo56.com”的所有数据包。
Field name说明:
这个列表中展示了所有支持的协议。点击前面的三角标志后,可以列出本协议的可过滤字段。当选中“Field name”列表中的任何一项,只需要输入你想要的协议域,就会自动定位到相应的协议域选项。
Relation说明:
is present 如果选择的协议域存在,则显示相关数据包。
contains 判断一个协议,字段或者分片包含一个值
matches 判断一个协议或者字符串匹配一个给定的Perl表达式。
Value(Protocol)说明:
此处输入合适的值。如果选择的协议域和这个值满足Relation中指定的关系,则显示相关数据包。
Predefined values说明:
有些协议域包含了预先定义的值,有点类似于c语言中的枚举类型。如果你选择的协议域包含这样的值,你可以在这个列表中选择。
Function函数说明:
过滤器的语言还有下面几个函数:
upper(string-field)-把字符串转换成大写
lower(string-field)-把字符串转换成小写
upper((和lower((在处理大小写敏感的字符串比较时很有用。例如:
upper(ncp.nds_stream_name) contains "BO56.COM"
lower(mount.dump.hostname) =="BO56.COM"
如果你熟悉了这个规则之后你就会发现手动输入表达式更有效率。当时手动在flter文本框中输入表达时,如果输入的语法有问题,文本框的背景色会变成红色。这时候,你可以继续输入或者修改,知道文本框中的表达式正确后,文本框的背景色又会变成绿色。
使用着色规则:
点击“view”菜单,然后选择“Coloring Rules”选项就会弹出设置颜色规则设置对话框。你点击颜色规则设置的快捷按钮也可以打开颜色设置对话框。
打开的对话框中默认已经有一些规则。我们抓取的数据包中经常会看到一些不同的颜色,就是应用的这些默认的规则。点击“New”按钮可以添加规则。
name字段中填写规则的名称,方便记忆。
string字段中填写过滤规则。这里的语法和显示规则表达式一致。点击 上图中的“Expression”按钮,你就会看到熟悉的规则表达式对话。
Foreground Color按钮用于选择前景色。
Background Color按钮用于选择背景色。
Disabled按钮用于指示是否禁用这条规则。
点击ok按钮后,规则自动会添加到规则列表中的最前端。
注意:wireshark在应用规则的时候,是按自上而下的顺序去应用规则。因此刚添加的规则会优先应用。如果你想调整顺序,可以选中要调整顺序的规则,然后点击右边的“UP” 或则 “Down” 按钮。
颜色规则设置好后,只需要点apply按钮就可以应用规则了。
跟踪tcp流:
Wireshark分析功能中最不错的一个功能是它能够将TCP流重组。重组后的数据格式更容易阅读。跟踪TCP流这个功能可以将接收到的数据排好顺序使之容易查看,而不需要一小块一小块地看。这在查看HTTP、FTP等纯文本应用层协议时非常有用。
我们以一个简单的HTTP请求举例来说明一下。打开wireshark_bo56_pcap.pcapng,并在显示过滤器中输入“http contains wireshark”,点击“apply”按钮后,在数据包列表框中就会只剩下一条记录。如下图。
右键单击这条记录并选择Follow TCP Stream。这时TCP流就会在一个单独的窗口中显示出来。
我们看到这个窗口中的文字会有两种颜色。其中红色用于表示从源地址到目标地址的流量。在我们的例子里面就是从我们本机到web服务器的流量。你可以看到最开始的红色部分是一个GET请求。蓝色部分是和红色部分相反的方向,也就是从目标地址到源地址的流量。在我们的例子中,蓝色部分的第一行是“HTTP/1.1 200 OK”,是来自服务器的一个http成功响应。
在这个窗口中除了能够看到这些原始数据,你还可以在文本间进行搜索,将其保存成一个文件、打印,或者以ASCII码、EBCDIC、十六进制或者C数组的格式去查看。这些选项都可以在跟踪TCP流窗口的下面找到。
2、nessus使用教程
Nessus 是目前全世界最多人使用的系统漏洞扫描与分析软件。
安装:
在tenable官方主页下载Nessus home版本安装包(选择 kali linux64位或32位安装包):http://www.tenable.com/products/nessus/select-your-operating-system
安装软件:
配置软件。安装完成后使用命令 /etc/init.d/nessusd start 进行启动。
浏览器中启动软件。Nessus采用的B/S架构,在浏览器中输入https://127.0.0.1:3384 即可打开Nessus主页,启动之后需要设置管理帐号和密码,设置完之后需要输入Active code(激活码)才可以进行插件的更新安装,Active code获取方法如下:访问 http://www.tenable.com/products/nessus/nessus-homefeed 进行注册,填写正确邮箱,注册完成会收到邮件,邮件中就有Active code。输入Active code之后就可以开始下载安装插件了。
扫描:
1)点击界面中的new scan:
2)选择一个可用的扫描模版,一般都选择advanced scan
3)进入基本配置过程,其中name可以随便但最好使用英文,Description可写可不写,Folder选择My Scan,Target输入待扫描的主机ip,例如192.168.2.100,除了这些基本信息还可以根据需求配置一些额外的信息
4)配置完成后,点击“开始”图标开始扫描
5)点击Export,可以选择要导出扫描报告的格式,一般我们都选择pdf格式
6)打开报告,查看扫描的结果和扫描到的漏洞描述
三、学习总结笔记
1、python变量和数据类型
如何使用 Vim :打开 Xfce 终端,使用 Vim 开始编写代码:
在终端中输入:
$ vim testhundred.py
输入i编写代码,接着按 ESC 键并输入 :wq 退出Vim。
程序执行前为文件添加可执行权限:chmod +x test.py
2、运算符和表达式
逻辑运算符 and 和 or 也称作短路运算符:它们的参数从左向右解析,一旦结果可以确定就停止。例如,如果 A 和 C 为真而 B 为假,A and B and C 不会解析 C 。作用于一个普通的非逻辑值时,短路运算符的返回值通常是能够最先确定结果的那个操作数。
逻辑运算符的优先级又低于关系运算符,在它们之中,not 具有最高的优先级,or 优先级最低
使用 format 可以控制输出的小数位数,可以使用 '{:.10f}'.format() 来进行格式化输出保留 10 位小数
3、控制流if-else
如果表达式 expression 的值为真(不为零的任何值都为真),程序将执行缩进后的内容。
检测真值:
If x:
pass
4、循环
默认情况下,print() 除了打印你提供的字符串之外,还会打印一个换行符,所以每调用一次 print() 就会换一次行,如同上面一样。
你可以通过 print() 的另一个参数 end 来替换这个换行符,就像下面这样,
字符串若是乘上整数 n,将返回由 n 个此字符串拼接起来的新字符串。
列表:
如果我们使用负数的索引,那将会从列表的末尾开始计数;你甚至可以把它切成不同的部分,这个操作称为切片。
Python 里的 for 循环与 C 语言中的不同。这里的 for 循环遍历任何序列(比如列表和字符串)中的每一个元素。如果你需要一个数值序列,内置函数 range() 会很方便,它生成一个等差数列(并不是列表)。for
循环通常与 range()
函数配合使用,该
函数返回的并不是列表而是一种可迭代对象
continue
会跳过其后的代码回到循环开始处执行,这意味着它可以帮助你跳过部分循环。
5、数据结构
字典是是无序的键值对(key:value)集合,同一个字典内的键必须是互不相同的。一对大括号 {} 创建一个空字典。初始化字典时,在大括号内放置一组逗号分隔的键:值对,这也是字典输出的方式。我们使用键来检索存储在字典中的数据。
必须知道的是,字典中的键必须是不可变类型,比如你不能使用列表作为键。
dict() 可以从包含键值对的元组中创建字典。
如果你想要遍历一个字典,使用字典的 items() 方法。
许多时候我们需要往字典中的元素添加数据,我们首先要判断这个元素是否存在,不存在则创建一个默认值。如果在循环里执行这个操作,每次迭代都需要判断一次,降低程序性能。
我们可以使用 dict.setdefault(key, default) 更有效率的完成这个事情。
6、函数
我们使用关键字 def 来定义一个函数:
def 函数名(参数):
语句1
语句2
高阶函数(Higher-order function)或仿函数(functor)是可以接受函数作为参数的函数:
(1)使用一个或多个函数作为参数
(2)返回另一个函数作为输出
Python 里的任何函数都可以作为高阶函数
map 函数:
map 是一个在 Python 里非常有用的高阶函数。它接受一个函数和一个序列(迭代器)作为输入,然后对序列(迭代器)的每一个值应用这个函数,返回一个序列(迭代器),其包含应用函数后的结果。
7、文件处理
我们使用 open() 函数打开文件。它需要两个参数,第一个参数是文件路径或文件名,第二个是文件的打开模式。模式通常是下面这样的:
"r",以只读模式打开,你只能读取文件但不能编辑/删除文件的任何内容
"w",以写入模式打开,如果文件存在将会删除里面的所有内容,然后打开这个文件进行写入
"a",以追加模式打开,写入到文件中的任何数据将自动添加到末尾
默认的模式为只读模式,也就是说如果你不提供任何模式,open() 函数将会以只读模式打开文件。
在实际情况中,我们应该尝试使用 with 语句处理文件对象,它会在文件用完后会自动关闭,就算发生异常也没关系。它是 try-finally 块的简写;在 Linux 下可以使用 lscpu 命令来查看当前电脑的 CPU 相关信息。
8、异常
在程序执行过程中发生的任何错误都是异常。每个异常显示一些相关的错误信息,比如你在 Python3 中使用 Python2 独有的语法就会发生 SyntaxError;当访问一个未定义的变量则会发生 NameError;TypeError 也是一种经常出现的异常。当操作或函数应用于不适当类型的对象时引发,一个常见的例子是对整数和字符串做加法。
我们使用 try...except 块来处理任意异常。基本的语法像这样:
try:
statements to be inside try clause
statement2
statement3
...
except ExceptionName:
statements to evaluated in case of ExceptionName happens
它以如下方式工作:
首先,执行 try 子句 (在 try 和 except 关键字之间的部分)。
如果没有异常发生,except 子句 在 try 语句执行完毕后就被忽略了。
如果在 try 子句执行过程中发生了异常,那么该子句其余的部分就会被忽略。
如果异常匹配于 except 关键字后面指定的异常类型,就执行对应的 except 子句。然后继续执行 try 语句之后的代码。
如果发生了一个异常,在 except 子句中没有与之匹配的分支,它就会传递到上一级 try 语句中。
如果最终仍找不到对应的处理语句,它就成为一个 未处理异常,终止程序运行,显示提示信息。
9、迭代器、生成器、装饰器
Python 迭代器(Iterators)对象在遵守迭代器协议时需要支持如下两种方法。
__iter__(),返回迭代器对象自身。这用在 for 和 in 语句中。
__next__(),返回迭代器的下一个值。如果没有下一个值可以返回,那么应该抛出 StopIteration 异常。
迭代器只能被使用一次。这意味着迭代器一旦抛出 StopIteration,它会持续抛出相同的异常。
生成器是更简单的创建迭代器的方法,这通过在函数中使用 yield 关键字完成。
闭包(Closures)是由另外一个函数返回的函数。我们使用闭包去除重复代码。
装饰器(Decorators)用来给一些对象动态的添加一些新的行为,我们使用过的闭包也是这样的。
10、Flask
Flask 是一个 web 框架。也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序。这个 web 应用程序可以是一些 web 页面、博客、wiki、基于 web 的日历应用或商业网站。
Flask 属于微框架(micro-framework)这一类别,微架构通常是很小的不依赖于外部库的框架。这既有优点也有缺点,优点是框架很轻量,更新时依赖少,并且专注安全方面的 bug,缺点是,你不得不自己做更多的工作,或通过添加插件增加自己的依赖列表。Flask 的依赖如下:
Werkzeug 一个 WSGI 工具包
jinja2 模板引擎
维基百科 WSGI 的介绍:
Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口)。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口。
模板引擎:
使用模板你可以设置页面的基本布局,并提及哪个元素将发生变化。这种方式可以定义网页头部并在网站的所有页面使它保持一致,如果需要改变网页头部,只需要更新一个地方。
使用模板引擎创建/更新/维护应用会节约很多时间。