如何进行POC的快速编写&现有POC叠改&批量扫描[下]
2023-1-8 22:15:49 Author: 猫哥的秋刀鱼回忆录(查看原文) 阅读量:31 收藏

免责声明

请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,猫哥的秋刀鱼回忆录及文章作者不为此承担任何责任。由于种种原因,猫哥的秋刀鱼回忆录公众号往后均不发表原创文章,欲转载随附出处即可且无需告会,文章质量且面向受众均偏向小白。

本文前言

这篇文章我们重点分享几个点就可以了,复习复习Python原始语言下库的调用,然后在复习下模板,梳理一下关于通过外部调用来实现套壳方式的其他POC调动,然后给大家介绍下主流的 POC 开发框架,感谢师傅们对第一篇文章的指导意见,第一篇文章更多贴近于原始语言下编写POC&EXP的思路,现如今的多极化使得传统意义上的POC&EXP发生了演变,从过去单一的脚本调用变成如今多元多进程调动,强调效率和统一的规范性,举个例子:Yakit,Goby,xray,Lodan等知名工具均存在自己独有的POC格式与基调,衍生在这一点上算是体现的淋漓尽致。比如Goby曾今大部分使用 json格式去编写,后来开放了Golang,就补充了json拓展性的不足之处。现在有很多大公司,都是基于 Pocsuite (知道创宇404实验室打造的一款开源的远程漏洞测试框架)这个模板的壳来改的,这个算是安全圈中漏洞扫描框架中数一数二的存在。如果更贴近项目需求的话,其实还是以框架开发为主,个人需求就可以拿单体脚本去使用检测。衡量每种事物的价值都体会在取向和需求上,亲力而为吧。

外部套壳快速调用

接上文,我们说到最优的方法就是用框架集成POC,然后POC统一输入输出。这里不想改别人的代码,怕出BUG,采用外部调用的方法是比较稳妥的,创建一个demo.py的文件

还是从头看起说说逻辑思路,关于模块:进程的创建与管理用到一个内置的subprocess,这里自定义了一个函数poc,把要执行的命令写到变量cmd里面去,然后通过Popen去查看用户输入的命令行是否存在,如果存在,把内容写入到stdout管道中,如果不存在,把信息写入到stderr管道。然后把输出信息解码回显就可以了。总之这的目的就是调用外部的脚本方法,去把结果打印出来。

这里是定义一个打开一个本地文件的函数,没什么好说的。

这里定义了一个main函数,用来调度线程与运行,就是咋们的threadpool模块,实现线程池采用多线程扫描,我们读到url.txt就是存放测试地址的文本后,用多线程去运行命令python3 Kyanrce.py -u [url.txt的内容],然后通过管道,打印出来结果即可。重点说一下线程池的使用。

示例代码:

pool = ThreadPool(线程数目)
requests = threadpool.makeRequests(some_callable,list_of_args,callback)
[pool.putRequest(req) for req in requests]
pool.wait()
  1. 第一行创建一个可存放X个数目的线程的线程池。
  2. 第二行调用makeRequests创建请求。some_callable是需要开启多线程处理的函数,list_of_args是函数参数,callback是可选参数回调,默认是无。
  3. 第三行是把运行多线程的函数放入线程池中。
  4. 最后一行是等待所有的线程完成工作后退出。

我们按照标准写就可以了,把读的速度和调用的速度提上去就行。然后基本就是这些,有人就会问,这样做好处在哪,我举个例子,比如有一个脚本是用来检查URL是否存在SQL注入的,她的原始单体检测得按照排队一样来,一个一个来,使用了进程管理和线程池,我们就可以相当于开放了十个队伍,是不是能让后面的人加快速度。那你肯定会问。既然可以增加排队队伍,为什么要不在每一个单体检测脚本上做手脚?呵呵,你想POC数量庞大,有你写的,我写的,就像是许多病人与一个城市许多诊所医院的关系,是不是很难管理?所以我们设定定点医院,在定点医院上做手脚来加快检测速度,是不是能做到不耽误病人又能集中高效?就是这个道理。

测试结果对比

单体脚本检测url.txt文本存在漏洞速度 python3 Kyanrce.py -f url.txt

用时:6分30秒左右

外部套壳调用(10线程)测试检测url.txt文本存在漏洞速度  python3 demo.py

用时:3分13秒左右

比对结果在10线程的情况下均提升过半,如果线程数提高,相信所用时间更多,可能就是CPU功耗多一点而已。相信看到这你已经初等具备独立开发原始语言+POC的能力。

健全的POC需要注意的点

忽略证书的安全性

直接忽略证书进行https访问(无警告信息)并且如果不想有警告信息,可导入urllib3调用下面方法,即可不显示警告信息。

import requests

requests.packages.urllib3.disable_warnings()

response = requests.get('https://example.com', verify=False)

这样,你就可以在 Python 中忽略 HTTPS 证书验证,并且不会看到任何警告信息。不过,这种做法是不安全的,因为它忽略了证书验证过程,这意味着你的程序可能会被中间人攻击。所以,在生产环境中使用时需要谨慎。

随机UA头的应用

在上文中,我们的header是自己设定的,这不是很好的习惯。

