基本的脚本编程能力对于黑客来说十分必要。如果你不会脚本,这意味着降低了你成功的可能性,且增加了你被反病毒软件、入侵检测系统和执法部门检测到的可能性。如果你有黑客脚本编程的经历,可以将你的黑客水平提升一个大层次。
前面介绍了bash脚本基础和编写mysql数据的扫描脚本MySQLScanner.sh。在这里会提及被黑客使用最广泛的脚本语言:Python
sqlmap,scapy,SET,w3af等都是python编写的。
python有一些重要的功能,这使它特别适合黑客行为,最重要的是它有一个种类繁多的库(从外部导入和内置的预编译代码模块)它提供了一些强大的功能。python超过1000多内置模块,其他代码仓库里还有更多。
开发黑客工具也可以使用其他编程语言,例如:bash,perl和ruby,但是python的模块让开发这些工具变得特别简单。
添加PYTHON模块
安装python时,还要安装一组标准库和模块。你可能还需要额外的第三方模块,三方模块多种多样,这可能是多数黑客选择使用python编写脚本的原因所在。可以在PyPI(the python package index)www.pypi.org 里找到全面的第三方模块列表。
使用pip
python有一个专门用于安装和管理python包的包管理软件,叫做pip(pip installs packages)由于现在是python3了,命令如下
apt-get install python3-pip
现在,为了在PyPI上下载模块,需要给出额外的模块名称
pip3 install 【package name】
下载的这些包,被自动放在/usr/local/lib/<python-version>/dist-packages目录。如果你使用pip安装了python3.6的SNMP协议,路径就是/usr/local/lib/python3.6/pysnmp中。
如果不清楚包被放在系统的什么位置,输入pip3 show 包的名字
pip3 show
可以直接从网站上下载包,解压它。
python setup.py install
这会安装任何已解压但是没安装的包
安装第三方模块
要安装其他python社区成员开发的第三方模块,可以简单的用wget从存储它的网站下载,解压模块,然后运行python setup.py install命令。
举例,从https://xael.org下载和安装,nmap的python模块
下载好后,需要用tar命令解压它
最后在那个目录,使用命令安装新的模块
安装了nmap模块后,可以通过导入模块在你的python脚本中使用它。
开始使用python编写脚本
与bash或其他脚本一样,可以使用任何文本编辑器创建python脚本。建议使用简单地文本编辑器,例如Leafpad,但要知道python有集成开发环境IDE。kali内置了IDE PyCrust,还有很多IDE可以下载,最好的就是富有争议的PyCharm。它有一个付费的专业版和一个免费的社区版本。在https://www.jetbrains.com/pycharm/找到它。
注意:第一次接触编程的人,需要耐心地掌握我提供的每一个小脚本。
python的格式
格式在python中十分重要。python解释器使用格式分辨代码的组成。格式的细节并不如格式的统一,尤其是缩进重要。
如果有一组以两个缩进开头的代码行,为了让python识别出这些代码是一起的,必须在整个代码块内统一使用两个缩进。这和用其他编程语言编写脚本有所不同。这是要时刻牢记的。
变量
变量名指向内存中的数据,可以包含任何种类的值:整数,实数,字符串,浮点数,布尔值,列表,或字典。
为了熟悉基础,用Leafpad创建一个简单地脚本,并保持为hackers-arise_greetings.py
第一行告诉你,使用python解释器运行这个程序,而不是其他任何语言。
第二行定义了一个变量叫name且已经给它赋值了,这个变量的值是string数据格式,内容需要被引号包起来。
第三行创建了一个print()声明将Greetings tohename变量的值连起来,随后再连后面字符串。在屏幕上显示结果。
在你开始运行脚本之前,需要授权。使用chmod命令。
chmod 755 hackers-arise_greetings.py
这个脚本创建了五个含有不同数据结构的变量:一个字符串,一个整数,一个浮点数,一个列表,一个字典(是一个无序的数据集,每个值对应一个键,所谓的数组)。
使用文本编辑器创建脚本,保持为secondpythonscript.py,然后授予执行的权限。
chmod 755 secondpythonscript.py
注释
# 单行注释 开头和结尾使用三个双引号 多行注释
函数
列表
在python中,几乎没有数组的实现,但最常见的实现可能是lists。
python中的列表是可迭代的,注意术语,什么是迭代。当你运行它时,列表可以提供连续的元素,我们使用列表时,会查看它们,逐个打印出值。
可以通过调用列表的名称然后接方括号和想要获取元素的索引来访问与打印。
模块
保存到单独文件中的一段代码,你可以在程序中根据需要多次使用它,无需再次输入。
想要使用模块或模块中的任何代码,需要import它。使用标准和第三方模块是使python对黑客如此强大的关键功能之一。如果要使用之前安装的nmap模块,脚本添加以下行:
import nmap
还有两个非常有用的模块:socket和ftplib
面向对象编程(OOP)
当今大多数编程语言,都是这种思维。对象中有属性与方法。
python网络通信
建立TCP客户端
使用套接字(socket)模块在python中创建一个TCP网络连接。
编写以下脚本,保存到名为banner.py的脚本中。注意:banner是当有东西连接到它时应用程序呈现的内容。它有点像发送问候语的应用程序,宣布它是什么。比如,你看它一眼,它会跟你打招呼:你好,我是小白,请指示。
黑客使用一种称为banner获取的技术来查找关于端口上运行的应用程序或服务的重要信息。
#! /usr/bin/python3
import socket ##导入网络工具的模块
s = socket.socket() #创建s变量,将他和socket模块中的socket类关联。要使用socket.socket()时,只需要使用s变量即可
s.connect(("192.168.1.101", 22)) #使用socket模块中的connect()方法来建立到IP和端口的网络连接,22端口默认是ssh端口
answer = s.recv(1024) #建立联系了,使用接收方法recv来接收来自socket的1024字节数据,且将它存储到answer变量
print(answer) #这1024字节包含了banner信息。打印到屏幕上,看看22端口到底是不是ssh服务
s.close() #关闭连接
保存脚本,使用chmod更改权限为755执行。
如果22端口确实是SSH的话,你就会看见:SSH-2.0-OpenSSH_7.3p1 Debian-1
这样,就创建了一个简单的banner抓取python脚本了。可以使用这个脚本来找出IP地址和端口上运行的应用、版本和操作系统。这给我们攻击系统前带来了关键的信息。这和shodan网站对地球上几乎每个IP地址所做的是一样的,区别是它为我们把这些信息分类和建立索引罢鸟。
创建TCP监听器
上面那个脚本是客户端,可连接到另一个TCP/IP地址和端口,监视正在传输的信息。socket还可以用于创建TCP监听器,以监听从外部到服务器的连接。
你将从服务器的角度,创建一个任意端口的socket,当别人连接这个socket时,收集连接者系统的关键信息。
脚本命名为tcp_server.py,确保使用chmod授予你自己执行权限。
#!/usr/bin/python3 import socket
TCP_IP = "192.168.181.190" TCP_PORT = 6996
BUFFER_SIZE = 100 定义客户端的连接IP、端口、连接系统捕获的数据的缓冲区大小的信息
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 定义了socket
s.bind((TCP_IP, TCP_PORT)) 使用绑定的IP地址和端口
s.listen(1) 使用socket库中的listen()方法进行监听
conn,addr = s.accept() 使用socket库的accept方法捕获连接系统的IP地址和端口,并将这些信息打印到屏幕上
print( 'Connection address: ', addr )
while 1: 1表示布尔值为真,无限循环,一直监听客户端数据
date=conn.recv(BUFFER_SIZE)
if not date:break
print ("Received data: ", data)
conn.send(data) #echo
conn.close
现在转到网络上的另一台计算机,使用浏览器连接到脚本中指定的6996端口。运行脚本,发现连接者的信息如下:
这些是黑客在攻击前收集的关键信息。漏洞攻击,针对特定的操作系统、应用程序,甚至正在使用的语言,因此黑客需要在继续攻击之前尽可能了解有关目标的信息。这种行为通常被称为侦查。你刚刚开发了一个工具,可以收集潜在目标的关键信息,非常类似于流行的黑客工具p0f。
字典,循环,和控制语句
继续扩展python的理解,然后使用所学的一切来制作破解FTP服务器密码的程序
字典
乱序的形式保存信息,每对键值(key = value)的形式存在。我们使用字典来存储,并给每个东西一个标签,这可以单独使用和引用该事物。例如,可以使用字典来存储用户ID及其关联名字,或者存储与特定主机关联的已知漏洞。其他语言的数组,在python中叫做字典。
与列表一样,字典也是可迭代的。注意术语:可迭代,往往也存在于数学中。意思是,可以使用一个控制结构把它里面的东西逐个看看。比如for循环,遍历,枚举,可迭代,这些乱七八糟的术语都在说一回事情,一个个的列出来查看整个字典。
可以使用此结构遍历存储在字典中的每个密码,直到某个密码生效或破解器到达字典末尾。
dict = {key1:value1, key2:value2...} 低于字典,使用大括号和逗号分隔。
控制语句
python中有许多方法可控制脚本的流程
IF语句
if...else
循环
while循环
For循环
改进我们的脚本
回到banner抓取脚本,并添加一些功能。
我们将添加一个要获取banner的端口列表,而不仅仅是监听一个端口,然后使用for语句遍历该列表。
异常和密码破解
任何代码都会出错或异常。为了处理可能的错误,使用异常处理,在python中,有try/except结构来处理这些错误或异常。
try尝试执行一些代码,如果发生错误,except语句将处理该错误。类似于if...else。
如果由于密码不匹配而发生错误,则使用except语句移动到下一个密码。
使用ftplib模块中的工具来实现FTP协议,先导入它。询问用户列表的路径,命令locate wordlist。kali linux中有许多密码列表。
使用了一个新的名为strip()的python函数。此函数删除字符串的第一个和最后一个字符(这里是密码列表)。列表中的密码前面有空格或逗号,则需要执行此操作。
总结 以下都是信息的来源,用于努力缩小信息差。
要想从脚本小子进阶,必须掌握一种脚本语言,python是良好的首选。作者推荐大家,想学更多python知识的话,强烈推荐由AI Sweigart编写的No Starch Press出版社的优秀书籍《Automate the Boring Stuff with Python (2015)》
关于作者,OccupyTheWeb是一名信息安全顾问,调查取证专家和培训师,超过20年的行业经验。他辅助维护HackersArise培训网站
https://www.hackers-arise.com,培训美国军方人员,国防部承包商进行信息安全和黑客攻击。
关于译者,汉武安全实验室。(http://www.hawoo.net) (总体框架统一格式) https://github.com/hawoosec
关于转载者:信安之路,QQ群615802275
OpenSec:优秀的翻译者
https://github.com/byr0nchan 两块,网络信息数据安全研究从业者,考了一箱证书
https://github.com/ink247GG ink247GG ,学弟,还未就业。
https://github.com/nJcx nJcx甲方安全开发工程师,主要研发各种软硬件防御产品,偶尔挖挖src搞点小红包。
https://github.com/sara961 sara961石帅哥,等保从业者,精通各种打酱油技术。