Skip to content

Commit 9a78427

Browse files
committed
添加了社会工程学密码生成和whois查询
1 parent 267d76d commit 9a78427

6 files changed

Lines changed: 1216 additions & 0 deletions

File tree

myweb.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
from flask import Flask,render_template,request
55
import re
66
import baiduip
7+
from password import PasswdGenerator
78
import cms
89
import sys
10+
import whois
911
reload(sys)
1012
sys.setdefaultencoding('utf-8')
1113

@@ -42,5 +44,37 @@ def webdna():
4244
else:
4345
return render_template('cms.html',title="CMS识别")
4446

47+
#在线密码生成
48+
@app.route('/password',methods=["get","post"])
49+
def password_build():
50+
if request.method == 'POST':
51+
birthday = request.form.get("birthday","")
52+
fullname = request.form.get("fullname","")
53+
nickname = request.form.get("nickname","")
54+
englishname = request.form.get("englishname","")
55+
partnername = request.form.get("partnername","")
56+
phone = request.form.get("phone","")
57+
qq = request.form.get("qq","")
58+
company = request.form.get("company","")
59+
domain = request.form.get("domain","")
60+
oldpasswd = request.form.get("oldpasswd","")
61+
keywords = request.form.get("keywords","")
62+
keynumbers = request.form.get("keynumbers","")
63+
pwgen = PasswdGenerator(fullname=fullname,nickname=nickname,englishname=englishname,partnername=partnername,phone=phone,qq=qq,company=company,domain=domain,oldpasswd=oldpasswd,keywords=keywords,keynumbers=keynumbers,birthday=birthday)
64+
wordlist = pwgen.generate()
65+
return render_template('password.html',data=wordlist,title="社工密码生成")
66+
else:
67+
return render_template('password.html',title="社工密码生成")
68+
69+
#Whois 在线查询
70+
@app.route('/whois',methods=["get","post"])
71+
def whoisa():
72+
if request.method == 'POST':
73+
url = request.form.get("search")
74+
data = whois.whois(url).replace("\n","</br>")
75+
return render_template('whois.html',data=data,title="Whois查询")
76+
else:
77+
return render_template('whois.html',title="Whois查询")
78+
4579
if __name__ == '__main__':
4680
app.run(debug=True)

