20、黑客必备:系统服务自动化与Python脚本基础

黑客必备:系统服务自动化与Python脚本基础

1. 系统服务自动化启动

在系统操作中,让服务在系统启动时自动运行是一项常见需求。以PostgreSQL服务为例,我们可以通过命令行或图形界面两种方式实现其开机自启。

1.1 命令行方式

首先,将相关行添加到 rc.d 文件后,需要重启系统使更改生效。重启后,使用 ps 命令结合 grep 来查找PostgreSQL进程:

kali >ps aux | grep postgresql

执行该命令后,若看到类似如下输出,说明PostgreSQL服务已成功运行:

postgresql  757  0.0  0.1 287636  25180 ?    S  March 14   
0.00 /usr/lib/postgresql/9.6/bin/postgresql -D  
/var/lib/postgresql/9.6/main  
-c config_file=/etc/postgresql/9.6/main/postgresql.conf
root   3876    0.0     0.0  12720    964pts/1    S+   14.24  0.00 grep postgresql

这表明PostgreSQL在系统启动时自动运行,无需手动输入命令,随时可与Metasploit配合使用。

1.2 图形界面方式

如果你更习惯使用图形界面来添加启动服务,可以从Kali仓库下载基于图形界面的工具 rcconf

kali >apt-get install rcconf

安装完成后,输入以下命令启动 rcconf

kali >rcconf

启动后会打开一个简单的图形界面,你可以滚动浏览可用服务,选择要在开机时启动的服务,然后点击“OK”。在该界面中,PostgreSQL服务通常位于倒数第二个位置,按下空格键选择该服务,按下“Tab”键高亮“ ”,然后按下回车键。下次启动Kali时,PostgreSQL将自动启动。

2. 任务调度自动化

系统管理员和黑客经常需要定期调度服务、脚本和实用程序。Linux允许使用 cron 守护进程来定期运行几乎任何脚本或实用程序, cron cron 表中运行这些任务。以下是一些练习,帮助你掌握任务调度的技能:
1. 安排 MySQLscanner.sh 脚本每周三下午3点运行。
2. 安排 MySQLscanner.sh 脚本在4月、6月和8月的每月10号运行。
3. 安排 MySQLscanner.sh 脚本每周二至周四上午10点运行。
4. 使用快捷方式安排 MySQLscanner.sh 脚本每天中午运行。
5. 更新 rc.d 脚本,使系统每次启动时都运行PostgreSQL。
6. 下载并安装 rcconf ,并将PostgreSQL和MySQL数据库设置为开机启动。

3. Python脚本基础

对于黑客来说,掌握基本的脚本编写技能至关重要。Python是黑客广泛使用的脚本语言,许多流行的黑客工具都是用Python编写的,如 sqlmap scapy Social-Engineer Toolkit (SET) w3af 等。

3.1 Python模块的添加

安装Python时,会同时安装其标准库和模块,这些库和模块提供了广泛的功能,包括内置数据类型、异常处理、数值和数学模块、文件处理、加密服务、互联网数据处理以及与互联网协议(IP)的交互等。但有时你可能需要额外的第三方模块,Python的第三方模块非常丰富,这也是大多数黑客选择Python进行脚本编写的原因。你可以在 Python Package Index (PyPI) 上找到第三方模块的完整列表。

使用 pip 可以方便地安装和管理Python包。由于这里使用的是Python 3,需要使用Python 3的 pip 来下载和安装包。 pip 通常会默认安装,如果需要,可以从Kali仓库下载并安装:

kali >apt-get install python3-pip

要从PyPI下载模块,只需输入以下命令:

kali >pip3 install <package name>

下载的包会自动放置在 /usr/local//lib/<python-version>/dist-packages 目录中。如果你不确定包在系统中的位置,可以使用以下命令查看:

kali >pip3 show <package name>

例如,查看 pysnmp 包的信息:

