Python大法之告别脚本小子系列—信息资产收集类脚本编写(下)
作者:阿甫哥哥
原文来自:https://bbs.ichunqiu.com/article-1618-1.html
系列文章专辑:
Python大法之告别脚本小子系列
目录:
0×05 高精度字典生成脚本编写
0×06 Queue模块的讲解
0×07 目录扫描脚本编写
0×08 C段扫描脚本编写
0×05 高精度字典生成脚本编写
思路来自i春秋讲师ADO的课程,传送门:
有人可能会问生成字典有什么卵用??
如果你在爆破中用一个G大小的字典,可能也不会获得到什么信息,但是,如果你通过已知的部分信息生成字典进行爆破,这样你的成功率会大大的提高,本文用到的模块也是exrex,思路也五五开。。。
官方介绍:https://github.com/asciimoo/exrex
安装方法:pip install exrex
建立一个密码字典(无非就是已知的信息)

我只是简单的举了个栗子,也用了一个简单的匹配方式
#-*- coding: UTF-8 -*-
import exrex def dic_create(hosts):
web_dics = hosts.split('.')
for web_dic in web_dics:
f_pass = open('pass.txt',"r")
for dic_pass in f_pass:
dics = list(exrex.generate(web_dic+'[!@#]'+dic_pass))
for dic in dics:
print dic.strip('\n') if __name__ == '__main__':
dic_create('www.ichunqiu.com')
这样就简单的造了一个字典生成器
问题又来了,他把我域名中的http://,www,com都生成了,其实并没有什么卵用。。。所以,就要去掉他
#-*- coding: UTF-8 -*-
import exrex def dic_create(hosts):
web_dics = hosts.split('.')
for web_dic in web_dics:
if web_dic not in web_white:
f_pass = open('pass.txt',"r")
for dic_pass in f_pass:
dics = list(exrex.generate(web_dic+'[!@#]'+dic_pass))
for dic in dics:
print dic.strip('\n') if __name__ == '__main__':
web_white = ['com','cn','org','edu','gov','www']
host = 'www.ichunqiu.com'
if '://' in host:
host = host.split('://')[1]
if '/' in host:
host = host.replace('/','')
dic_create(host)
然后就差不多了,顶多加个判断,排除简单的密码组合
#-*- coding: UTF-8 -*-
import exrex def dic_create(hosts):
web_dics = hosts.split('.')
for web_dic in web_dics:
if web_dic not in web_white:
f_pass = open('pass.txt',"r")
for dic_pass in f_pass:
dics = list(exrex.generate(web_dic+'[!@#]'+dic_pass))
for dic in dics:
if len(dic) > 5:
print dic.strip('\n') if __name__ == '__main__':
web_white = ['com','cn','org','edu','gov','www']
host = raw_input('PLEASE INPUT YOUR TARGET:')
if '://' in host:
host = host.split('://')[1]
if '/' in host:
host = host.replace('/','')
dic_create(host)
0×06 Queue模块的讲解
自带的模块,不用安装,你们可以去看官方文档学习,我也只是简单的说一下
创建一个队列
D:\ichunqiu\items>python
Python 2.7 (r27:82525, Jul 4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import Queue
>>> queue = Queue.Queue()
将值放入队列中
>>> for i in range(8):
... queue.put(i)
...
返回队列大小
>>> queue.qsize()
8
取出队列中的值
>>> queue.get()
0
>>> queue.get()
1
>>> queue.get()
2
Threading与Queue的结合
#-*- coding: UTF-8 -*-
import threading
import Queue class DemoRUN(threading.Thread):
def __init__(self,queue):
threading.Thread.__init__(self)
self._queue = queue
def run(self):
while not self._queue.empty():
key = self._queue.get()
print key
def main():
threads = []
threadnum = 20 #线程数
queue = Queue.Queue()
for i in range(1,9):
queue.put(i)
for i in xrange(threadnum):
threads.append(DemoRUN(queue))
for t in threads:
t.start()
for t in threads:
t.join()
if __name__ == '__main__':
main()
这就是一个大概的模块
0×07 目录扫描脚本编写

目录扫描,顾名思义,就是目录扫描,在信息收集中也算重要的一环了
所以我先简单放出一个单线程版,大概思路就是引入字典,URl+字典内容,访问,状态码是200就保留
#-*- coding: UTF-8 -*-
import requests def scan_target_url_exists(target_url):
headers={
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Referer': 'http://www.google.com'
}
status_codes = [200]
all_lines=open(dir_file,'r').readlines()
for i in all_lines:
url = target_url+'/'+str(i)
req=requests.head(url.strip(),timeout=8,headers=headers)
if req.status_code in status_codes:
print 'CODE:%s,URL:%s'%(str(req.status_code),url.strip('\n').strip('\r'))
open('exists_target_url.txt','a').write(url) if __name__ == '__main__':
dir_file='demo.txt'
target_url='localhost'
if target_url.startswith('http://') or target_url.startswith('https://'):
pass
else:
target_url = 'http://' + target_url
scan_target_url_exists(target_url)
没有什么知识点,直接看吧,接下来,是多线程的
用到了queue,优化了一下code
#-*- coding: UTF-8 -*-
import requests
from threading import Thread, activeCount
import Queue queue = Queue.Queue()
dir_file='demo.txt' def scan_target_url_exists(target_url):
headers={
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Referer': 'http://www.google.com'}
status_codes = [200]
try:
req=requests.head(target_url.strip(),timeout=8,headers=headers)
if req.status_code in status_codes:
print 'CODE:%s,URL:%s'%(str(req.status_code),target_url.strip('\n').strip('\r'))
open('exists_target_url.txt','a').write(target_url)
except:
pass
def open_pathfile(file):
all_lines=open(file,'r').readlines()
for line in all_lines:
if target_url.endswith('/'):
if line.startswith('/'):
queue.put(target_url+line[1:])
else:
queue.put(target_url + line)
else:
if line.startswith('/'):
queue.put(target_url + line)
else:
queue.put(target_url + '/' + line) if __name__ == '__main__':
print '''
____ _ ____
| _ \(_)_ __/ ___| ___ __ _ _ __
| | | | | '__\___ \ / __/ _` | '_ \
| |_| | | | ___) | (_| (_| | | | |
|____/|_|_| |____/ \___\__,_|_| |_| '''
target_url=raw_input('Please input your target:')
threadnum = raw_input('Please input your threadnum:')
if target_url.startswith('http://') or target_url.startswith('https://'):
pass
else:
target_url = 'http://' + target_url
print 'The number of threads is %s' % threadnum
print 'Matching.......'
open_pathfile(dir_file)
while queue.qsize() > 0:
if activeCount() <= int(threadnum):
Thread(target=scan_target_url_exists,args=(queue.get(),)).start()
当然了,阅读原文查看你们想要的目录扫描的字典>>>>https://bbs.ichunqiu.com/article-1618-1.html
Python大法之告别脚本小子系列—信息资产收集类脚本编写(下)的更多相关文章
- Python大法之告别脚本小子系列—各类URL采集器编写
本文作者:i春秋签约作家——阿甫哥哥 系列文章专辑:https://bbs.ichunqiu.com/forum.php?mod=collection&action=view&ctid ...
- 5. Python大法之告别脚本小子--各类URL采集器编写
在i春秋上面,有很多不错的脚本: https://bbs.ichunqiu.com/forum.php?mod=collection&action=view&ctid=137 http ...
- Unity3D脚本中文系列教程(五)
http://dong2008hong.blog.163.com/blog/static/4696882720140302848544/?suggestedreading&wumii Unit ...
- 【MonkeyRunner】[技术博客]用python编写脚本查看设备信息
[MonkeyRunner]用python编写脚本查看设备信息 原以为是个简单的操作,在实践的时候发现了一些问题. python脚本 test.py: from com.android.monkeyr ...
- [Python] 利用Django进行Web开发系列(二)
1 编写第一个静态页面——Hello world页面 在上一篇博客<[Python] 利用Django进行Web开发系列(一)>中,我们创建了自己的目录mysite. Step1:创建视图 ...
- 第二弹:超全Python学习资源整理(进阶系列)
造一个草原要一株三叶草加一只蜜蜂.一株三叶草,一只蜂,再加一个梦.要是蜜蜂少,光靠梦也行. - 狄金森 "成为编程大牛要一门好语言加一点点天分.一门好语言,一点点天分,再加一份坚持.要是天分 ...
- 脚本小子学习--vulnhub靶机DC8
@ 目录 前言 一.环境搭建 二.目标和思路 三.实际操作 1.信息收集 2.getshell 总结 前言 通过一些靶机实战练习,学习使用现有的工具来成为脚本小子. 一.环境搭建 靶机:Linux虚拟 ...
- Unity3D脚本中文系列教程(十六)
Unity3D脚本中文系列教程(十五) ◆ function OnPostprocessAudio (clip:AudioClip):void 描述:◆ function OnPostprocess ...
- Unity3D脚本中文系列教程(十四)
http://dong2008hong.blog.163.com/blog/static/469688272014032134394/ WWWFrom 类Unity3D脚本中文系列教程(十三)辅助类. ...
随机推荐
- Spring.Net配置
<?xml version="1.0" encoding="utf-8"?> <configuration> <!--一定 ...
- GDI+_入门教程【一】
GDI For VisualBasic6.0 [一]文件下载:GDI+ For VB6[一] 简单绘图实例演示百度网盘 1 '以下为作者[vIsiaswx]的教程 '(该教程发布的原地址已无法访问,此 ...
- CentOS7下安装Gitlab社区版【安装步骤、IP改域名、修改端口】
这两天一直在给公司的服务器配置Gitlab(10.5.4).过程很是痛苦,所以把过程记录一下. 1.安装CentOS7 从官网上下载了最新版CentOS-7-x86_64-DVD-1708.iso.用 ...
- ztree带有选项框的树形菜单使用
1.ztree简介 zTree 是一个依靠 jQuery 实现的多功能 “树插件”.优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点.专门适合项目开发,尤其是 树状菜单.树状数据的Web ...
- Spring注解方式配置Redis
@Configuration public class RedisConfiguraion { @Bean public JedisConnectionFactory redisConnectionF ...
- combox省市县三级联动
/** * Name 获取省份(初始化) */ function showProvince(id1, id2, id3) { var paramData = {}; $.ajax({ url: osp ...
- 亿级 ELK 日志平台构建部署实践
本篇主要讲工作中的真实经历,我们怎么打造亿级日志平台,同时手把手教大家建立起这样一套亿级 ELK 系统.日志平台具体发展历程可以参考上篇 「从 ELK 到 EFK 演进」 废话不多说,老司机们座好了, ...
- python定义类()中写object和不写的区别
这里需要说明一下: python3中,类定义默认继承object,所以写不写没有区别 但在python2中,并不是这样 所以此内容是针对python2的,当然python3默认继承,不代表我们就傻乎乎 ...
- 863. All Nodes Distance K in Binary Tree 到制定节点距离为k的节点
[抄题]: We are given a binary tree (with root node root), a target node, and an integer value K. Retur ...
- adc指令
adc是带进位加法指令,它利用了CF位上记录的进位值. 指令格式: adc 操作对象1,操作对象2 功能:操作对象1 = 操作对象1 + 操作对象2 + CF 例如指令 adc ax,bx实现的功能 ...