接下来 , 我们要配置的就是Web应用的运行环境 , 即通过pip或者easy_install来安装web.py 。它可以作为一**立的服务器运行 , 或者你也可以将它加载至包含mod_wsgi模块的Apache服务器中 。
相关操作指令如下所示: git clone /sethsec/PyCodeInjection.gitcd VulnApp ./install_requirements.sh python PyCodeInjectionApp.py 漏洞分析 当你在网上搜索关于python的eval()函数时 , 几乎没有文章会提醒你这个函数是非常不安全的 , 而eval()函数就是导致这个Python代码注入漏洞的罪魁祸首 。如果你遇到了下面这两种情况 , 说明你的Web应用中存在这个漏洞: 1. Web应用接受用户输入(例如GET/POST参数 , cookie值);2. Web应用使用了一种不安全的方法来将用户的输入数据传递给eval()函数(没有经过安全审查 , 或者缺少安全保护机制);下图所示的是一份包含漏洞的示例代码: \ 大家可以看到 , eval()函数是上述代码中唯一一个存在问题的地方 。
除此之外 , 如果开发人员直接对用户的输入数据(序列化数据)进行拆封的话 , 那么Web应用中也将会出现这个漏洞 。不过需要注意的是 , 除了eval()函数之外 , Python的exec()函数也有可能让你的Web应用中出现这个漏洞 。
而且据我所示 , 现在很多开发人员都会在Web应用中不规范地使用exec 。
2.如何用Scapy写一个端口扫描器常见的端口扫描类型有:1. TCP 连接扫描2. TCP SYN 扫描(也称为半开放扫描或stealth扫描)3. TCP 圣诞树(Xmas Tree)扫描4. TCP FIN 扫描5. TCP 空扫描(Null)6. TCP ACK 扫描7. TCP 窗口扫描8. UDP 扫描下面先讲解每种扫描的原理 , 随后提供具体实现代码 。
TCP 连接扫描客户端与服务器建立 TCP 连接要进行一次三次握手 , 如果进行了一次成功的三次握手 , 则说明端口开放 。客户端想要连接服务器80端口时 , 会先发送一个带有 SYN 标识和端口号的 TCP 数据包给服务器(本例中为80端口) 。
如果端口是开放的 , 则服务器会接受这个连接并返回一个带有 SYN 和 ACK 标识的数据包给客户端 。随后客户端会返回带有 ACK 和 RST 标识的数据包 , 此时客户端与服务器建立了连接 。
如果完成一次三次握手 , 那么服务器上对应的端口肯定就是开放的 。当客户端发送一个带有 SYN 标识和端口号的 TCP 数据包给服务器后 , 如果服务器端返回一个带 RST 标识的数据包 , 则说明端口处于关闭状态 。
代码:#! /usr/bin/pythonimport logginglogging.getLogger("scapy.runtime").setLevel(logging.ERROR)from scapy.all import *dst_ip = "10.0.0.1"src_port = RandShort()dst_port=80tcp_connect_scan_resp = sr1(IP(dst=dst_ip)/TCP(sport=src_port,dport=dst_port,flags="S"),timeout=10)if(str(type(tcp_connect_scan_resp))==""): print "Closed"elif(tcp_connect_scan_resp.haslayer(TCP)): if(tcp_connect_scan_resp.getlayer(TCP).flags == 0x12): send_rst = sr(IP(dst=dst_ip)/TCP(sport=src_port,dport=dst_port,flags="AR"),timeout=10) print "Open"elif (tcp_connect_scan_resp.getlayer(TCP).flags == 0x14): print "Closed"TCP SYN 扫描这个技术同 TCP 连接扫描非常相似 。同样是客户端向服务器发送一个带有 SYN 标识和端口号的数据包 , 如果目标端口开发 , 则会返回带有 SYN 和 ACK 标识的 TCP 数据包 。
但是 , 这时客户端不会返回 RST+ACK 而是返回一个只带有 RST 标识的数据包 。这种技术主要用于躲避防火墙的检测 。
如果目标端口处于关闭状态 , 那么同之前一样 , 服务器会返回一个 RST 数据包 。代码:#! /usr/bin/pythonimport logginglogging.getLogger("scapy.runtime").setLevel(logging.ERROR)from scapy.all import *dst_ip = "10.0.0.1"src_port = RandShort()dst_port=80stealth_scan_resp = sr1(IP(dst=dst_ip)/TCP(sport=src_port,dport=dst_port,flags="S"),timeout=10)if(str(type(stealth_scan_resp))==""): print "Filtered"elif(stealth_scan_resp.haslayer(TCP)): if(stealth_scan_resp.getlayer(TCP).flags == 0x12): send_rst = sr(IP(dst=dst_ip)/TCP(sport=src_port,dport=dst_port,flags="R"),timeout=10) print "Open" elif (stealth_scan_resp.getlayer(TCP).flags == 0x14): print "Closed"elif(stealth_scan_resp.haslayer(ICMP)): if(int(stealth_scan_resp.getlayer(ICMP).type)==3 and int(stealth_scan_resp.getlayer(ICMP).code) in [1,2,3,9,10,13]): print "Filtered"TCP 圣诞树(Xmas Tree)扫描在圣诞树扫描中 , 客户端会向服务器发送带有 PSH,FIN,URG 标识和端口号的数据包给服务器 。
- 油菜花是什么意思 油菜花是什么意思网络用语
- 电脑没声音怎么弄 电脑没声音怎么办win7
- cf怎么截图 CF游戏中怎么截图
- qq空间访问权限 手机怎么设置qq空间访问权限
- 鱼肉馅饺子怎么做 鱼肉馅饺子做法视频
- 怎么开葡萄酒 怎么开葡萄酒木塞小妙招
- 洗龙沟是什么意思 洗龙沟是什么意思衣机里面太脏了怎么办
- wow使命召唤怎么做 使命召唤怎么弄
- 文件隐藏了怎么恢复 windows文件隐藏了怎么恢复
- 英雄联盟查战斗力 英雄联盟怎么查战斗力