我们可以调整为随机获取user-agent,推荐安装包fake-useragent,然后调用即可

from fake_useragent import UserAgent
import random
ua = UserAgent()
headers = {'User-Agent':ua.random}
print(headers)
协议头的补全

如果我们从FOFA等收集到的资产美没有相关得到协议头信息,我们可以尝试做一个判断为他不全,当然如下是openAI写的,看个逻辑就行

def has_protocol(url):
# 定义协议头的列表
protocols = ["http://", "https://"]
# 遍历列表,如果 url 以任意一个协议头开头,则返回 True
for protocol in protocols:
if url.startswith(protocol):
return True
# 如果没有协议头,则返回 False
return False

# 测试代码
test_cases = {
"testCase1": ["http://www.example.com", True],
"testCase2": ["https://www.example.com", True],
"testCase3": ["ftp://www.example.com", False],
"testCase4": ["www.example.com", False],
}

for key in test_cases:
output = has_protocol(test_cases[key][0])
if output == test_cases[key][1]:
print(key + " is Passed")
else:
print(key + " is Failed")

这段代码定义了一个函数 has_protocol,它接受一个参数 url,然后判断这个 url 是否以 http://https:// 开头。如果是,返回 True,否则返回 False。接下来我们还定义了一个测试用例字典 test_cases,并使用一个循环来遍历这个字典,对于每个测试用例,我们都调用函数 has_protocol,并检查它的输出是否与期望结果相符。如果相符,就输出测试用例通过,否则输出测试用例失败。

设置超时

防止服务端建立了链接却不响应拖死我们的请求很简单,请求的时候添加timeout参数即可,比如

流畅的逻辑是关键

推荐文章:https://mp.weixin.qq.com/s/kBzOyDQDwUCE-ILkUn4i8A

Pocsuite3框架

Pocsuite3 是由知道创宇404实验室打造的一款开源的远程漏洞测试框架。它是知道创宇安全研究团队发展的基石,是团队发展至今一直维护的一个项目,保障了我们的 Web 安全研究能力的领先。你可以直接使用 Pocsuite 进行漏洞的验证与利用;你也可以基于 Pocsuite 进行 PoC/Exp 的开发,因为它也是一个 PoC 开发框架;同时,你还可以在你的漏洞测试工具里直接集成 Pocsuite,它也提供标准的调用类。

Pocsuite3 是完全由 Python3 编写,支持 Windows/Linux/Mac OSX 等系统,在原 Pocsuite 的基础上进行了整体的重写与升级,使整个框架更具有操作性和灵活性。

  1. 官方地址:pocsuite.org
  2. 项目地址:github.com/knownsec/pocsuite3
  3. 编写手册:https://github.com/knownsec/pocsuite3/blob/master/docs/CODING.md#%E5%8F%AF%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8F%82%E6%95%B0%E7%9A%84%E6%8F%92%E4%BB%B6%3Cdiv-id=%22plugin_div%22%3E%3C/div%3E

安装Pocsuite3

 pip3 install pocsuite3

然后输入pocsuite即可使用

可以在官网查阅如何使用:https://pocsuite.org,本文不做细说

我会在下篇文章中借助一个的靶场案例来简单叙述如何使用 Pocsuite3 框架进行 POC/EXP 的编写。

总结和后言

我知道浪浪山的那边还是山,可是我还是想去看看。妈妈告诉我:从浪浪山出去,也别忘记用葫芦喝水。浪浪山没有妖怪了。我也没有山头了,不过还好,妈妈和弟弟妹妹们还在。我回家告诉了妈妈发生的一切.大王死了,所有妖怪都死了.大圣饶了我,还留给我三根毫毛。外面很危险,但我还想去浪浪山外面看看.我把葫芦打满了水,我又给妈妈和弟弟妹妹买了包子。这次,我专门留了两个给妈妈单独吃.我跟妈妈道别,让她不要担心,我把大圣给的救命毫毛留了两根给妈妈,我拿着一根出发了,我往西边走,因为我知道孙大圣他们去西天取经了,我想去找孙大圣。想来孙大圣走过的路,会比较安全吧。但我还是遇到危险了,用掉了仅有的那根毫毛。我走了很久,还是没追上孙大圣,后来,据说大圣成佛了,我不敢去灵山,使回家了。妈妈又老了,她身体很差,原来我走后她被路过的妖怪打伤了。妈妈走了,走之前她颤颤巍巍的伸出手,里面是我留下的两根救命毫毛,她要我走出浪浪山。安葬好妈妈,我又出发了,我不知道要去哪里,我只想着往前走,想离浪浪山再远一点。我走了很久很久,两根救命毫毛都用完了,但我还是只看见山。怎么浪浪山外还是山啊。

祝各位人生处处书简湖,所遇皆为马兰花🎇


文章来源: http://mp.weixin.qq.com/s?__biz=Mzk0NjMyNDcxMg==&mid=2247498306&idx=1&sn=0f34fa6a3dd0ddc911d923a8112ec6c6&chksm=c3056fc5f472e6d3a79575f9c61b7bb8b3354df34c8cea5111d3f764bca4b88167fb4e3eb43f#rd
如有侵权请联系:admin#unsafe.sh