js敏感信息扫描

前言

在信息收集中,除了常规的方式以外,还可以从js中进行收集,一些隐藏页面往往就会隐藏在js中。从js中可以收集到一些url以及子域名的信息。有时js中还会存在跟用户认证相关的信息。下面介绍几个从js中收集敏感信息的工具。

js里能找到啥

会增加攻击面的信息(URL,域名等)

敏感信息(密码,API密钥,bucket等)

代码中的潜在危险函数操作(eval,dangerallySetInnerHTML等)

具有已知漏洞的组件(过时的框架等)

jsfinder

下载地址:https://github.com/Threezh1/JSFinder

python JSFinder.py -u https://baidu.com

js敏感信息扫描_第1张图片

js敏感信息扫描_第2张图片

LinkFinder

下载地址:https://github.com/GerbenJavado/LinkFinder

python linkfinder.py -i https://example.com -d

js敏感信息扫描_第3张图片

SecretFinder

地址:https://github.com/m4ll0k/SecretFinder

添加正则表达式

可以再SecretFinder.py文件中添加自己的正则表达式:

_regex = {
    'google_api'     : r'AIza[0-9A-Za-z-_]{35}',
    'google_captcha' : r'6L[0-9A-Za-z-_]{38}|^6[0-9a-zA-Z_-]{39}$',
    'google_oauth'   : r'ya29\.[0-9A-Za-z\-_]+',
    'amazon_aws_access_key_id' : r'A[SK]IA[0-9A-Z]{16}',
    'amazon_mws_auth_toke' : r'amzn\\.mws\\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}',
    'amazon_aws_url' : r's3\.amazonaws.com[/]+|[a-zA-Z0-9_-]*\.s3\.amazonaws.com',
    'facebook_access_token' : r'EAACEdEose0cBA[0-9A-Za-z]+',
    'authorization_basic' : r'basic\s*[a-zA-Z0-9=:_\+\/-]+',
    'authorization_bearer' : r'bearer\s*[a-zA-Z0-9_\-\.=:_\+\/]+',
    'authorization_api' : r'api[key|\s*]+[a-zA-Z0-9_\-]+',
    'mailgun_api_key' : r'key-[0-9a-zA-Z]{32}',
    'twilio_api_key' : r'SK[0-9a-fA-F]{32}',
    'twilio_account_sid' : r'AC[a-zA-Z0-9_\-]{32}',
    'twilio_app_sid' : r'AP[a-zA-Z0-9_\-]{32}',
    'paypal_braintree_access_token' : r'access_token\$production\$[0-9a-z]{16}\$[0-9a-f]{32}',
    'square_oauth_secret' : r'sq0csp-[ 0-9A-Za-z\-_]{43}|sq0[a-z]{3}-[0-9A-Za-z\-_]{22,43}',
    'square_access_token' : r'sqOatp-[0-9A-Za-z\-_]{22}|EAAA[a-zA-Z0-9]{60}',
    'stripe_standard_api' : r'sk_live_[0-9a-zA-Z]{24}',
    'stripe_restricted_api' : r'rk_live_[0-9a-zA-Z]{24}',
    'github_access_token' : r'[a-zA-Z0-9_-]*:[a-zA-Z0-9_\-]+@github\.com*',
    'rsa_private_key' : r'-----BEGIN RSA PRIVATE KEY-----',
    'ssh_dsa_private_key' : r'-----BEGIN DSA PRIVATE KEY-----',
    'ssh_dc_private_key' : r'-----BEGIN EC PRIVATE KEY-----',
    'pgp_private_block' : r'-----BEGIN PGP PRIVATE KEY BLOCK-----',
    'json_web_token' : r'ey[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*$',

    'name_for_my_regex' : r'my_regex',
    # for example
    'example_api_key'    : r'^example\w+{10,50}'
}

敏感信息搜索

用户名,密码等敏感信息搜索,可以通过正则表达式或者关键词进行匹配

如在js中全局搜索passwd,password,username,email,phone等关键词

一些常见的正则表达式

常用规则

正则表达式

Email地址:

^\w+(-+.\w+)*@\w+(-.\w+)*.\w+(-.\w+)*$

域名:

a-zA-Z0-9{0,62}(.a-zA-Z0-9{0,62})+.?

InternetURL:

a-zA-z+://^\s* 或 ^http://([\w-]+.)+[\w-]+(/[\w-./?%&=]*)?$

手机号码:

^(130-9|145|7|150|1|2|3|4|5|6|7|8|9|180|1|2|3|5|6|7|8|9)\d{8}$

电话号码(“XXX-XXXXXXX”、“XXXX-XXXXXXXX”、“XXX-XXXXXXX”、“XXX-XXXXXXXX”、"XXXXXXX"和"XXXXXXXX):

^((\d{3,4}-)|\d{3.4}-)?\d{7,8}$

国内电话号码(0511-4405222、021-87888822):

\d{3}-\d{8}|\d{4}-\d{7}

电话号码正则表达式(支持手机号码,3-4位区号,7-8位直播号码,1-4位分机号):

((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)

身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X:

(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)

帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):

^a-zA-Z{4,15}$

密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):

^a-zA-Z\w{5,17}$

强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 8-10 之间):

^(?=.*\d)(?=.*a-z)(?=.*A-Z)a-zA-Z0-9{8,10}$

强密码(必须包含大小写字母和数字的组合,可以使用特殊字符,长度在8-10之间):

^(?=.*\d)(?=.*a-z)(?=.*A-Z).{8,10}$

日期格式:

^\d{4}-\d{1,2}-\d{1,2}

一年的12个月(01~09和1~12):

^(0?1-9|10-2)$

一个月的31天(01~09和1~31):

^((0?1-9)|((1|2)0-9)|30|31)$

钱的输入格式:有四种钱的表示形式我们可以接受:“10000.00” 和 “10,000.00”, 和没有 “分” 的 “10000” 和 “10,000”:

^1-9*$

这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:

^(0|1-9*)$

一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:

^(0|-?1-9*)$

这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧。下面我们要加的是说明可能的小数部分:

^0-9+(.0-9+)?$

必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 “10” 和 “10.2” 是通过的:

^0-9+(.0-9{2})?$

这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:

^0-9+(.0-9{1,2})?$

这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:

^0-9{1,3}(,0-9{3})*(.0-9{1,2})?$

1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:

^(0-9+|0-9{1,3}(,0-9{3})*)(.0-9{1,2})?$备注:这就是最终结果了,别忘了"+“可以用”*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里

xml文件:

^(a-zA-Z+-?)+a-zA-Z0-9+\.x|Xl|L$

中文字符的正则表达式:

\u4e00-\u9fa5

双字节字符:

^\x00-\xff

空白行的正则表达式:

\n\s*\r(可以用来删除空白行)

HTML标记的正则表达式:

*>.*?|

( 首尾空白字符的正则表达式:

^\s*|\s*$或(^\s*)|(\s*$)(可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)

腾讯QQ号:

1-9{4,} (腾讯QQ号从10000开始)

中国邮政编码:

1-9\d{5}(?!\d) (中国邮政编码为6位数字)

IPv4地址:

((2(50-5|0-4\d))|0-1?\d{1,2})(.((2(50-5|0-4\d))|0-1?\d{1,2})){3}

 专注分享安全知识,大家可以关注一下我的微信公众号,谢谢大家!

不积跬步,无以至千里;不积小流,无以成江河。

 

你可能感兴趣的:(渗透测试,工具,javascript,开发语言,ecmascript,web安全)