Skip to content

Latest commit

 

History

History
586 lines (304 loc) · 23.2 KB

File metadata and controls

586 lines (304 loc) · 23.2 KB

十四、答案

第 1 章:使用 Python 脚本

  1. Python2.x 和 3.x 之间有什么区别?

    The Unicode support in Python 3.x has been improved. The other changes are to do with the print and exec functions, which have been adjusted to be more readable and coherent.

  2. Python 开发人员使用的主要编程范式是什么?

    Object-oriented programming.

  3. Python 中的什么数据结构允许我们将值与键相关联?

    The Python dictionary data structure provides a hash table that can store any number of Python objects. The dictionary consists of pairs of items containing a key and a value.

  4. Python 脚本的主要开发环境是什么?

    PyCharm, Wing IDE, and Python IDLE.

  5. 作为 Python 中开发安全工具的一组最佳实践,我们可以遵循什么方法?

    Open Methodology for Security Tool Developers (OMSTD)

  6. 帮助创建独立 Python 环境的 Python 模块是什么?

    virtualenv 

  7. 哪种工具允许我们创建一个基础项目,我们可以在此基础上开始开发自己的工具?

安全工具生成器****SBT

  1. 我们如何在 Python 开发环境中调试变量?

    通过添加断点。通过这种方式,我们可以在建立断点的地方调试并查看变量的内容。

  2. 如何在 PyCharm 中添加断点?

我们可以在调试工具窗口中使用call函数设置断点。

  1. 如何在 WingIDE 中添加断点?

我们可以使用调试选项菜单中的call功能设置断点。

第 2 章:系统编程包

  1. 允许我们与 Python 解释器交互的主要模块是什么?

系统(sys模块)。

  1. 允许我们与操作系统环境、文件系统和权限交互的主要模块是什么?

操作系统(os模块)

  1. 哪些模块和方法用于列出当前工作目录的内容?

