Python渗透测试编程技术

Python渗透测试编程技术,第1张

概述三、身份认证攻击1.目前最为常见的身份验证模式采用的仍然是“用户名+密码”的方式,用户自行设定密码,在登录时如果输入正确的密码,计算机就会认为 *** 作者是合法用户。  但是这种认证方式的缺陷也很明显,如何保证密码不被泄露以及不被破解已经成为网络安全的最大问题之一

三、身份认证攻击

  1.目前最为常见的身份验证模式采用的仍然是“用户名+密码”的方式,用户自行设定密码,在登录时如果输入正确的密码,计算机就会认为 *** 作者是合法用户。

     但是这种认证方式的缺陷也很明显,如何保证密码不被泄露以及不被破解已经成为网络安全的最大问题之一。密码破解是指利用各种手段获得网络、系统或资源密码的过程。

  2.简单网络服务认证的攻击

    网络上很多常见的应用都采用了密码认证的模式,例如FTP、Telnet、SSH等,这些应用被广泛地应用在各种网络设备上,如果这些认证模式出现了问题,那就意味着网络中的大量设备将会沦陷。遗憾的是,目前确实有很多网络的设备因为密码设置不够强壮已经遭到入侵。

   四分之三原则:数字 大写字母 小写字母 特殊的字符 不要少于8位更换密码的频次不要小于3个月

   针对这些简单的网络服务认证,可以采用一种“暴力破解”的方法。这种方法的思路很简单,就是把所有可能的密码都尝试一遍,通常可以将这些密码保存为一个字典文件。

  3.三种思路

   (1)纯字典攻击。这种思路最为简单,攻击者只需要利用攻击工具将用户名和字典文件中的密码组合起来,一个个地进行尝试即可。 破解成功的概率与选用的字典有很大的关系,因为目标用户通常不会选用毫无意义的字符组合作为密码,所以对目标用户有一定的了解可以帮助更好地选择字典。 大多数字典文件都是以英文单词为主,这些字典文件更适用于破解以英语为第一语言用户的密码,对于破解母语非英语的用户设置的密码效果并不好。

   (2)混合攻击。现在的各种应用对密码的强壮度都有了限制,例如,在注册一些应用的时候,通常都不允许使用“123456”或者“aaaaaaa”这种单纯的数字和字母的组合,因此很多人会采用密码方式 例如,使用某人的名字字符+数字的加上生日就是一种很常见的密码(很多人都以自己孩子的英文名字加出生日期作为密码),如果仅使用一些常见的英文单词作为字典的内容,显然具有一定的局限性。而混合攻击则是依靠一定的算法对字典文件中的单词进行处理之后再使用。一个最简单的算法就是在这些单词前面或者后面添加一些常见的数字,例如一个单词“test”,经过算法处理之后就会变成“test1”“test2”…“test1981”“test19840123”等。

   (3)完全暴力攻击。这是一种最为粗暴的攻击方式,实际上这种方式并不需要字典,而是由攻击工具将所有的密码穷举出来,这种攻击方式通常需要很长的时间,也是最为不可行的一种方式。但是在一些早期的系统中,都采用了6位长度的纯数字密码,这种方法则是非常有效的。

   4.破解密码字典

    4.1常见的字典文件一般是txt或者dic格式:一个常见的破解字典文件。

     

   4.2在Kali linux 系统中词典文件的来源一共有以下三个。

     (1)使用字典生成工具来制造自己需要的字典,当需要字典文件,手头又没有合适的字典文件时,就可以考虑使用工具来生成所需要的字典文件。

    (2)使用Kali linux中自带的字典,Kali linux中将所有的字典都保存在/usr/share/wordLists/目录下

    (3)从互联网上下载热门的字典:可以访问https://wiki.skullsecurity.org/Passwords查看最新的字典文件

  5.生成字典需要至少指定两项

   (1)字典中包含词汇(也就是密码)的长度。

   (2)字典中包含词汇所使用的字符。要生成密码包含的字符集(小写字符、大写字符、数字、符号),这个选项是可选的,如果不写这个选项,将使用默认字符集(默认为小写字符)。

  6.使用Python来编写一个生成字典的程序, 在这个程序中需要使用到一个新的模块:itertools,这是一个强大的内置模块。

   6.1itertools,在这个模块中提供了很多函数,其中最为基础的是三个无穷循环器

   (1)count()函数:这个函数的作用是产生递增的序列,例如count(1,5),生成从1开始的循环器,每次增加5,即1,6,11,16,21,26,…

   (2)cycle()函数:这个函数的作用是重复序列中的元素,例如cycle('hello'),将序列中的元素重复,即h,e,l,l,o,h,e,l,l,o,h,…

   (3)repeat()函数:这个函数的作用是重复元素,构成无穷循环器,例如Repeat(100),即100,100,100,100,…。

   6.2除了这些基本的函数之外,还有一些用来实现循环器的组合 *** 作的函数,这些函数适用于生成字典文件。

    product()函数:它可以用来获得多个循环器的笛卡儿积,例如product('xyz', [0, 1]),得到的结果就是x0,y0,z0,x1,y1,z1。

    permutations('abcd', 2) #:从'abcd'中挑选两个元素,例如ab,bc,…,并将所有结果排序,返回为新的循环器。这些元素中的组合是有顺序的,同时生成cd和dc。

    combinations('abc', 2) #:从'abcd'中挑选两个元素,例如ab,bc,…,将所有结果排序,返回为新的循环器,这些元素中的组合是没有顺序的,例如c和d只能生成cd。

   7.一个简单的字典文件生成过程

    第一步:导入itertools库。>>>import itertools 

    第二步:指定生成字典的字符,这里使用所有的英文字符和数字(但是没有考虑大小写和特殊字符)。    

        >>>words = "1234568790abcdefghijklmnopqrstuvwxyz"

    第三步:使用itertools中提供的循环器来生成字典文件

        这里可以根据不同的需求来选择,在这里选择permutations,既考虑选项,又考虑顺序。这里考虑到程序运行的速度,仅出于演示的目的,所以选择了生成两位的密码。在真实情景中往往需要生成6位以上的密码,但这需要很长的时间。

         >>>temp =itertools.permutations(words,2)

    第四步:打开一个用于保存结果的记事本文件。>>>passwords = open("dic.txt","a")

       第五步:使用一个循环将生成的密码写入到一个记事本文件中。

         >>>for i in temp:

          passwords.write("".join(i))

          passwords.write("".join("\n"))

  8.除了自己生成字典之外,建议到互联网上下载一些优秀的字典文件。https://wiki.skullsecurity.org/Passwords中提供了一些相当有效的字典

     

          Lists the top 500 worst passwords of all time

    9.FTP暴力破解模块

   FTP是file Transfer Protocol(文件传输协议)的简称,中文简称为“文传协议”,用于在Internet上控制文件的双向传输。 同时,它也是一个应用程序(Application)。使用FTP时必须首先登录,在远程主机上获得相应的权限以后,方可下载或上传文件。也就是说,要想同哪一台计算机传送文件,就必须具有哪一台计算机的适当授权。换言之,除非有用户ID和口令,否则便无法传送文件。

   不过现在大部分FTP都提供了匿名登录的机制,这种FTP可以使用用户名“anonymous”和任意的密码来登录。考虑的主要是如何去对那些设置了用户名和密码限制的FTP进行破解。

   9.1FTP的工作流程

    (1)客户端去连接目标FTP服务器的21号端口,建立命令通道。服务器会向客户端发送“220 Free float Ftp Server(Version 1.00)”回应,括号内的信息会因为服务器不同而有不同的显示。

    (2)客户端向服务器发送“USER用户名\r\n”,服务器会返回“331 Please specify the password .\r\n”。

    (3)客户端向服务器发送“PASS密码\r\n”,如果密码认证成功服务器会返回“230 User Logged in.\r\n”,如果密码认证错误服务器会返回“200 Switching to Binary mode.\r\n”。

    9.2Python中默认就提供了一个专门用来对FTP进行 *** 作的ftplib模块,这个模块很精简,里面提供了一些用来实现登录、上传和下载的函数。

      (1)ftp.connect("IP", "port") #连接的FTP Server和端口。

      (2)ftp.login("user", "password") #连接的用户名,密码。

      (3)ftp.retrlines(command[, callback]) #使用文本传输模式返回在服务器上执行命令的结果。

   9.3下面使用ftplib函数按照登录流程进行 *** 作。

      (1) 首先,导入需要使用的ftplib库文件。

         >>> import ftplib   

      (2)其次,使用ftplib创建一个FTP对象。

      >>> ftp=ftplib.FTP("192.168.169.133")

      (3)调用这个对象中的connect()函数去连接目标的21号端口。

       >>> ftp.connect("192.168.169.133",21,timeout=10)

  10对FTP服务进行暴力破解的程序。

    

 四、拒绝服务攻击

  1. 拒绝服务攻击即是攻击者想办法让目标机器停止提供服务,是黑客常用的攻击手段之一。

  2. 其实对网络带宽进行的消耗性攻击只是拒绝服务攻击的一小部分,只要能够对目标造成麻烦,使某些服务被暂停甚至主机死机,都属于拒绝服务攻击。

     3. 拒绝服务攻击问题也一直得不到合理的解决,究其原因是因为网络协议本身的安全缺陷,从而拒绝服务攻击也成为攻击者的终极手法。

  4. 拒绝服务攻击并不是一个攻击方式,而是一类具有相似特征的攻击方式的集合。

       黑客可能会利用TCP/IP协议层中数据链路层、网络层、传输层和应用层各种协议漏洞发起拒绝服务攻击。

  5.数据链路层的拒绝服务攻击

   5.1 它的攻击目标是二层交换机。 这种攻击方式的目的并不是要二层交换机停止工作,而是要二层交换机以一种不正常的方式工作。

   5.2 什么是交换机不正常的工作方式呢? 让交换机成为 “集线器” 。根据交换机的特性:当CAM表被填满时,收到未知单播帧,会将这个帧进行广播处理。这时受到攻击的交换机实际上已经退化成了集线器了。这时黑客只需要在自己的计算机上将网卡设置为混杂模式,就可以监听整个网络的通信了。

      5.3 一个专门用来完成这种攻击的工具 –macof ,使用格式:

      Usage: macof[-s src][-d dst][-e tha][-x sport][-y dport][-i interface][-n times]

      在实际应用中,这里面的参数只有-i是会使用到的,这个参数用来指定发送这些伪造数据包的网卡。

   5.4 交换机在遭到攻击之后,内部的CAM表很快就被填满。 交换机退化成集线器,会将收到的数据包全部广播出去,从而无法正常向局域网提供转发功能,实现的过程很简单。

     1)启动macof这个工具

        root@kali:~# macof

     2)构造随机MAC和IP,scapy模块中的RandMAC()和RandIP()可以很方便地实现这一点,也可以生成固定网段IP,如 RandIP("192.168.1.*")。  

           all_rand.py                     

      

              运行结果    

        