kali >pip3 show pysnmp
Name: pysnmp
Version: 4.4.4
Summary: SNMP library for Python
Home-page: https://github.com/etingof/pysnmp
Author: Ilya Etingof <etingof@gmail.com>
Author-email: etingof@gmail.com
License: BSD
Location: usr/local/lib/python3.6/dist-packages
Requires: ptsmi, pyansl, pycryptodomex

除了使用 pip ,你还可以直接从网站下载包,确保下载到正确的目录,解压后运行以下命令进行安装:

kali >python3 setup.py install
3.2 安装第三方模块示例

以安装 nmap 的Python模块为例,首先从其在线仓库下载模块:

kali >wget http://xael.org/norman/python/python-nmap/python-nmap-0.3.4.tar.gz

下载完成后,使用 tar 命令解压:

kali >tar -xzf python-nmap-0.3.4.tar.gz

然后切换到新创建的目录:

kali >cd python-nmap-.03.4/

最后,在该目录中安装新模块:

kali >~/python-nmap-0.3.4 >python setup.py install
3.3 Python脚本入门

学习Python脚本编写,首先要了解一些基本概念和术语,以及基本语法。可以使用任何文本编辑器创建Python脚本,为了简单起见,建议使用像Leafpad这样的简单文本编辑器。不过,也有许多集成开发环境(IDE)可用于Python开发,如Kali内置的 PyCrust ,以及JetBrain的 PyCharm ,它是一个优秀的IDE,有很多增强功能,能让学习Python变得更轻松快捷,有专业版和免费的社区版可供选择,可在 https://www.jetbrains.com/pycharm/ 找到。

以下是Python脚本编写的一些基本要点:
- 格式化 :Python与其他脚本语言的一个区别是格式化非常重要。Python解释器使用格式化来确定代码的分组方式,关键是要保持一致,特别是缩进级别。例如,如果一组代码行以双缩进开始,那么在整个代码块中都要保持双缩进,这样Python才能识别这些代码行属于同一组。
- 变量 :变量是编程中最基本的数据类型之一。在Python中,变量是与特定值关联的名称,使用该名称时会调用关联的值。变量可以包含各种类型的值,如整数、实数、字符串、浮点数、布尔值、列表或字典。以下是一个简单的Python脚本示例,展示了变量的使用:

#! /usr/bin/python3
name="OccupyTheWeb"
print("Greetings to " + name + " from Hackers-Arise. The Best Place to Learn Hacking!")

在运行这个脚本之前,需要使用 chmod 命令赋予执行权限:

kali >chmod 755 hackers-arise_greetings.py

然后执行脚本:

kali >./hackers-arise_greetings.py

另一个示例展示了不同数据类型的变量:

#! /usr/bin/python3
HackersAriseStringVariable = "Hackers-Arise Is the Best Place to Learn Hacking"
HackersAriseIntegerVariable = 12
HackersAriseFloatingPointVariable = 3.1415
HackersAriseList = [1, 2, 3, 4, 5, 6]
HackersAriseDictionary = {'name': 'OccupyTheWeb', 'value' : 27}
print(HackersAriseStringVariable)
print(HackersAriseIntegerVariable)
print(HackersAriseFloatingPointVariable)

同样,需要赋予执行权限并执行脚本:

kali >chmod 755 secondpythonscript.py
kali >./secondpythonscript.py
  • 注释 :Python和其他编程语言一样,支持添加注释。注释用于解释代码的功能,Python解释器会忽略注释。Python使用 # 符号表示单行注释,使用三个双引号 """ 表示多行注释。例如:
#! /usr/bin/python3
"""
This is my first Python script with comments. Comments are used to help explain code to 
ourselves and fellow programmers. In this case, this simple script creates a greeting for 
the user.
"""
name = "OccupyTheWeb"
print ("Greetings to "+name+" from Hackers-Arise. The Best Place to Learn Hacking!")

