乙方渗透测试之信息收集

前言


本篇整理信息收集阶段,大概会占渗透测试总时间的60%,视能力和情况而定,做到不影响企业业务正常运行的情况下,收集更多的资产信息,细心和耐心很关键。

主站

快速定位,快速产出

先浏览下主站,可以很直观的了解目标站点的大致业务/性质/模式,会对整个渗透过程起到很大的帮助。

对于boss要求的部分站点需要快速产出漏洞(销售好谈客户),主站很多都是可以拿下的,比如四位数字无限制爆破验证码,sqli,备份文件,组件框架历史漏洞,后台弱口令,邮箱收集/爆破/社工theHarvester等等。

对于无范围全网测的厂商,可通过以下途径获取相关资产,比如收集开发运维专用的域名和解析到内网的域名,主机ip所属等。

搜索引擎hacking语法,搜target.com|公司名字,有时也能查到,但是数据需要清洗。

whois查询/注册人反查/邮箱反查/相关资产

站长之家

爱站

微步在线(企业版)

ip反查

天眼查

虎妈查

历史漏洞查询

Github泄露

本阶段收集的信息,为下一步收集/爆破子域名做好准备。

子域名

子域名的收集途径很多,Layer子域名挖掘机4.2纪念版subDomainsBrute李劼杰wydomain猪猪侠Sublist3rsite:target.comGithub代码仓库,抓包分析请求返回值(跳转/文件上传/app/api接口等),站长帮手links等在线查询网站,部分会受到泛解析的影响,记录下学习到的,

域传送漏洞

linux:

[dig @ns.example.com example=.com AXFR]

windows:

[nslookup -> set type=ns ->target.com -> server ns.target.com -> ls target.com]

GetDomainsBySSL

censys.io证书

crt.sh证书查询

shodan/fofa.so/zoomeye

dnsdb.io

api.hackertarget

community.riskiq.com

n级子域名爆破

subdomain3

FuzzDomain

端口服务

假设从layer导出来的子域名列表为target.com.txt,使用nmap扫默认端口

nmap -v -A -F -iL target.com.txt -oX target_f.xml

扫描全端口

nmap -v -A -p1-65535 -iL target.com.txt -oX target_all.xml

端口扫描脚本

端口渗透总结

web探测

探测每个站点的web信息,假设所有子域名都在:target.com_domains.txt(Layer直接导出域名)

BSDR_Banners密码:rzv0

web指纹识别

邮箱命名规则收集/爆破/社工

详细可参考:渗透标准

qq群,微信公众号和百度文库等社交途径有时也能收集到一页特定规则的密码表,直接附上一个小脚本

main.py

实现批量扫描target.com_domains.txt站点

#-*-coding:UTF-8-*-

importrequests

importre

importos

frombs4importBeautifulSoup

frommultiprocessing.poolimportPool

importthreading

importtime

#from whatcms import *

fromdirscanimport*

frombaidu_siteimport*

#from baidu_inurl import *

#from getalllink import *

importwarnings

warnings.filterwarnings("ignore")

importsys

reload(sys)

sys.setdefaultencoding('utf-8')

globalcookie

cookie='1'

output_file=sys.argv[1].split('.')[0]+time.strftime('%Y-%m-%d',time.localtime(time.time()))+'.html'#-%H-%I-%S

defcheck(url):

try:

printurl

header={

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

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

'Upgrade-Insecure-Requests':'1',

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

'Cookie':cookie,

'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36'}

req=requests.get(url,headers=header,timeout=5,allow_redirects=False)

status=req.status_code

html=req.content

soup=BeautifulSoup(html,from_encoding="utf-8")

server='      '

try:

server=req.headers['Server']

except:pass

title='  '

try:

title=soup.title.string

except:pass

X_Powered_By='    '

try:

X_Powered_By=req.headers['X-Powered-By']

except:pass

output=open(output_file,"a")

str1='''

【%s】  %s  %s  %s  %s  %s  %s

'''%(str(status),server,X_Powered_By,url,url,title,baidu_site(url),dirscan(url))#,dirlink(url))#,baidu_inurl(url)whatcms(url),dirscan(url),yunxi_cmsapi(url)%s

output.write(str1)

output.close()

return1

except:

return0

finally:

return0

defget_domain(adr):

files=open(adr,'r')

regex=re.compile(r"(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+",re.IGNORECASE)

whileTrue:

line=files.readline()

ifline:

urls=regex.findall(line)

foriinurls:

forportinweb_port:

domain_http='http://'+i+':'+port

ifdomain_httpnotindomains:

domains.append(domain_http)

str=line.split('\n')

domain_https='https://'+str[0]

ifdomain_httpsnotindomains:

domains.append(domain_https)

else:break

if__name__=='__main__':

domains=[]

web_port=['80',]#,'8080',] #

in_domain=sys.argv[1]

get_domain(in_domain)

output=open(output_file,"w")

str1=""

output.write(str1)

output.close()

pool=Pool(2)

pool.map(check,domains)

pool.close()

pool.join()

os._exit(0)

dirscan.py

实现简单的目录fuzz,

import requests

import sys

import urlparse

import random

import re

def list(url):

keys = []

