Python绝技:运用Python成为顶级黑客>>>>笔记及心得体会[1]

本文是作者学习《Python绝技》的笔记,分享了使用Python进行渗透测试的心得体会,包括Morris蠕虫的历史和影响,以及如何用Python编写端口扫描器。作者探讨了Python在信息安全领域的应用,并分享了开发环境的配置经验,如Python版本选择、Ubuntu和Kali Linux的使用,以及遇到的模块安装问题。同时,文章展示了简单的端口扫描器代码,通过optparse库实现命令行交互,并介绍了多线程在扫描中的应用。

这是我第一次写博客,主要是为了在学习效率比较低的时间来总结复习之前学习的内容。
Python绝技这本书,我17年就买了,但一直没完成的学下来,今年时间较多就打算从头至尾学了一遍,我也是个信息安全刚入门的小白,网上关于这本书的文章也多限于贴代码,对于基础较为第一般的同学(例如我)参考意义不大,当然我也写不出什么高级的东西,可能主要是指出可能遇到的坑和我的解决办法,也进一步督促我学习,少玩游戏。

开发环境

我之前一直使用Python3.7学习爬虫,这本书使用的是Python2.7,两者在本书中的各种功能实现,仅仅只是语法存在细微差别。大部分的代码,我都在ubuntu16和kali中实现,部分主要是第3章取证的内容利用windows,在ubuntu里面我装了pycharm,激活很方便,对于python模块的安装,有时是挺让人头疼的,pip、easy_install、apt-get及pycharm自带的安装器轮番上阵,大神可能不屑,但对于小白入门太不友好。

用Python进行渗透测试

Morris蠕虫

它的编写者是美国康乃尔大学一年级研究生罗伯特·莫里斯。这个程序只有99行,利用了Unix系统中的缺点,用**Finger命令查联机用户名单,然后破译用户口令,用Mail系统复制、传播本身的源程序,再编译生成代码。**最初的网络蠕虫设计目的是当网络空闲时,程序就在计算机间“游荡”而不带来任何损害。当有机器负荷过重时,该程序可以从空闲计算机“借取资源”而达到网络的负载平衡。而莫里斯蠕虫不是“借取资源”,而是“耗尽所有资源”。是通过互联网传播的第一种蠕虫病毒。
11月2日晚上11点左右,哈佛大学的Aiken计算机实验室成员Andrew Sudduth和同事 Paul Graham正在聊天,这时莫里斯打电话进来。莫里斯本科毕业于哈佛大学,Sudduth和Graham都是莫里斯的朋友。Graham接了电话 ,之后告诉Sudduth Morris承认释放了一个正在互联网上传播的病毒。
半个小时后莫里斯再次打进电话,这次是Sudduth接的。莫里斯建议哈佛采取措施保护计算机。
3日凌晨2:30,恐慌的莫里斯第三次打来电话,他觉得自己犯了一个大错,请求Sudduth代表他在用户组里匿名发帖,为其行为道歉,并给出方法更新计算机防止感染病毒。但这条消息当时没有引起注意。
蠕虫源码 链接:链接:https://pan.baidu.com/s/1IL1lhoDnruOW99y2ccrU9A
提取码:k2c8
大学编程入门就学的C,现在全还老师了,表示那时候如果能用Python教编程,也不至于当时那么厌烦编程,后面数据结构和算法也学得一塌糊涂。

端口扫描器

先上代码

import optparse
import socket
from socket import  *
from threading import *
screenLock = Semaphore(value=1)
def connScan(tgtHost, tgtPort):
    try:
        connSkt = socket(AF_INET, SOCK_STREAM)
        connSkt.connect((tgtHost,tgtPort))
        connSkt.send('give me some info!')
        result = connSkt.recv(100)
        screenLock.acquire()
        print '[+]%d/tcp open ' % tgtPort
        print '[+]' + str(result)
        connSkt.close()
    except:
        screenLock.acquire()
        print '[-]%d/tcp closed' % tgtPort
    finally:
        screenLock.release()
        connSkt.close()
def portScan(tgtHost, tgtPorts):
    try:
        print("[+]Now it is scan the host %s" % tgtHost)
        setdefaulttimeout(1)
        for tgtPort in tgtPorts:
            print "[+]Scaning port %s" % tgtPort
            t = Thread(target=connScan, args=(tgtHost,int(tgtPort)))
            t.start()

    except:
        print("Something is wrong!")

def main():
    parser = optparse.OptionParser("usage%prog" + "-H <target host> -p <target port>")
    parser.add_option('-H', dest = 'tgtHost', type = 'string',\
                      help = 'specify target host')
    parser.add_option('-p', dest = 'tgtPorts', type = 'string',\
                      help = 'specify target port[s] separated by comma')
    (options ,args) = parser.parse_args()
    tgtHost = options.tgtHost
    tgtPorts = str(options.tgtPorts).split(',')

    if (tgtHost == None) | (tgtPorts[0] == None):
        print("[-]You must specify the Host or the Ports")
        exit(0)
    else:
        portScan(tgtHost, tgtPorts)



if __name__ == '__main__':
    main()

一、optparse库是一个通过解析命令行参数实现用户交互的东西,就和我们用的nmap后面加-sV之类的。先调用optparse.OptionParser()生成一个参数解析器实例,然后用add_option方法解析具体的命令参数。
parser = optparse.OptionParser(“usage%prog” + "-H -p ") parser.add_option(’-H’, dest = ‘tgtHost’, type = ‘string’,
help = ‘specify target host’)
parser.add_option(’-p’, dest = ‘tgtPorts’, type = ‘string’,
help = ‘specify target port[s] separated by comma’)
这里就是定义了个parser实例,然后加入-H和-p的解析,也就是-H后面跟目标IP,-p后面跟端口,接着(options, args)= parser.parse_args() 就可以使用参数了,最后使用起来就是python scan.py -H 192.168.2.1 -p 21, 22, 80。

二、socket编程,这个在这里的运用也很简单,定义了两个函数,connScan和portScan。connScan实现的是探测端口的服务,简单的就是连接上这个端口然后发送一段消息,看他返回什么。举个最常见的例子就是FTP服务软件开启,首先连接上200-299状态码,然后加上版本号或欢迎信息,不信可以开wireshark试试,这样我们在扫描到主机有存活后一次扫描端口看看端口有没有开,开了什么服务。这个portScan函数就是这样弄的,我就没和书里一样用扫描gethostbyname()和gethostbyaddr(),我到现在都没想明白这是搞什么搞来搞去,好像没什么意义。

三、多线程,线程我一直觉得很高大上,用hydra跑16线程啊之类的,这里也就加锁开锁,主要是使用才connScan里面,避免输出混乱。每个端口扫描当接收到信息的时候上锁,输出结果,然后开锁断开连接。

大致第一个小脚本就是这么回事吧,和nmap这样的神奇比起来有很大差距,但万丈高楼从地起,也不能说一下就能弄出个0Day,自己水平也都谈不上有限,是比较low,希望自己能对少玩游戏多学习,也希望有大神能带带我。。。

第一次就到这吧,目前我已经学到了无线攻击那里,17年低我买了个USB网卡,在kali-VMware里面用的挺好,不知道为什么今天就不行了,在虚拟机里面能看到网卡(右下角有设备),lsusb里面也有,但就是用不了,搞了一天都没装好,看不到wlan 0,很挫败。。。。难受。。。。晚安。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值