@H_760_301@

         

      3)数据包中包含指定的源IP和MAC,那么交换机就会记录,例如ARP包。 

         Ether(src=RandMAC(),dst="FF:FF:FF:FF:FF:FF")/ARP(op=2,scr="0.0.0.0",hwdst="FF:FF:FF:FF:FF:FF")/padding(load="X"*18)

           或者ICMP包:
             Ether(src=RandMAC(),dst=RandMAC())/IP(src=RandIP(),dst=RandIP())/ICMP()
   6.网络层的拒绝服务攻击

   6.1 位于网络层的协议,包括ARP、IP和ICMP等,其中,ICMP主要用来在IP主机、路由器之间传递控制消息。平时检测网络连通情况时使用的Ping命令就是基于ICMP的。
     例如,希望查看本机发送的数据包是否可以到达192.168.26.100,就可以使用如图所示的Ping命令。
      

         可以看出,发送的数据包得到了应答数据包,这说明192.168.26.100收到了发出的数据包,并给出了应答。这个过程遵守了ICMP的规定:Ping就是IMCP请求(Type=8),收到的回应就是ICMP应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如,被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在。
       但是目标主机在处理这个请求和应答时是需要消耗cpu资源的,处理少量的ICMP请求并不会对cpu的运行速度产生影响,但是大量的ICMP请求呢?
    6.2  仍然使用Ping命令来尝试一下。这次将ICMP数据包设置的足够大,Ping命令发送的数据包大小可以使用 -l 来指定(这个值一般指定为65500),这样构造好的数据包被称作“死亡之Ping”,因为早期的系统无法处理这么大的ICMP数据包,在接收到这种数据包之后就会死机,现在的系统则不会出现这种问题,但是可以考虑使用这种方式向目标连续地发送这种“死亡之Ping”来消耗目标主机的资源
    

     现在的 *** 作系统和cpu完全有能力处理这个数量级的数据包。
     既然对方能够承受这个速度的数据包了,那么这里的拒绝服务攻击也就没有效果了,必须想办法提高发送到目标的数据包的数量。主要有两个办法,一是同时使用多台计算机发送ICMP数据包(),二是提高发送的ICMP数据包的速度。
     另外,除了像上面这种使用本机地址不断地向目标发送ICMP包的方法之外,还有两种方法,一是使用随机地址不断向目标发送ICMP包,二是向不同的地址不断发送以受害者的IP地址为源IP地址的数据包。这种攻击模式里,最终淹没目标的洪水不是由攻击者发出的,也不是伪造IP发出的,而是正常通信的服务器发出的。

     使用WireShark来捕获发出的数据包,可以看到快速地以1.1.1.1向各个地址发送ICMP请求,这个地址在收到了请求之后,很快就会向1.1.1.1发回应答。这就是第三种攻击方式
      

   7.传输层的拒绝服务攻击

    7.1 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
    7.2 TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的SYN执行ACK确认。这种建立连接的方法可以防止产生错误的连接。
    7.3 TCP三次握手的过程如下。
     (1)客户端向服务器端发送SYN(SEQ=x)数据包,并进入SYN_SEND状态。
     (2)服务器端在收到客户端发出的SYN报文之后,回应一个SYN(SEQ=y)ACK(ACK=x+1)数据包,并进入SYN_RECV状态。
     (3)客户端收到服务器端的SYN数据包,回应一个ACK(ACK=y+1)数据包,进入Established状态。
     三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。
             

       不同于针对ICMP和UDP的拒绝服务攻击方式,基于TCP的攻击方式是面向连接的。只需要和目标主机的端口建立大量的TCP连接,就可以让目标主机的连接表被填满,从而不会再接收任何新的连接。
   7.4 基于TCP的拒绝攻击方式有两种:
      一种是和目标端口完成三次握手,建立一个完整连接;
        另一种是只和目标端口完成三次握手中的前两次,建立的是一个不完整的连接
       攻击方会向目标端口发送大量设置了SYN标志位的TCP数据包,受攻击的服务器会根据这些数据包建立连接,并将连接的信息存储在 连接表 中,而攻击方不断地发送SYN数据包,很快就会将连接表填满,此时受攻击的服务器就无法接收新来的连接请求了。
      

       无须使用自身的IP地址作为源地址,只需要使用伪造的地址即可。产生随机地址的方法如下所示。
        

       攻击目标时使用TCP,端口为80,将标志位设置为syn。
        TCP(dport=80, flags="S")
  8.应用层的拒绝服务攻击

    8.1 位于应用层的协议比较多,常见的有http、FTP、DNS、DHCP等。这里面的每个协议都可能被利用来发起拒绝服务攻击
     8.2  DHCP为例,DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中地管理、分配IP地址,使网络环境中的主机动态地获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
    8.3 一次DHCP的过程如图
   

     8.4 DHCP攻击的目标也是服务器( DHCP ),怀有恶意的用户伪造大量DHCP请求报文发送到服务器,这样DHCP服务器地址池中的IP地址会很快就分配完毕,从而导致合法用户无法申请到IP地址。同时大量的DHCP请求也会导致服务器高负荷运行,从而导致设备瘫痪。
       首先编写一段程序来搜索网络中的DHCP服务器,只需要在网络中广播DHCP的discover数据包,源端口为68,目标端口为67.这个构造的过程涉及多个层次。
      

     8.5 用到两个工具:一个是Yersinia,这是一个十分强大的拒绝服务攻击工具,另一个是Metasploit。
       Yersinia进行DHCP攻击实验,这是一款图形化工具,在命令行中输入“yersinia -G”就可以以图形化界面的形式启动这款工具。     
      root@kali:~# yersinia -G
    8.6 基于DHCP的攻击中一共提供了4种发包形式,这4种模式的含义如下所示。
     (1)sending RAW packet:          发送原始数据包。
     (2)sending disCOVER packet:发送请求获取IP地址数据包,占用所有的IP,造成拒绝服务。
     (3)creating DHCP rogue server:创建虚假DHCP服务器,让用户连接,真正的DHCP无法工作。
     (4)sending RELEASE packet:发送释放IP请求到DHCP服务器,致使正在使用的IP全部失效。
        理论上,所有提供连接的协议都可能会受到拒绝服务的攻击,Metasploit中提供了很多用于各种协议的拒绝服务攻击模块,可以启动Metasploit,并在其中查询使用对应的模块.使用show opinions来查看这个模块的参数
        msf > use auxiliary/dos/tcp/synflood
     8.7 synflood这个模块需要的参数包括RHOST、RPORT、SNAPLEN和TIMEOUT,后面的三个参数都有默认值,所以需要设置的只有RHOST,这也正是要发起拒绝服务攻击服务器的IP地址。这个目标必须是对外提供http服务的服务器。
    8.8 如果事先获得了关于目标的足够信息,也可以利用目标主机上一些特定的服务进行拒绝服务攻击。
例如很多人都拥有两台以上的计算机.一台在单位,另外一台在家里,如果上班时间没有完成全部工作,回到家中可以远程连接到单位的计算机。但是这需要计算机提供远程控制的服务.
@R_404_5087@ *** 作系统中就提供了远程桌面协议,这是一个多通道的协议,用户可以利用这个协议(客户端或称“本地计算机”)连上提供微软终端机服务的计算机(服务器端或称“远程计算机”)。
      但是微软提供的这个服务被发现存在一个编号为MS12-020的漏洞,@R_404_5087@在处理某些RDP报文时Terminal Server存在错误,可被利用造成服务停止响应。默认情况下,任何@R_404_5087@ *** 作系统都未启用远程桌面协议(RDP)。没有启用RDP的系统不受威胁。
    8.9 还是在Metasploit中启动对应的模块:
       msf > use auxiliary/dos/@R_404_5087@/rdp/ms12_020_maxchannelIDs
         使用“show options”来查看这个模块所要使用的参数












    

    

      

 

 

 




     








    






   

 

 

 

 


 
 

        

      

 

总结

以上是内存溢出为你收集整理的Python渗透测试编程技术全部内容,希望文章能够帮你解决Python渗透测试编程技术所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1188109.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存