f = open('list.txt','r')

bak = urlparse.urlparse(url).hostname#.netloc.replace(':8080','').replace(':80','')

for i in f.readlines():

key = i.strip().replace('%flag%',bak)

if key not in keys:

keys.append(key)

return keys

def dirscan(url):

flag = []

keys = list(url)

headers = {

'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36',

'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,en-US;q=0.6,en;q=0.4'}

user_agent = ['Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0',

'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.6 Safari/532.0',

'Mozilla/5.0 (Windows; U; Windows NT 5.1 ; x64; en-US; rv:1.9.1b2pre) Gecko/20081026 Firefox/3.1b2pre',

'Opera/10.60 (Windows NT 5.1; U; zh-cn) Presto/2.6.30 Version/10.60','Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4062; en; U; ssr)',

'Mozilla/5.0 (Windows; U; Windows NT 5.1; ; rv:1.9.0.14) Gecko/2009082707 Firefox/3.0.14',

'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36',

'Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.2.4) Gecko/20100523 Firefox/3.6.4 ( .NET CLR 3.5.30729)',

'Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-FR) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16',

'Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-FR) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5']

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

if check.url[-1:] != '/':

check.url = check.url + '/'

#print check.url

#print url

try:

if check.headers['X-Frame-Options']:

return 'Nginx 404/401'

except:pass

if check.url[:-1] != url:

return check.url[:-1]

#url.replace(':8080','').replace(':80','')

#url = urlparse.urlsplit(check.url).scheme+'://'+urlparse.urlsplit(check.url).netloc

for i in keys:

urli = url + i

UA = random.choice(user_agent)

headers['User-Agent'] = UA

try:

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

#print r.status_code

#print r.url

#print len(r.content),len(check.content)

if r.status_code == 200 and len(check.content) != len(r.content) and r.url == urli:

flag.append(i)

except:pass

if len(flag) > 25:

return

else:

return flag

'''

if re.findall(r"\['/robots\.txt',  (.*?) '/tmp', '/file'\]",str(flag)):

return

else:

return flag'''

if __name__ == '__main__':

print dirscan(sys.argv[1])

# svn :text/plain

# Ds_stroe:'application/octet-stream' == r.headers['Content-Type']

#if 'application' in r.headers['Content-Type']:

#  flag.append(i)


baidu_site.py

加入site:子域名,

importrequests

importre

importsys

importurlparse

importrandom

defbaidu_site(url):

url=urlparse.urlparse(url).hostname

baidu_url='https://www.baidu.com/s?ie=UTF-8&wd=site:{}'.format(url)

headers={

'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36',

'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,en-US;q=0.6,en;q=0.4'}

user_agent=['Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0',

'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.6 Safari/532.0',

'Mozilla/5.0 (Windows; U; Windows NT 5.1 ; x64; en-US; rv:1.9.1b2pre) Gecko/20081026 Firefox/3.1b2pre',

'Opera/10.60 (Windows NT 5.1; U; zh-cn) Presto/2.6.30 Version/10.60','Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4062; en; U; ssr)',

'Mozilla/5.0 (Windows; U; Windows NT 5.1; ; rv:1.9.0.14) Gecko/2009082707 Firefox/3.0.14',

'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36',

'Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.2.4) Gecko/20100523 Firefox/3.6.4 ( .NET CLR 3.5.30729)',

'Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-FR) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16',

'Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-FR) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5']

UA=random.choice(user_agent)

headers['User-Agent']=UA

try:

r=requests.get(url=baidu_url,headers=headers,timeout=5).content

if'class="nors"'notinr:

return'Baidu_site'%baidu_url

else:

return''

except:

pass

return''

if__name__=='__main__':

printbaidu_site(sys.argv[1])

list.txt

目录字典,

/robots.txt

/.git/config

/.svn/entries

/.svn/wc.db

/README.md

/.viminfo

/.bash_history

/.bashrc

/crossdomain.xml

/nginx.conf

/httpd.conf

/user.txt

/sitemap.xml

/username.txt

/pass.txt

/passwd.txt

/password.txt

/.DS_Store

/.htaccess

/log

/log.txt

/phpinfo.php

/info.php

/www.7z

/www.rar

/www.zip

/www.tar.gz

/wwwroot.zip

/wwwroot.rar

/wwwroot.7z

/wwwroot.tar.gz

/%flag%.7z

/%flag%.rar

/%flag%.zip

/%flag%.tar.gz

/backup

/backup.7z

/backup.rar

/backup.sql

/backup.tar

/backup.tar.gz

/backup.zip

/database.sql

/index.7z

/index.rar

/index.sql

/index.tar

/index.tar.gz

/index.zip

/index.html

/index.php

/index.asp

/index.aspx

/index.jsp

/index.action

/users.sql

/login

/phpmyadmin

/pma

/SiteServer

/admin

/install

/backup

/test

/tmp

/file

效果:

所需辅助小插件,可自行添加

推荐个完善的datasploit


转载:http://www.cnnetarmy.com/%e4%b9%99%e6%96%b9%e6%b8%97%e9%80%8f%e6%b5%8b%e8%af%95%e4%b9%8b%e4%bf%a1%e6%81%af%e6%94%b6%e9%9b%86/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容