一、SOCKET
socket(family,type)
eg:s=socket.socket() 等于 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
bind():服务端SOCKET调用,将与对应端口和IP地址绑定。 s.bind(('127.0.0.1',2345))
listen():服务端开启监听,参数是最大连接数量。 s.listen(5)
accept():服务端接收客户端的连接,并返回(conn,address) conn是新的套接字对象,address是连接客户端地址。
connect():客户端连接到服务器端 s.connect(("192.168.0.1",2345))
send():客户端发送数据 s.send(string)
recv():用于客户端接收数据,参数是接收的最大字节数 s.recv(1024)
二、python-nmap
PortScanner:端口扫描
PortScannerAsync:异步进行端口扫描
PortScannerError:nmap的异常错误类
PortScannerHostDict:用于存储和访问主机扫描结果的特殊小类
PortScannerYield:通过生成器使用Python中的nmap
PortScanner类
1.scan( host , port , args ) 方法:以指定方式扫描指定主机或网段的指定端口
参数:
import nmap nm = nmap.PortScanner() nm.scan('192.168.10.10-100', '22,21','-sV') 也可以这样 nm.scan(hosts='192.168.1.0/24', arguments='-n -sP -PE -PA21,23,80,3389')
2.command_line() 方法:返回的扫描方法映射到具体的nmap命令行,也就是我们上面执行的nm.scan()命令,对应的具体的nmap的命令
a=nm.command_line() rint(a)###########################nmap -oX - -p 20,21 -sV 192.168.125.134
3.scaninfo() 方法:返回nmap扫描信息,格式为字典类型
a=nm.scaninfo() print(a) ########################### {'tcp': {'services': '20-21', 'method': 'syn'}}
4.all_hosts() 方法:返回nmap扫描的主机清单,格式为列表类型
5.查看扫描主机的详细信息: nm['192.168.125.134']
6.csv()方法:返回值是CSV(逗号分隔值文件格式)的输出。
print(nm.csv()) #用print打印看的更清楚
三.Scapy
Scapy是一个Python程序,使用户能够发送,嗅探和剖析并伪造网络数据包。此功能允许构建可以探测,扫描或攻击网络的工具。
内部实现了大量网络协议(DNS,ARP,IP,TCP,UDP等)。
(1).Scapy的基本操作
在Scapy环境中通过ls(Ether())查看Ether类的属性,ls(IP())
ip=IP(dst="192.168.1.101") #构造一个发往“192.168.1.101”的IP数据包 Ether(dst="ff:ff:ff:ff:ff:ff") #通过Ether协议构建一个广播数据包 Ether()/IP()/TCP() #SCAPY的分层通过"/"实现 按照协议由底而上的顺序从左向右排列 IP()/TCP()/"GET/HTTP/1.0\r\n\r\n" #构造一个HTTP数据包
(2).Scapy模块中的函数
send(IP(dst="192.168.1.101")/ICMP()) #发送发往“192.168.1.101”的ICMP数据包 sendp(Ether(dst="ff:ff:ff:ff:ff:ff")) #sendp工作在第二层,send工作在第三层 IP(dst='192.168.1.101')/fuzz(TCP()) #发送内容是随机填充的数据包
发送和接收函数 sr(),sr1()和srp()
sr(),sr1()在第三层,srp()在第二层
>>> sr(IP(dst='192.168.0.161')/ICMP()) Begin emission: Finished sending 1 packets. * Received 1 packets, got 1 answers, remaining 0 packets (
通过2个列表保存sr()的返回值,并使用ans.summary()查看2个数据包的内容。
>>> ans,unans=sr(IP(dst="192.168.0.161")/ICMP()) Begin emission: .Finished sending 1 packets. * Received 2 packets, got 1 answers, remaining 0 packets >>> ans.summary() IP / ICMP 192.168.0.160 > 192.168.0.161 echo-request 0 ==> IP / ICMP 192.168.0.161 > 192.168.0.160 echo-reply 0 / Padding
sr1()和sr()区别:sr1()只返回一个应答的包只需要一个列表就可以保存
可以利用sr1()函数来测试目标中的某个端口是否开放,采用半开扫描(SYN),可以看出目标回应了设置了SYN标志位的TCP数据包,表面这个80端口是开放的。
>>> p=sr1(IP(dst="192.168.0.161")/TCP(dport=80,flags="S")) Begin emission: .Finished sending 1 packets. * Received 2 packets, got 1 answers, remaining 0 packets >>> p
sniff():可以在自己的程序中捕获经过本机网卡的数据包
sniff(filter=" host 192.168.1.102 and icmp")
四、主机状态扫描
1.基于ARP的活跃主机发现技术
ARP是“地址解析协议”。通过互联网通信中的IP地址来获得以太网通信时使用的硬件地址(MAC地址)。在只知道IP地址不知道MAC地址时,向网络上的每台主机广播发送ARP请求,其余主机收到请求后会用自己的IP地址和包中头部的目标主机的IP地址比较,如果匹配,就做出回应。
以此则可知道目标主机是否在线。
2.基于ICMP的活跃主机发现技术
ICMP(互联网控制报文)也位于TCP/IP协议族中的网络层,是用于发现和处理互联网中的错误。ICMP中的报文分为:差错报文和查询报文。查询报文都是由一个请求和一个应答组成。
通过发送ICMP Request,如果有回应,则目标主机在线
3.基于TCP的活跃主机发现技术
TCP(传输控制协议)使用三次握手建立连接,发送请求后,如果主机有回应则是活跃主机
4.基于UDP的活跃主机发现技术
UDP是用户数据报协议,向目标发送UDP数据包后,目标主机活跃且端口关闭的时候会返回ICMP数据包“unreachable”。
5.端口扫描
(1)TCP全开扫描:向目标主机端口发送SYN请求,如果目标主机返回SYN+ACK回应,则说明目标端口开放,最会发送ACK建立TCP连接。
(2)TCP半开扫描:TCP连接可能被目标主机的日志记录下来,而且三次握手中的最后一次是没有用的,在目标返回SYN+ACK后发送RST中断这个连接,这样并没有建立好TCP连接。
五、软件溢出漏洞
1.溢出漏洞
kali中生成字符,并判断字符位置
cd /usr/share/metasploit-framework/tools/exploit ./pattern_create.rb -l 500 ./pattern_offset.rb -q 37684136 -l 500
在Immunity Debugger中 使用Mona.py插件 下载后复制到Immunity Debugger安装目录下的PyCommands文件夹中
在命令行中输入!mona 使用这个插件
执行!mona jmp -r esp 来查找JMP ESP命令
2.SEH溢出
程序在异常时会执行异常处理程序,每一条SEH记录都由8个字节组成,前4个字节是它后面的SEH异常处理程序的地址,后四个字节是catch块的地址。
调用catch块的内存地址保存在栈中,使用一条POP/POP/RET指令来改写异常处理程序地址,让程序执行下一条SEH记录,把下一条SEH改成自己想要的shellcode。
六、 身份认证攻击
1.生成长度为2的密码
import itertools words = "1234567890abcdefghijklmnopqrstuvwxyz" temp = itertools.permutations(words,2) passwords = open("dic.txt","a") for i in temp: passwords.write("".join(i)) passwords.write("".join("\n")) passwords.close()
2.FTP暴力破解模块
ftplib模块
import ftplib ftp=ftplib.FTP("192.168.0.1") ftp.connect("192.168.0.1",21,timeout=10) ftp.login("admin","test") ftp.retrlines('LIST') #使用FTP中的LIST命令,来展示FTP服务器中的文件 ftp.quit() #断开与FTP的连接
3.SSH暴力破解模块
pxssh模块
connect(host,user,password):建立到目标机器的ssh连接 send_command(s,cmd):发送命令 logout():释放该连接 prompt():等待提示符,通常用于等待命令执行结束
4.Web暴力破解模块
requests模块和urllib模块
import requests r = requests.get('http://192.168.0.1') payload={"frmLogin":"true","frmUserName":"root","frmUserPass":"123","Login":"Login!"} resp=requests.post("http://192.168.0.1/login.asp",payload)
通过数据包的返回状态,判断是否登录完成。
通过resp.url查看当前页面,可以判断有没有跳转,即有没有登录成功。
七. 远程控制工具
subprocess模块
1.subprocess.call()函数,执行命令,返回0表示成功,非0表示失败
import subprocess child=subprocess.call("notepad.exe")
2.subprocess.check_call()函数,也是执行命令,如果返回值非0会抛出异常
3.subprocess.check_output()函数,会返回子进程向标准输出的结果
4.subprocess.Popen()函数,上面三个都是基于Popen()函数的封装。
八. Web渗透测试
1.常见的状态代码
2.urllib2模块的使用
import urllib2 response=urllib2.urlopen("http://www.baidu.com") #打开一个链接地址 response.read() #读取网页的全部HTML代码 print response.info() #获取服务器发送的headers信息
getcode():返回HTTP状态码。
geturl():获取真实打开的地址。
3.httplib2模块
4.requests模块
5.BeautifulSoup模块
6.cookielib模块
九.网络嗅探与欺骗
1.ARP欺骗的原理
arpspoof [-i 网卡] [-t 欺骗的主机] [-r] 要伪装的主机
arpspoof -i eth0 -t 192.168.0.1 192.168.0.10
echo 1|>> /proc/sys/net/ipv4/ip_forward 将截获的数据包转发出去
#一个ARP欺骗程序 import sys from scapy.all import sendp,ARP,Ether if len(sys.argv)!=3: print sys.argv[0] + ":