"我写工具不是为了超越哪一款工具,现在burpsuite已经趋近完美了。
不过有一些角落但很重要的东西还是需要我去填补"
这次给大家带来的小工具是一个网站全链接爬取的工具的基础版本,大家可以拿回去在这基础上继续开发
还是顺着我们之前的思路,已经确定了目标(URl采集)
接下来我们有针对性的对一些目标进行渗透测试
今天给大家带来的是一个对目标进行爬取全站链接的工具
前几天对一个办公系统(有授权)进行渗透测试的时候发现,这种系统并不是说像我们所说的门户网站那样,大致功能都可以看到
这种系统表现出来的只是一部分,更多的普通访问时无法访问到的,所以我用了暴力破解的方式获取了更多的网站目录结构,从而发现了更多的漏洞
我开始意识到你能获取到多少目录结构决定了你的攻击面有多大,所以我才决定写这样的一个工具
PS:这个工具只能获取能访问到url,一些在页面中没有的url是无法获取到的,需要暴力破解
一、安装第三方模块
requets、bs4
二、使用方法
Usage: xxx.py https://www.baidu.com
记得带上http 或 https
三、注意事项
这个脚本没有使用代理,大家可以自己加,就几行代码
偶尔会发生内存溢出的问题,这个我也不知道为什么
四、开发建议
后期我肯定会把各种脚本综合起来做成一个自动化工具,到时候应该不会发布出来
大家开发时候可以做成一个类,将这个脚本里面的函数都变成类函数
代码如下:
import requests
import sys
from urllib import parse
import time
from bs4 import BeautifulSoup
from urllib.parse import urljoin
import re
# def getUrladdr():
# if not len(sys.argv) == 2:
# print('Usage: xxx.py https://www.baidu.com')
# else:
# url = sys.argv[1]
# return url
def getRobots(robots_url):
url = url_parts.scheme + '://' +url_parts.netloc+ '/robots.txt'
# print(url)
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'close',
'Upgrade-Insecure-Requests': '1'
}
r = requests.get(url, headers=headers)
if r.status_code == 200:
for i in re.findall(r'/.+', r.text):
# print(i)
url = urljoin(url_parts.scheme + '://' +url_parts.netloc, i.strip())
print(url)
getLinks(url)
def get_Full_Path(one_url, orl_url):
# 这个函数是用来获取绝对url的
url = one_url.strip()
if not url.startswith('http') and not url.startswith('javascript') and not url.startswith(
'mail') and not url.startswith('#') and not url.startswith('https*'):
url = urljoin(orl_url.strip(), url)
elif url.startswith('http') or url.startswith('https'):
url = url
else:
url = None
return url
def del_url(one_url):
# 这个函数用来处理url的存储问题
script_type_list = ['asp', 'aspx', 'html', 'php', 'jsp', 'css', 'js', 'ashx', 'txt', 'config', 'conf', 'inc', 'htm', 'action']
# 遇到这些结尾的url才做爬取
urlparsed = parse.urlparse(one_url)
script_type = urlparsed.path.split(r'.')[-1]
domain = urlparsed.netloc
if domain == url_parts.netloc:
if script_type in script_type_list or script_type.endswith('/'):
if one_url not in url_set:
url_set.add(one_url)
with open('urls.txt', 'a+') as f:
print(one_url)
f.write(one_url + '\n')
getLinks(one_url)
def getLinks(url):
urlparsed = parse.urlparse(url)
# domain = urlparsed.netloc
orl_url = urlparsed.scheme + '://' + urlparsed.netloc + urlparsed.path
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'close',
'Upgrade-Insecure-Requests': '1'
}
try:
req = requests.get(url, headers=headers)
time.sleep(0.2)
soup = BeautifulSoup(req.text, 'html.parser')
for a_mark in soup.find_all('a'):
one_url = a_mark['href']
if one_url != None:
one_url = get_Full_Path(one_url, orl_url)
# sprint(one_url)
if one_url:
del_url(one_url)
except Exception as e:
print('出现了异常')
def main():
getRobots(url_parts)
getLinks(url)
if __name__ == '__main__':
url_set = set()
# set用来去重
if not len(sys.argv) == 2:
print('Usage: xxx.py https://www.baidu.com')
exit(0)
else:
url = sys.argv[1]
url_parts = parse.urlparse(url)
main()
else:
url_set = set()