执行该脚本时,输出与没有注释时相同,但再次查看代码时可以获得更多信息。
- 函数 :Python中的函数是执行特定操作的代码片段。Python有许多内置函数,如 print() exit() float() help() 等。你也可以创建自己的函数来执行自定义任务。在创建自定义函数之前,建议先查看官方Python文档,确认是否已有可用的函数。以下是一些常见的内置函数:
| 函数名 | 功能 |
| ---- | ---- |
| exit() | 退出程序 |
| float() | 将参数转换为浮点数 |
| help() | 显示指定对象的帮助信息 |
| int() | 返回参数的整数部分 |
| len() | 返回列表或字典中的元素数量 |
| max() | 返回参数(列表)中的最大值 |
| open() | 以指定模式打开文件 |
| range() | 返回两个指定值之间的整数列表 |
| sorted() | 对列表进行排序并返回排序后的列表 |
| type() | 返回参数的类型 |
- 列表 :许多编程语言使用数组来存储多个独立对象。在Python中,数组的一种常见实现是列表。Python列表是可迭代的,这意味着可以遍历列表中的元素。Python和其他编程环境一样,列表的索引从0开始,例如,要访问列表中的第三个值,可以使用 array[2] 。以下是一个访问列表元素的示例:

HackersAriseList = [1, 2, 3, 4, 5, 6]
print(HackersAriseList[3])  # 显示列表中的第四个元素

通过以上内容,你可以初步了解系统服务自动化启动和Python脚本编写的基础知识,希望这些内容能帮助你在相关领域不断探索和实践。

下面是一个简单的mermaid流程图,展示Python脚本编写的基本流程:

graph LR
    A[选择文本编辑器] --> B[编写Python脚本]
    B --> C[添加变量、函数等代码]
    C --> D[添加注释解释代码]
    D --> E[保存脚本]
    E --> F[赋予执行权限]
    F --> G[执行脚本]

总之,无论是系统服务的自动化管理,还是Python脚本的编写,都需要不断练习和实践,才能熟练掌握并应用到实际工作中。希望你能通过这些知识和技能,提升自己在相关领域的能力。

黑客必备:系统服务自动化与Python脚本基础

4. 列表的深入应用

在Python中,列表是一种非常强大且常用的数据结构,除了基本的元素访问,还有许多其他的操作和应用场景。

4.1 列表的修改

列表中的元素可以被修改、删除或添加。以下是一些常见的操作示例:

# 修改列表中的元素
HackersAriseList = [1, 2, 3, 4, 5, 6]
HackersAriseList[2] = 10  # 将列表中的第三个元素修改为10
print(HackersAriseList)

# 删除列表中的元素
del HackersAriseList[3]  # 删除列表中的第四个元素
print(HackersAriseList)

# 添加元素到列表末尾
HackersAriseList.append(20)
print(HackersAriseList)

# 在指定位置插入元素
HackersAriseList.insert(1, 30)  # 在列表的第二个位置插入元素30
print(HackersAriseList)
4.2 列表的切片

切片是Python中处理列表的一种强大方式,它允许你从列表中提取部分元素。切片的语法是 list[start:stop:step] ,其中 start 是起始索引, stop 是结束索引(不包含该索引对应的元素), step 是步长。以下是一些示例:

HackersAriseList = [1, 2, 3, 4, 5, 6]
print(HackersAriseList[1:4])  # 提取第二个到第四个元素
print(HackersAriseList[:3])  # 提取前三个元素
print(HackersAriseList[3:])  # 提取从第四个元素到列表末尾的所有元素
print(HackersAriseList[::2])  # 提取所有偶数索引的元素
4.3 列表的排序和反转

Python提供了方便的方法来对列表进行排序和反转。以下是示例代码:

HackersAriseList = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
HackersAriseList.sort()  # 对列表进行升序排序
print(HackersAriseList)

HackersAriseList.reverse()  # 反转列表
print(HackersAriseList)
5. 字典的深入应用

字典是Python中另一种重要的数据结构,它以键值对的形式存储数据。以下是字典的一些常见操作和应用场景。