password.py

Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
1+
#!/usr/bin/env python
2+
#-*- coding:utf-8 -*-
3+
4+
'''
5+
Pentestdb, a database for penetration test.
6+
Copyright (c) 2015 alpha1e0
7+
================================================================
8+
社工密码生成器.
9+
'''
10+
11+
12+
import time
13+
import itertools
14+
15+
16+
17+
class PasswdGenerator(object):
18+
'''
19+
Password generator.
20+
'''
21+
# 常用密码关键数字
22+
_numList = ['123456', '123123', '123123123', '112233', '445566', '456456', '789789', '778899', '321321', '520', '1314', '5201314', '1314520', '147369', '147258', '258', '147', '456', '789', '147258369', '111222', '123', '1234', '12345', '1234567', '12345678', '123456789', '987654321', '87654321', '7654321', '654321', '54321', '4321', '321']
23+
# 常用前缀列表
24+
_prefixList = ['a','qq','yy','aa','abc','qwer','woaini']
25+
# 常用密码
26+
_commonPasswd = ['123456', 'a123456', '123456a', '123456abc', 'abc123456', 'woaini1314', 'qq123456', 'woaini520', 'woaini123', 'woaini521', 'qazwsx', '1qaz2wsx', '1q2w3e4r', '1q2w3e4r5t', '1q2w3e', 'qwertyuiop', 'zxcvbnm']
27+
# 和partner混合的常用前缀列表
28+
partnerPrefixList = ['520','5201314','1314','iloveu','iloveyou']
29+
# 和domian,company组合的前缀列表
30+
domainPrefixList = ['admin','root','manager','system']
31+
32+
33+
def __init__(self, fullname="", nickname="", englishname="", partnername="", birthday="", phone="", qq="", \
34+
company="", domain="", oldpasswd="", keywords="", keynumbers=""):
35+
'''
36+
Params:
37+
Parameters of args:
38+
fullname: specified the fullname, format: 'zhang san' 'wang ai guo' 0
39+
nickname: specified the nickname 0
40+
englishname: specified the english name 0
41+
partnername: specified the partner name
42+
birthday: specified the birthday day, format: '2000-1-10' 0
43+
phone: specified the phone number 0
44+
qq: specified the QQ number 0
45+
company: specified the company
46+
domain: specified the domain name
47+
oldpasswd: specified the oldpassword
48+
keywords: specified the keywords, example: 'keyword1 keyword2'
49+
keynumbers: specified the keynumbers, example: '123 789' 0
50+
'''
51+
self.fullname = fullname
52+
self.nickname = nickname
53+
self.englishname = englishname
54+
self.partnername = partnername
55+
self.birthday = birthday
56+
self.phone = phone
57+
self.qq = qq
58+
self.company = company
59+
self.domain = domain
60+
self.oldpasswd = oldpasswd
61+
self.keywords = keywords
62+
self.keynumbers = keynumbers
63+
64+
# 常用数字列表,用户和用户名、昵称、英文名、关键字等混合
65+
self.innerNumList = []
66+
# 常用前缀列表,用于和手机号、QQ号混合
67+
self.innerPrefixList = []
68+
69+
# 段名列表,由原始全名生成
70+
self.shortNameList = []
71+
# 全名列表,由原始全名生成
72+
self.fullNameList = []
73+
# 待混合的keyword列表,由于用户名、昵称、英文名、关键字的混合规则一致,因此放到这一个列表内进行混合
74+
self.mixedKeywordList = []
75+
76+
self.result = []
77+
78+
79+
def _genShortNameList(self, fullname=None):
80+
fullname = fullname if fullname else self.fullname
81+
if not fullname:
82+
return []
83+
else:
84+
result = []
85+
func = lambda x:[x, x.title(), x[0].lower(), x[0].upper(), x.upper()]
86+
nameSplited = fullname.split()
87+
if len(nameSplited) == 1:
88+
result += func(nameSplited[0])
89+
elif len(nameSplited) == 2:
90+
shortName = nameSplited[0][0].lower() + nameSplited[1][0].lower()
91+
result += func(shortName)
92+
else:
93+
shortName = nameSplited[0][0].lower() + nameSplited[1][0].lower() + nameSplited[2][0].lower()
94+
result += func(shortName)
95+
shortNameRS = nameSplited[1][0].lower() + nameSplited[2][0].lower() + nameSplited[0][0].lower()
96+
shortNameR = nameSplited[1][0].lower() + nameSplited[2][0].lower() + nameSplited[0]
97+
result += [shortNameR, shortNameRS, shortNameRS.upper()]
98+
99+
return result
100+
101+
102+
def _genFullNameList(self, fullname=None):
103+
fullname = fullname if fullname else self.fullname
104+
if not fullname:
105+
return []
106+
else:
107+
result = []
108+
nameSplited = fullname.split()
109+
if len(nameSplited) == 1:
110+
result.append(nameSplited[0])
111+
elif len(nameSplited) == 2:
112+
result += ["".join(nameSplited), nameSplited[1]+nameSplited[0]]
113+
else:
114+
result += [nameSplited[0]+nameSplited[1]+nameSplited[2], nameSplited[1]+nameSplited[2]+nameSplited[0]]
115+
116+
return result + [x.upper() for x in result]
117+
118+
119+
def _genInnerNumList(self):
120+
result = self._numList
121+
for i in range(0,10):
122+
result += [str(i)*x for x in range(1,10)]
123+
124+
endyear = int(time.strftime("%Y"))
125+
result += [str(x) for x in range(2000, endyear+1)]
126+
127+
if self.keynumbers:
128+
result += self.keynumbers.split()
129+
if self.oldpasswd:
130+
result.append(self.oldpasswd)
131+
132+
return result
133+
134+
135+
def _genDateList(self, date):
136+
if not date:
137+
return []
138+
else:
139+
result = []
140+
dateSplited = date.split("-")
141+
if len(dateSplited) == 1:
142+
result.append(dateSplited[0])
143+
elif len(dateSplited) == 2:
144+
result += [dateSplited[0], dateSplited[0]+dateSplited[1], dateSplited[0][-2:]+dateSplited[1]]
145+
else:
146+
result += [dateSplited[0], dateSplited[0]+dateSplited[1], dateSplited[0]+dateSplited[1]+dateSplited[2]]
147+
result += [dateSplited[0][-2:]+dateSplited[1], dateSplited[0][-2:]+dateSplited[1]+dateSplited[2]]
148+
149+
return result
150+
151+
def _mixed(self, listA, listB):
152+
if not listA and not listB:
153+
return []
154+
result = []
155+
for a,b in itertools.product(listA, listB):
156+
if len(a+b)>5 and len(a+b)<17:
157+
result.append(a+b)
158+
result.append(a+"@"+b)
159+
160+
return result
161+
162+
163+
def _preHandlePhase(self):
164+
self.innerNumList = self._genInnerNumList()
165+
self.innerPrefixList = self._prefixList + [x.upper() for x in self._prefixList]
166+
self.shortNameList = self._genShortNameList()
167+
self.fullNameList = self._genFullNameList()
168+
169+
self.mixedKeywordList += self.shortNameList
170+
self.mixedKeywordList += self.fullNameList
171+
if self.nickname:
172+
self.mixedKeywordList.append(self.nickname)
173+
if self.englishname:
174+
self.mixedKeywordList.append(self.englishname)
175+
if self.keywords:
176+
self.mixedKeywordList += self.keywords.split()
177+
178+
179+
def _mixedPhase(self):
180+
self.result += self._mixed(self.mixedKeywordList, self.innerNumList)
181+
self.result += self._mixed(["520"], self.mixedKeywordList)
182+
if self.phone:
183+
self.result += self._mixed(self.innerPrefixList+self.mixedKeywordList, [self.phone])
184+
if self.qq:
185+
self.result += self._mixed(self.innerPrefixList+self.mixedKeywordList, [self.qq])
186+
if self.partnername:
187+
nameList = self._genShortNameList(self.partnername)
188+
nameList += self._genFullNameList(self.partnername)
189+
self.result += self._mixed(self.partnerPrefixList, nameList)
190+
if self.birthday:
191+
dateList = self._genDateList(self.birthday)
192+
self.result += self._mixed(self.innerPrefixList+self.mixedKeywordList, dateList)
193+
if self.domain:
194+
self.result += self._mixed(self.domainPrefixList, [self.domain])
195+
if self.company:
196+
self.result += self._mixed(self.domainPrefixList, [self.company])
197+
198+
199+
def _lastHandlePhase(self):
200+
self.result += self._commonPasswd
201+
self.result += [x+"." for x in self.result]
202+
203+
204+
def generate(self):
205+
self._preHandlePhase()
206+
self._mixedPhase()
207+
self._lastHandlePhase()
208+
209+
return self.result
210+
211+
212+
# [usage]
213+
# pwgen = PasswdGenerator(nickname=nickname,qq=qq)
214+
# wordlist = pwgen.generate()
215+
216+
217+