操作系统(os模块和getcwd()方法。

  1. 哪个模块用于通过call()功能执行命令或调用流程?

>>> subprocess.call("cls", shell=True)

  1. 在 Python 中,我们可以采用什么方法来轻松安全地处理文件和管理异常?

我们可以使用上下文管理器方法和with语句。

  1. 进程和线程之间有什么区别?

进程是完整的程序。线程与进程类似:它们也是执行中的代码。但是,线程是在进程内执行的,进程的线程之间共享资源,例如内存。

  1. Python 中用于创建和管理线程的主要模块是什么?

有两种选择:

thread模块提供编写多线程程序的基本操作。

threading模块提供了更方便的接口。

  1. Python 在处理线程时有什么限制?

Python 中线程的执行由全局解释器锁(GIL)控制,因此任何时候都只能执行一个线程,与机器的处理器数量无关。

  1. 哪个类提供了一个高级接口,用于以异步方式执行输入/输出任务? ThreadPoolExecutors提供了一个关于旋转多个线程并使用这些线程以并发方式执行任务的简单抽象。

  2. threading模块中的哪个函数确定执行了哪个线程? 我们可以使用threading.current_thread()函数来确定哪个线程执行了当前任务。

第 3 章:套接字编程

  1. sockets模块的哪种方法允许从 IP 地址获取域名?

通过gethostbyaddr(address)方法,我们可以从 IP 地址获取域名。

  1. socket模块的哪种方法允许服务器套接字接受来自另一台主机的客户端套接字的请求?

socket.accept()用于接受客户端的连接。此方法返回两个值:client_socketclient_address,其中client_socket是用于通过连接发送和接收数据的新套接字对象。

  1. socket模块的哪种方法允许向给定地址发送数据?

socket.sendto(data, address)用于向给定地址发送数据。

  1. socket模块的哪种方法允许您将主机和端口与特定套接字关联?

bind(IP,PORT)方法允许您将主机和端口与特定套接字关联;例如, >>> server.bind((“localhost”, 9999))

  1. TCP 和 UDP 协议之间的区别是什么?如何在 Python 中通过socket模块实现它们?

TCP 和 UDP 之间的主要区别在于 UDP 不是面向连接的。这意味着不能保证我们的数据包将到达它们的目的地,如果传递失败,也不会有错误通知。

  1. socket模块的哪种方法允许您将主机名转换为 IPv4 地址格式?

socket.gethostbyname(hostname)

  1. socket模块中哪种方式允许您使用套接字进行端口扫描并检查端口状态?

socket.connect_ex(address)用于通过套接字实现端口扫描。

  1. socket模块的哪个异常允许您捕获与等待时间到期相关的异常?

socket.timeout

  1. socket模块的哪个异常允许您在搜索 IP 地址信息时捕获错误?

socket.gaierror异常,与消息“connection error to the server: [Errno 11001] getaddrinfo failed"一起引发。

  1. socket模块的哪个异常允许您捕获一般输入和输出错误以及通信?

socket.error

第 4 章:HTTP 编程

  1. 哪个模块是最容易使用的,因为它是为了方便对 RESTAPI 的请求而设计的?

requests模块。

  1. POST 请求是如何通过传递将在请求正文中发送的字典类型数据结构来实现的?

response = requests.post(url, data=data)

  1. 通过代理服务器发出 POST 请求并同时修改头信息的正确方法是什么?

requests.post(url,headers=headers,proxies=proxy)

  1. 如果我们需要通过代理发送带有requests的请求,需要装载什么数据结构?

字典数据结构;例如,proxy = {“protocol”:”ip:port”}

  1. 如果response对象中有服务器的响应,我们如何获取服务器返回的 HTTP 请求的代码?

response.status_code

  1. 我们可以使用哪个模块指示我们将使用PoolManager类保留的连接数?

urllib3

  1. requests库的哪个模块提供了执行摘要类型身份验证的可能性?

HTTPDigestAuth

  1. 基本身份验证机制使用什么编码系统来发送用户名和密码?

HTTP 基本身份验证机制基于表单,使用Base64对用户名和密码组合进行编码,并用冒号(user: password分隔)。

  1. 通过使用单向散列加密算法(MD5),使用哪种机制来改进基本身份验证过程?

HTTP 摘要身份验证机制使用 MD5 加密用户、密钥和域哈希。

  1. 哪个标头用于标识我们用于向 URL 发送请求的浏览器和操作系统?

用户代理头。

第五章:网络流量分析

  1. 什么是 Scapy 函数,可以像tcpdump和 Wireshark 这样的工具一样捕获数据包?

scapy> pkts = sniff (iface = "eth0", count = n),其中n为包数。

  1. 以循环的形式每五秒无限期地发送一个数据包的最佳方式是什么?

scapy> sendp (packet, loop=1, inter=5)

  1. Scapy 必须调用什么方法来检查某台机器(host上的某个端口(port)是否打开或关闭,以及显示有关如何发送数据包的详细信息?

scapy> sr1(IP(dst=host)/TCP(dport=port), verbose=True)

  1. 在 Scapy 中执行traceroute命令需要哪些功能?

IP/UDP/sr1

  1. 哪个 Python 扩展模块与libpcap包捕获库接口?

Pcapy.

  1. Pcapy接口中的哪种方法允许我们捕获特定设备上的数据包?

我们可以使用 Pcapy 接口中的open_live方法在特定设备上捕获数据包,我们可以指定每次捕获的字节数和其他参数,如混杂模式和超时。

  1. 在 Scapy 中发送包裹的方法是什么?

send(): sends layer-3 packets sendp(): sends layer-2 packets

  1. sniff函数的哪个参数允许我们定义将应用于每个捕获数据包的函数?

prn参数将出现在许多其他函数中,如文档中所示,将函数作为输入参数。下面是一个例子:

>>> packet=sniff(filter="tcp", iface="eth0", prn=lambda x:x.summary())

  1. 哪种格式支持 Scapy 在网络数据包上应用过滤器?

伯克利数据包过滤器BPFs

  1. 允许您遵循数据包(IP 包)从计算机 a 到计算机 B 的路由的命令是什么?

**traceroute**

第 6 章:从服务器收集信息

  1. 我们需要什么来访问 Shodan 开发者 API?

在 Shodan 网站注册并使用API_KEY,您可以访问他们的服务。

  1. 在 ShodanAPI 中应该调用哪个方法来获取关于给定主机的信息,以及该方法返回什么数据结构?

方法为host()方法,返回字典数据结构。

  1. 哪个模块可用于获取服务器的横幅?

我们需要用 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)指令创建一个套接字,用sock.sendall(http_get)指令发送 GET 请求,最后用data = sock.recvfrom(1024)指令接收数据。

  1. 使用DNSPython模块获取 IPv6 地址记录需要调用哪种方法和传递哪些参数?

dns.resolver.query('domain','AAAA')

  1. 使用DNSPython模块获取邮件服务器的记录需要调用哪种方法和传递哪些参数?

dns.resolver.query('domain','MX')

  1. 使用DNSPython模块获取名称服务器的记录需要调用哪种方法和传递哪些参数?

dns.resolver.query('domain','NS')

  1. 哪个项目包含包含已知攻击模式的文件和文件夹,这些模式是在 web 应用的各种 pentesting 测试中收集的?

FuzzDB项目提供了被分成不同目录的类别,其中包含可预测的资源位置模式和用于检测具有恶意有效负载或易受攻击路由的漏洞的模式。

  1. 应该使用哪个模块查找服务器上可能存在漏洞的登录页面?

fuzzdb.Discovery.PredictableRes.Logins

  1. 哪个 FuzzDB 项目模块允许我们获取字符串来检测 SQL 注入型漏洞?

fuzzdb.attack_payloads.sql_injection.detect.GenericBlind

  1. DNS 服务器使用哪个端口来解析邮件服务器名称请求?

53(UDP)

第 7 章:与 FTP、SSH 和 SNMP 服务器交互

  1. 我们如何使用ftplib模块通过connect()login()方法连接到 FTP 服务器?

ftp = FTP() ftp.connect(host, 21) ftp.login(‘user’, ‘password’)

  1. ftplib模块的哪种方法允许它列出 FTP 服务器的文件?

FTP.dir()

  1. Paramiko 模块的哪种方法允许我们连接到 SSH 服务器?使用什么参数(主机、用户名、密码)?

ssh = paramiko.SSHClient() ssh.connect(host, username=’username’, password=’password’)

  1. Paramiko 模块的哪种方法允许我们打开会话,以便随后执行命令?

ssh_session = client.get_transport().open_session()

  1. 我们如何使用 RSA 证书登录到 SSH 服务器,从中我们可以找到路由和密码?

rsa_key= RSAKey.from_private_key_file('path_key_rsa',password) client.connect('host',username='',pkey= rsa_key,password='')

  1. PySNMP模块的哪个主要类允许查询 SNMP 代理?

CommandGenerator。以下是其使用示例:

from pysnmp.entity.rfc3413.oneliner import cmdgen cmdGen = cmdgen.CommandGenerator()

  1. 通知 Paramiko 在不中断会话或提示用户的情况下首次接受服务器密钥的说明是什么?

ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

  1. 通过Transport()方法连接到 SSH 服务器的哪种方式提供了另一种类型的对象来对服务器进行身份验证?

transport = paramiko.Transport(ip_address) transport.start_client()

  1. 什么是基于 Paramiko 的 Python FTP 模块,它以安全的方式提供与 FTP 服务器的连接?

pysftp,基于 paramiko。

  1. 下载文件需要使用ftplib中的哪种方法,需要执行哪种ftp命令?

file_handler = open(DOWNLOAD_FILE_NAME, 'wb') ftp_cmd = 'RETR %s' %DOWNLOAD_FILE_NAME ftp_client.retrbinary(ftp_cmd,file_handler.write)

第 8 章:使用 Nmap 扫描器

  1. 哪种方法可以让我们看到扫描的目标机器?

nmap.all_hosts()

  1. 如果我们想执行异步扫描并在扫描结束时执行脚本,我们如何调用scan函数?

nmasync.scan('ip','ports',arguments='--script=/usr/local/share/nmap/scripts/')

  1. 我们可以使用哪种方法获得字典格式的扫描结果?

nmap.csv()

  1. 什么样的 Nmap 模块用于异步执行扫描?

nma = nmap.PortScannerAsync()

  1. 什么样的 Nmap 模块用于同步执行扫描?

nma = nmap.PortScanner()

  1. 如果我们使用self.nmsync = nmap.PortScanner ()指令初始化对象,我们如何在给定主机上、给定端口上启动同步扫描?

self.nmsync.scan(hostname, port)

  1. 我们可以使用哪种方法检查特定网络中的主机是否已启动?

我们可以通过state()功能查看主机是否启动。以下是其使用示例:

nmap[‘127.0.0.1’].state()

  1. 当我们使用PortScannerAsync()类执行异步扫描时,需要定义什么函数?

在执行扫描时,我们可以指示一个额外的回调参数,在这里我们定义了return函数,该函数将在扫描结束时执行。下面是一个例子:

def callback_result(host, scan_result)

nmasync.scan(hosts=’127.0.0.1’, arguments=’-sP’, callback=callback_result)

  1. 如果我们需要知道 FTP 服务是否允许匿名身份验证而无需输入用户名和密码,那么需要在端口21上运行哪个脚本?

ftp-anon.nse

  1. 如果我们需要知道 MySQL 服务是否允许匿名身份验证而无需输入用户名和密码,那么需要在端口3306上运行哪个脚本?

mysql-enum.nse

第 9 章:与 Metasploit 框架的连接

  1. 在 Metasploit 中与模块交互和执行漏洞利用的接口是什么?

msfconsole

  1. 使用 Metasploit 框架开发系统的主要步骤是什么?

使用 Metasploit 框架开发系统的五个步骤如下:

1.配置活动利用漏洞 2。验证漏洞利用选项 3。选择目标 4。选择有效载荷 5。启动漏洞攻击

  1. 使用 Metasploit 框架在客户端和 Metasploit 服务器实例之间交换信息的接口的名称是什么?

MSGRPC 接口使用MessagePack格式在 Metasploit Framework 实例和客户端之间交换信息。

  1. generic/shell_bind_tcpgeneric/shell_reverse_tcp之间有什么区别?

它们之间的区别在于,使用generic/shell_bind_tcp时,从攻击者的机器到受害者的机器建立连接,而使用generic/shell_reverse_tcp时,从受害者的机器建立连接,这要求攻击者的机器有一个监听程序来检测该连接。

  1. 我们可以执行哪个命令来连接msfconsole

./msfrpcd -U user -P password -p 55553 -n -f

这样,Metasploit 的 RPC 接口正在侦听端口55553

  1. 我们需要使用哪一个函数来与框架交互,就像我们可以使用msfconsole实用程序一样?

  2. 我们使用console.create函数,然后使用该函数返回的控制台标识符,如下所示:

import msfrpc client = msfrpc.Msfrpc({'uri':'/msfrpc', 'port':'5553', 'host':'127.0.0.1', 'ssl': True}) client.call('console.create')

  1. 使用 Metasploit 框架在客户端和 Metasploit 服务器实例之间交换信息的远程访问接口的名称是什么?

MSGRPC

  1. 如何从 Metasploit 服务器获取所有利用漏洞的列表?

要获得漏洞利用,您可以在使用该工具后使用**show exploits**命令。

  1. Metasploit 框架中的哪些模块可以访问 ApacheTomcat 中的应用管理器,并利用 ApacheTomcat 服务器获取会话计量器?

在 Metasploit 框架中,有一个名为tomcat_mgr_login的辅助模块,为攻击者提供访问 Tomcat Manager 的用户名和密码。

  1. 在 Tomcat 服务器中执行攻击时,建立 MeterMeter 会话的有效负载名称是什么?

java/meterpreter/bind_tcp

第 10 章:与漏洞扫描器交互

  1. 考虑到一套标准化且易于衡量的标准,对脆弱性进行评分的主要机制是什么?

常见漏洞评分系统CVSS

  1. 我们使用哪个包和类从 Python 与 Nessus 交互?

from nessrest import ness6rest

  1. nessrest模块中的哪种方法在特定目标中启动扫描?

scan = ness6rest.Scanner(url="https://nessusscanner:8834", login="username", password="password")

  1. nessrest模块中的哪种方法获取特定目标的扫描细节?

scan_details(self, name)方法获取请求扫描的详细信息。

  1. 从 Python 连接到nexpose服务器的主要类是什么?

为了通过nexpose服务器连接 Python,我们使用NeXposeServer类,它位于pynexpose.py文件中。

  1. 哪些方法负责列出所有检测到的漏洞并返回 nexpose 服务器中特定漏洞的详细信息?

vulnerability_listing()vulnerability_details()方法负责列出所有检测到的漏洞,并返回特定漏洞的详细信息。

  1. 允许我们解析并获取从nexpose服务器获得的信息的 Python 模块的名称是什么?

BeautifulSoup

  1. 允许我们连接到NexPose漏洞扫描器的 Python 模块的名称是什么?

Pynexpose模块允许从 Python 对 web 服务器上的漏洞扫描器进行编程访问。

  1. 允许我们连接到Nessus漏洞扫描器的 Python 模块的名称是什么?

nessrest

  1. Nexpose服务器以何种格式以简单的方式从 Python 返回要处理的响应?

XML。

第 11 章:识别 Web 应用中的服务器漏洞

  1. 哪种类型的漏洞是向网页中注入恶意脚本以将用户重定向到虚假网站或收集个人信息的攻击?

跨站点脚本XSS允许攻击者在受害者的浏览器中执行脚本,从而劫持用户会话或将用户重定向到恶意站点。

  1. 攻击者将 SQL 数据库命令插入基于 web 的应用使用的订单的数据输入字段的技术是什么?

SQL 注入是一种利用nonvalidated输入漏洞窃取数据的技术。基本上,它是一种代码注入技术,攻击者在其中执行控制 web 应用数据库的恶意 SQL 查询。

您希望防止浏览器运行可能有害的 JavaScript 命令。什么工具允许您检测与 JavaScript 相关的 web 应用中的漏洞?

您可以使用xssscrapy检测 XSS 漏洞。

  1. 什么工具允许您从网站获取数据结构?

Scrapy是 Python 的框架,允许您执行 web 抓取任务、web 抓取过程和数据分析。它允许您递归地扫描网站的内容,并对内容应用一组规则来提取可能对您有用的信息。

  1. 哪些工具允许您检测 web 应用中的 SQL 注入型漏洞?

Sqlmapxsscrapy

  1. w3af 工具的哪个配置文件执行扫描以识别高风险漏洞,如 SQL 注入和 XSS?

audit_high_risk配置文件执行扫描以识别高风险漏洞,如 SQL 注入和 XSS。

  1. W3AFAPI 中包含启用插件、确定攻击目标和管理配置文件所需的所有方法和属性的主要类是哪个?

在整个攻击过程中,最重要的是对core.controllers.w3afCore模块的w3afCore类进行管理。该类的实例包含启用插件、确定攻击目标、管理配置文件以及最重要的启动、中断和停止攻击过程所需的所有方法和属性。

  1. 哪个slmap选项列出了所有可用的数据库?

dbs选项。下面是一个使用示例: >>>sqlmap -u http://testphp.productweb.com/showproducts.php?cat=1 –dbs

  1. 允许扫描服务器中 Heartbleed 漏洞的 Nmap 脚本的名称是什么?

ssl-heartbleed

  1. 哪个过程允许我们与服务器建立 SSL 连接,包括交换对称和非对称密钥,以在客户端和服务器之间建立加密连接?

HandShake确定将使用什么密码套件加密他们的通信,验证服务器,并在开始实际数据传输之前建立安全连接。

第 12 章:从文档、图像和浏览器中提取地理位置和元数据

  1. 哪个 Python 模块允许我们从 IP 地址检索地理信息?

pygeoip允许您从 IP 地址检索地理信息。它基于 GeoIP 数据库,根据其类型分布在多个文件中(类型为cityregioncountryISP)。

  1. 哪个模块使用谷歌地理编码 API v3 服务来检索特定地址的坐标?

pygeocoder是一个 Python 模块,有助于使用 Google 的地理定位功能。使用此模块,您可以轻松找到与坐标对应的地址,反之亦然。我们还可以使用它来验证和格式化地址。

  1. pygeocoder模块的主要类是什么,允许从一个地方的描述和一个特定的位置进行查询?

这个模块的主要类是Geocoder类,它允许从一个地方的描述和一个特定的位置进行查询。

  1. 哪种方法允许反向进程从对应于纬度和经度的坐标恢复给定站点的地址?

results = Geocoder.reverse_geocode(results.latitude, results.longitude)

  1. pygeoip模块中的哪种方法允许我们从参数传递的 IP 地址中获取国家名称的值?

country_name_by_addr(<ip_address>)

  1. pygeoip模块中的哪种方法允许我们从 IP 地址获取具有地理数据(国家、城市、地区、纬度、经度)的字典形式的结构?

record_by_addr(<ip_address>)

  1. pygeoip模块中的哪种方式允许我们从域名中获取组织名称?

org_by_name(<domain_name>)

  1. 哪个 Python 模块允许我们从 PDF 文档中提取元数据?

PyPDF2

  1. 我们可以使用哪个类和方法从 PDF 文档中获取信息?

PyPDF2模块提供提取文档信息以及对文档进行加密和解密的功能。为了提取元数据,我们可以使用PdfFileReader类和getDocumentInfo()方法,它们返回一个包含文档数据的字典。

  1. 哪个模块允许我们以 EXIF 格式从标签中提取图像信息?

PIL.ExifTags用于获取图像的 EXIF 标签信息;可以使用图像对象的_getexif()方法

第 13 章:密码学和隐写术

  1. 哪种算法类型使用相同的密钥加密和解密数据?

对称加密。

  1. 哪种算法类型使用两种不同的密钥,一种用于加密,另一种用于解密?

公钥算法使用两种不同的密钥:一种用于加密,另一种用于解密。这项技术的用户发布他们的公钥,同时对他们的私钥保密。这使任何人都可以向他们发送一条用公钥加密的消息,只有私钥持有者才能解密。

  1. 我们可以在pycrypto中使用哪个包来使用加密算法,如 AES?

from Crypto.Cipher import AES

  1. 对于哪种算法,我们需要确保数据长度为 16 字节的倍数?

AES 加密。

  1. 我们可以使用哪个加密模块包进行对称加密?

fernet包是对称加密的一个实现,保证加密的消息在没有密钥的情况下不能被操作或读取。以下是其使用示例:

from cryptography.fernet import Fernet

  1. 使用哪种算法从密码派生加密密钥?

基于密码的密钥派生功能 2PBKDF2)。对于加密模块,我们可以使用cryptography.hazmat.primitives.kdf.pbkdf2导入PBKDF2HMAC的包

  1. 什么提供了对称加密的fernet包?使用哪种方法生成密钥?

fernet包是对称加密的一个实现,保证加密的消息在没有密钥的情况下不能被操作或读取。要生成密钥,我们可以使用以下代码:

from cryptography.fernet import Fernet

key = Fernet.generate_key()

  1. 哪个类提供ciphers包对称加密?

cryptography.hazmat.primitives.ciphers.Cipher

  1. stepic中的哪种方法生成包含隐藏数据的图像,从现有图像和任意数据开始?

encode(image,data)

  1. pycrypto中的哪个包包含一些允许单向加密的哈希函数?

from Crypto.Hash import [Hash Type]