5.1 字典的修改和删除

字典中的值可以被修改,键值对也可以被删除。以下是示例代码:

fruit_color = {'apple': 'red', 'grape': 'green', 'orange': 'orange'}
fruit_color['apple'] = 'green'  # 修改字典中键为'apple'的值
print(fruit_color)

del fruit_color['grape']  # 删除字典中键为'grape'的键值对
print(fruit_color)
5.2 字典的遍历

可以使用不同的方法遍历字典中的键、值或键值对。以下是示例代码:

fruit_color = {'apple': 'red', 'grape': 'green', 'orange': 'orange'}
# 遍历字典的键
for key in fruit_color.keys():
    print(key)

# 遍历字典的值
for value in fruit_color.values():
    print(value)

# 遍历字典的键值对
for key, value in fruit_color.items():
    print(key, value)
5.3 字典的嵌套

字典可以嵌套,即一个字典的值可以是另一个字典。以下是一个示例:

students = {
    'student1': {'name': 'Alice', 'age': 20},
    'student2': {'name': 'Bob', 'age': 21}
}
print(students['student1']['name'])  # 访问嵌套字典中的值
6. 循环结构

在Python中,循环结构是实现重复操作的重要工具。常见的循环结构有 for 循环和 while 循环。

6.1 for循环

for 循环通常用于遍历可迭代对象,如列表、字典等。以下是一些示例:

# 遍历列表
HackersAriseList = [1, 2, 3, 4, 5, 6]
for num in HackersAriseList:
    print(num)

# 遍历字典
fruit_color = {'apple': 'red', 'grape': 'green', 'orange': 'orange'}
for key, value in fruit_color.items():
    print(key, value)
6.2 while循环

while 循环会在条件为真时一直执行循环体。以下是一个示例:

count = 0
while count < 5:
    print(count)
    count = count + 1
7. 条件语句

条件语句用于根据不同的条件执行不同的代码块。Python中的条件语句主要是 if-elif-else 结构。以下是一个示例:

num = 10
if num > 20:
    print("The number is greater than 20.")
elif num > 5:
    print("The number is greater than 5 but less than or equal to 20.")
else:
    print("The number is less than or equal to 5.")
8. 综合应用:编写一个简单的端口扫描器

结合前面所学的Python知识,我们可以编写一个简单的端口扫描器。以下是示例代码:

import socket

def port_scan(target, port):
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(1)
        result = sock.connect_ex((target, port))
        if result == 0:
            print(f"Port {port} is open.")
        else:
            print(f"Port {port} is closed.")
        sock.close()
    except socket.error as e:
        print(f"Error occurred: {e}")

target = '127.0.0.1'
for port in range(1, 1025):
    port_scan(target, port)

总结

本文涵盖了系统服务自动化启动和Python脚本编写的多个方面。系统服务自动化启动可以通过命令行或图形界面的方式实现,让服务在系统启动时自动运行,提高工作效率。Python脚本编写方面,我们介绍了Python模块的添加、第三方模块的安装、基本语法(如变量、注释、函数等)、列表和字典的应用、循环结构和条件语句,最后还通过一个简单的端口扫描器示例展示了如何综合运用这些知识。

以下是一个mermaid流程图,展示端口扫描器的工作流程:

graph LR
    A[开始] --> B[设置目标IP和端口范围]
    B --> C[循环遍历端口]
    C --> D[创建套接字]
    D --> E[尝试连接目标端口]
    E --> F{连接是否成功}
    F -- 是 --> G[输出端口开放信息]
    F -- 否 --> H[输出端口关闭信息]
    G --> I[关闭套接字]
    H --> I
    I --> J{是否遍历完所有端口}
    J -- 否 --> C
    J -- 是 --> K[结束]

通过不断练习和实践,你可以熟练掌握这些知识和技能,并将其应用到实际的黑客技术和系统管理工作中。希望本文能为你在相关领域的学习和实践提供帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值