脚本技能至关重要,是提升到黑客集团的高层。没有脚本技能,您依赖其他人来开发您的工具。当其他人开发您的工具时,您将始终在与安全管理员的战斗中落后。
请记住,安全管理员和黑客之间正在进行国际象棋比赛。有时只有几周的优势可能是巨大的成功和痛苦的失败之间的差异。
在我之前使用Perl编写脚本的教程中,我们开发了一个简单的脚本来演示基本的Perl语法。在本教程中,我们将深入研究并进一步发展您的技能,以实现我们首先开发类似于nmap的端口扫描程序的目标,并最终开发我们自己的漏洞。
然而,在我们继续前进之前,我们需要检查一些重要的编程和Perl概念和结构。
参数
我们经常需要将数据(数据,而不是气体)传递到脚本中并从脚本中传出。在我在Null Byte上演示的许多工具中,我们需要提供目标IP,可能是端口,文件(例如,可能是单词列表)等。
这些中的每一个都是在我们运行时传递给工具的参数。我们可以通过在调用脚本文件后输入数据时使用数组来保存这些数据。我们将使用我们在此构建的新端口扫描器来尝试此操作。
控制声明
与任何脚本或编程语言一样,有时我们需要做出决定。如果值为true,则执行此操作; 如果不是这样,那就做点别的。这些决定由控制声明做出。
这些控制语句中最基本的是IF,THEN,ELSE语句。我们将看看Perl如何在我们的端口扫描器中实现IF,THEN,ELSE,我们需要决定采用什么方法或输出什么输出。
循环
很多时候,我们需要反复做一个动作。为此,我们可以使用FOR循环或WHILE循环。FOR循环将继续执行指定次数的迭代。另一方面,当特定条件评估为真时,WHILE继续。
在我们在这里创建的端口扫描器中,我们需要扫描每个端口,直到我们到达最后一个端口或用户在传递给脚本的参数中指定的最后一个端口。我们将使用FOR语句来完成此任务。
步骤1
创建我们的端口扫描仪
所以,既然我们有更多的Perl背景,让我们开始创建我们的端口扫描器,这与nmap非常相似。在最基本的用途中,nmap能够告诉我们哪些端口是打开的,哪些是关闭的。我们正在创建的端口扫描程序应该能够管理同样的任务。
我在下面的三个屏幕截图中显示了端口扫描器,其中包含行号以帮助您跟进。您可以将其复制到任何文本编辑器中,但在这里我使用的是Kali,Leafpad 内置的图形文本编辑器。
在我们开始之前,我们需要看看第4行。
在那里你会看到一个命令:
使用Socket;
此调用具有以下语法:
socket(SOCKET,DOMAIN,TYPE,PROTOCOL);
我们将使用它在我们的扫描系统和目标系统之间建立连接。可以想象,对于黑客来说,它是一个非常强大的功能,我们将在其他Perl黑客脚本中使用它,所以现在熟悉它很重要。
现在,让我们逐行浏览我们的脚本。
-
定义我们想要使用的解释器 - / usr / bin / perl。
-
评论为我们的脚本命名。
-
已在上面描述过。
-
确保回车正常工作。
-
声明此脚本的必要变量。
-
定义我们将用于扫描的协议。
-
定义传递给脚本的参数。
-
说如果用户传递-h而不是IP地址,则运行使用信息。
-
如果没有传递值,则将变量$ ip设置为localhost,否则使用传递的参数。
-
如果没有传递参数,则将端口变量$ port设置为1。
-
如果没有传递参数,则将变量$ port_stop设置为65535。
-
如果没有传递参数,则将$ log变量设置为qsopenports.txt。
-
说打开LOGFILE并附加(>>)文件或打印错误消息,如果它无法打开。
-
一条注释,说明每次写入后都会刷新日志缓冲区。
-
说选择日志文件中的第一条记录。
-
包含打印消息。
-
包含打印消息。
-
开始我们的FOR循环。它表示使用$ port变量中的值,如果它小于变量$ port_stop变量,则执行以下操作并将端口号递增1。
-
使用定义的参数调用socket()进行连接。
-
开始条件if语句。它会检查端口是否未打开,然后打开一个语句,如果它已关闭,否则如果打开打印它是打开的,然后关闭连接。
-
然后关闭日志文件。
-
只需将打印消息转发给最终用户即可
-
与51相同。
-
开始用户使用-h开关时打印的使用说明。
第2步
更改权限
现在我们已经创建了扫描程序,保存了它,并将其命名为nullbyteportscanner,我们需要给自己执行权限。类型:
chmod 755 nullbyteportscanner
步骤3
使用-H Switch运行它
我们现在尝试使用-h开关运行它。这应该在运行之前给我们使用信息。这可能是新用户了解我们的工具如何工作的第一步。
正如您所看到的,它可以很好地为我们提供有关如何将脚本用于最终用户的基本信息。
步骤4
使用默认值扫描
现在,让我们使用我们的扫描仪使用默认设置。
./nullbyteportscanner
如您所见,它扫描了localhost(默认值),查找1到65535之间的所有端口(默认值),发现只有两个端口打开。
步骤5
使用参数扫描
最后,让我们通过将参数传递给我们的扫描仪,将我们的端口扫描器用于另一个系统。在我们的例子中,我们将针对192.168.1.102运行它,从端口1开始到端口2000结束。
./nullbyteportscanner 192.168.1.102 1 2000
如您所见,我们的nullbyteportscanner有效!它在端口1和端口2000之间的目标系统上的开放端口上找到并向我们报告,就像nmap一样。
网友评论