templates/base.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,8 @@ <h1 class="am-topbar-brand">
165165
<ul class="am-nav am-nav-pills am-topbar-nav">
166166
<li><a href="/"><span class=am-icon-skyatlas></span> <span class=admin-fullText>主页</span></a></li>
167167
<li><a href="/webdna"><span class="am-icon-windows"></span> CMS识别</a></li>
168+
<li><a href="/password"><span class="am-icon-cube"></span> 密码生成</a></li>
169+
<li><a href="/whois"><span class="am-icon-cube"></span> whois查询</a></li>
168170
<li><a href="javascript:;" id="admin-fullscreen"><span class="am-icon-arrows-alt"></span> <span class="admin-fullText">开启全屏</span></a></li>
169171

170172
</ul>

templates/password.html

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
{% extends "base.html" %}
2+
{% block content %}
3+
<div class="get">
4+
<div class="am-g">
5+
<div class="am-u-lg-12">
6+
<h1 class="get-title">在线社工字典生成</h1>
7+
</div>
8+
<h2>利用人性的弱点 精准的分析个人密码</h2>
9+
10+
<div class="am-form-group">
11+
<div class="am-u-sm-8 am-u-sm-offset-2">
12+
<div class="am-g am-container">
13+
14+
<form class="am-form" action="" method="POST">
15+
16+
<div class="am-input-group am-input-group-primary">
17+
<span class="am-input-group-label"><i class="am-icon-user am-icon-fw"></i></span>
18+
<input type="text" id="email" name="englishname" placeholder="英文名称 example:zhang san" style="height:40px;width:350px;"></input type="text">
19+
20+
<span class="am-input-group-label"><i class="am-icon-user am-icon-fw"></i></span>
21+
<input type="text" id="email" name="fullname" placeholder="姓名全拼" style="height:40px;width:350px;"></input type="text">
22+
</div>
23+
24+
<br>
25+
26+
<div class="am-input-group am-input-group-primary">
27+
<span class="am-input-group-label"><i class="am-icon-user am-icon-fw"></i></span>
28+
<input type="text" name="phone" placeholder="手机号" style="height:40px;width:350px;"></input type="text">
29+
30+
<span class="am-input-group-label"><i class="am-icon-user am-icon-fw"></i></span>
31+
<input type="text" name="qq" placeholder="QQ号" style="height:40px;width:350px;"></input type="text">
32+
33+
</div> <br>
34+
35+
<div class="am-input-group am-input-group-primary">
36+
<span class="am-input-group-label"><i class="am-icon-user am-icon-fw"></i></span>
37+
<input type="text" name="birthday" placeholder="出生日期 example:2000-1-10" style="height:40px;width:350px;"></input type="text">
38+
39+
<span class="am-input-group-label"><i class="am-icon-user am-icon-fw"></i></span>
40+
<input type="text" name="keynumbers" placeholder="特殊数字 example: 123 789" style="height:40px;width:350px;"></input type="text">
41+
42+
</div> <br>
43+
44+
<div class="am-input-group am-input-group-primary">
45+
<span class="am-input-group-label"><i class="am-icon-user am-icon-fw"></i></span>
46+
<input type="text" name="nickname" placeholder="昵称" style="height:40px;width:350px;"></input type="text">
47+
48+
<span class="am-input-group-label"><i class="am-icon-user am-icon-fw"></i></span>
49+
<input type="text" name="partnername" placeholder="伴侣姓名" style="height:40px;width:350px;"></input type="text">
50+
</div> <br>
51+
52+
<div class="am-input-group am-input-group-primary">
53+
<span class="am-input-group-label"><i class="am-icon-user am-icon-fw"></i></span>
54+
<input type="text" name="company" placeholder="公司名称" style="height:40px;width:350px;"></input type="text">
55+
56+
<span class="am-input-group-label"><i class="am-icon-user am-icon-fw"></i></span>
57+
<input type="text" name="domain" placeholder="域名" style="height:40px;width:350px;"></input type="text">
58+
</div> <br>
59+
60+
<div class="am-input-group am-input-group-primary">
61+
<span class="am-input-group-label"><i class="am-icon-user am-icon-fw"></i></span>
62+
<input type="text" name="oldpasswd" placeholder="老密码" style="height:40px;width:350px;"></input type="text">
63+
64+
<span class="am-input-group-label"><i class="am-icon-user am-icon-fw"></i></span>
65+
<input type="text" name="keywords" placeholder="关键字 example: keyword1 keyword2" style="height:40px;width:350px;"></input type="text">
66+
</div> <br>
67+
<div style="text-align: center;">
68+
<button type="submit" class="am-btn am-btn-primary am-btn-larg"><i class="am-icon-check"></i> 提 交</button>
69+
</div>
70+
71+
</form>
72+
</div>
73+
</div>
74+
75+
<div class="box">
76+
</div>
77+
</div>
78+
</div>
79+
</div>
80+
81+
<div class="about">
82+
<div class="am-g am-container">
83+
<div class="am-g doc-am-g">
84+
<div class="am-form-group">
85+
{% if data %}
86+
<table class="am-table am-table-bordered am-table-radius">
87+
<thead>
88+
<tr>
89+
<th>生成的密码</th>
90+
</tr>
91+
</thead>
92+
<tbody>
93+
{%for pass in data %}
94+
<tr>
95+
<td>{{pass}}</td>
96+
</tr>
97+
{%endfor%}
98+
99+
</tbody>
100+
</table>
101+
{% endif %}
102+
103+
104+
<div class="box">
105+
</div>
106+
</div>
107+
</div>
108+
</div>
109+
110+
</div>
111+
{% endblock %}

0 commit comments

Comments
 (0)