信息搜集
渗透测试的流程
- 确定目标
- 信息搜集
- 漏洞扫描
- 漏洞利用
- 形成报告
域名信息的搜集
域名是代替IP地址的方便记忆的字段,域名与IP通过dns解析
whois搜集
whois可以查询到注册人等很多的信息,一下是常用whois网站
https://whois.chinaz.com
http://whoissoft.com
https://whois.cnnic.cn/WelcomeServlet
kali中也有自带的工具可以查询,使用whois命令
whois baidu.com
就可以查到很多信息
有些域名隐藏了这些信息所以可能查询不到
域名反查
可以使用域名反查的工具查询到目标的所有域名注册信息
http://whois.chinaz.com/reverse
https://mwhois.chinaz.com
可以使用邮箱反查,注册人反查,电话反查
第二个是通过域名反查其他注册域名
ICP备案查询
因为国内的所有服务器厂商经过域名注册的时候都要进行ICP备案,所以可以通过ICP备案的信息查询到目标注册人的姓名
一个人只有一个备案号,域名较多会在后面加-1、-2解决,所以如果可以试试猜到目标有多少域名,然后通过备案号查询域名
https://icp.chinaz.com
https://beian88.com
通过公司名获取信息
天眼查可以查询到目标公司的很多信息
https://www.tianyancha.com/
小结
通过以上的方式调查可以获得姓名,邮箱,手机号,邮箱可以用来钓鱼,姓名手机号是社工的基础,可以利用这些信息弄一个自定义的社工字典爆破密码,查询到多个域名可能每个域名的安全等级不一样,可以尝试等级较低的域名,这些域名对应网站可能是部署在同一个服务器上的
子域名信息
子域名就是主域名下的另一个应用或服务的域名,一般是主域名的下一级如www.baidu.com,其中的www就是一个子域名,一般默认是百度首页,域名从右至左等级越来越低
news.baidu.com
map.baidu.com
以上都是百度的子域名百度新闻和百度地图
寻找子域名的方式可以是通过域名进行枚举访问,返回200就是存在,不过一般的子域名都是有特点的,可以通过字典的方式猜解
工具:layer子域名挖掘机
在线网站
https://phpinfo.me/domain/
域名DNS信息
标签 | 信息 |
---|---|
A | A 记录是最常用类型,将域名指向一个IPv4 地址,如 8.8.8.8 |
CNAME | 将域名指向另一个域名地址,与其保持相同解析,如 https://www.dnspod.cn |
MX | 用于邮件服务器,相关参数一般由邮件注册商提供 |
TXT | 可填写附加文本信息,常用于域名验证 |
NS | 域名服务器记录,可将指定域名交由其他 DNS 服务商解析管理 |
AAAA | 将域名指向一个IPv6 地址,如 ffo6:0:0:0:0:0:0:c3 |
DNS也可以获取很多信息,如真实IP地址等
dbcha.com
sitereport.netcraft.com
jsons.cn/nslookup
也可以使用kali命令
host baidu.com
dig baidu.com
IP信息搜集
DNS解析域名和IP的流程
使用ping命令可以得到目标IP
ping baidu.com
也可以使用kali中自带的nslookup
nslookup -type="MX"baidu.com
#其中双引号里面的就是dns的包含信息的标签,可以使用默认命令不带type
IP归属地址
http://ipwhois.cnnic.net.cn/
CDN
Content Delivery Network:内容分发网络
简而言之就是如果只有一台主服务器,用户的数量是极其庞大的,那么可以在各个地区弄出一个分服务器,然后用户使用时可以就近就方便原则选择最近的一台分服务器来减少主服务器的负担,只有在这个所谓的分服务器没有内容缓存的时候才会直接访问主服务器
-
当终端用户(北京)向www.a.com下的指定资源发起请求时,首先向LDNS(本地DNS)发起域名解析请求。
-
LDNS检查缓存中是否有www.a.com的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向授权DNS查询。
-
当授权DNS解析www.a.com时,返回域名CNAMEwww.a.tbcdn.com对应IP地址。
-
域名解析请求发送至阿里云DNS调度系统,并为请求分配最佳节点IP地址。
-
LDNS获取DNS返回的解析IP地址。
-
用户获取解析IP地址。
-
用户向获取的IP地址发起对该资源的访问请求。
如果一个网站使用了cdn服务,那么渗透难度将加大,因为我们所渗透的IP并不是目标的IP,而是一个cdn服务商的IP,cdn上有防火墙的措施使渗透难度加大;所以我们需要找到cdn的IP后面对应的真实IP;
如何去找:
-
超级ping
ping.chinaz.com //使用这个可以看各个地方的网速,如果一致并都比较小就是使用了cdn,并可以探测到多个IP都是cdn的IP nslookup //kali命令;可以查看目标的cdn服务商
-
历史DNS
以前并没有使用cdn的技术,可以使用历史dns解析信息去寻找真实IP
http://dnshistory.org/ http://toolbar.netcraft.com/site_report?url= https://tools.ipip.net/cdn.php https://github.com/vincentcox/bypass-firewalls-by-DNS-history
-
子域名查询
不是所有的公司所有业务都使用cdn,可以通过子域名的方式去寻找目标真实IP
-
国外主机解析
国外没有相关cdn的节点就会访问到真实IP
https://asm.ca.com/zh_cn/ping.php http://host-tracker.com/ http://www.webpagetest.org/ https://dnscheck.pingdom.com/
-
其他的方式
fofa
censys
邮件
手机APP抓包:目标公司有手机软件并没有使用cdn技术
微信服务号抓包:目标微信服务号没有使用cdn技术
端口服务信息
端口扫描思路和代码实现
查看本机端口号
Windows:netstat -aon|findstr 3306
Linux:netstat -an|gr
其他主机端口探测:
telnet 192.168.142.137 80
wget 192.168.142.137 80
nc -vz 192.168.142.137 80-9000 //可以批量扫描
代码实现扫描
import socket, threading
def TCP_connect(ip, port_number, delay, output):
TCPsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
TCPsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
TCPsock.settimeout(delay)
try:
TCPsock.connect((ip, port_number))
output[port_number] = 'Listening'
except:
output[port_number] = ''
def scan_ports(host_ip, delay):
threads = [] # To run TCP_connect concurrently
output = {} # For printing purposes
# Spawning threads to scan ports
# 先扫10000个端口
for i in range(10000):
t = threading.Thread(target=TCP_connect, args=(host_ip, i, delay, output))
threads.append(t)
# Starting threads
for i in range(10000):
threads[i].start()
# Locking the script until all threads complete
for i in range(10000):
threads[i].join()
# Printing listening ports from small to large
for i in range(10000):
if output[i] == 'Listening':
print(str(i) + ': ' + output[i])
def main():
host_ip = input("Please enter host IP: ")
# 超时抛出异常
delay = int(input("How many seconds the socket is going to wait until timeout: "))
scan_ports(host_ip, delay)
input("Press Any Key to Exit")
if __name__ == "__main__":
main()
常见的端口及服务
文件共享服务端口
端口号 | 端口说明 | 攻击方向 |
---|---|---|
21/22/69 | FTP/SFTP文件传输协议 | 允许匿名上传、下载、爆破和嗅探操作 |
2049 | NFS服务 | 配置不当 |
139 | Samba服务 | 爆破、未授权访问、远程代码和执行 |
389 | LDAP目录访问协议 | 注入、允许匿名访问、弱口令 |
远程连接服务端口
端口号 | 端口说明 | 攻击方向 |
---|---|---|
22 | SSH远程连接 | 爆破、SSH隧道及内网代理转发、文件爆破 |
23 | telnet远程连接 | 爆破、嗅探、弱口令 |
3389 | RDP远程桌面连接 | shift后门(windows server2003一下的系统)爆破 |
5900 | VNC | 弱口令爆破 |
5632 | PcAnywhere远程控制服务 | 抓密码代码执行 |
web应用服务端口
端口号 | 端口说明 | 攻击方向 |
---|---|---|
80/443/8080 | 常见的web服务端口 | Web攻击、爆破、对应服务器版本漏洞 |
7001/7002 | Weblogic控制台 | Java反序列化、弱口令 |
8080/8089 | Jboss/resin/jetty/Jenkins | 反序列化、控制台弱口令 |
4848 | Glassfish控制台 | 弱口令 |
1352 | Lotus domino邮件服务 | 弱口令、信息泄露、爆破 |
10000 | Webmin-web控制面板 | 弱口令 |
9090 | Websphere控制台 | Java反序列化、弱口令 |
数据库服务端口
端口号 | 端口说明 | 攻击方向 |
---|---|---|
3306 | MySQL | 注入、提权、爆破 |
1433 | MSSQL数据库 | 注入、提权、SA弱口令 |
1521 | Oracle数据库 | TNS爆破、注入、反弹shell |
5432 | PostgreSQL数据库 | 爆破、注入、弱口令 |
27017/27018 | MongoDB | 爆破、未授权访问 |
6379 | Redis数据库 | 可尝试未授权访问、弱口令爆破 |
5000 | Sysbase/DB2数据库 | 爆破、注入 |
邮件服务端口
端口号 | 端口说明 | 攻击方向 |
---|---|---|
25 | SMTP邮件服务 | 邮件伪造 |
110 | POP3协议 | 爆破、嗅探 |
143 | IMAP协议 | 爆破 |
网络常见协议端口
端口号 | 端口说明 | 攻击方向 |
---|---|---|
53 | DNS域名系统 | 允许区域传送、DNS劫持、缓存投毒、欺骗 |
67/68 | DHCP服务 | 劫持、欺骗 |
161 | SNMP协议 | 爆破、搜集目标内网信息 |
特殊服务端口
端口号 | 端口说明 | 攻击方向 |
---|---|---|
2181 | Zookeeper服务 | 未授权访问 |
8069 | Zabbix服务 | 远程执行、SQL注入 |
9200/9300 | ElasticSearch服务 | 远程执行 |
11211 | Memcached服务 | 未授权访问 |
512/513/514 | Linux Rexec服务 | 爆破、rlogin登录 |
873 | Rsync服务 | 匿名访问、文件上传 |
3690 | SVN服务 | SVN泄露、未授权访问 |
50000 | SAP Management Console | 远程执行 |
工具扫描
NMAP
1)扫描主机(Host Discovery)
2)扫描端口(Port Scanning)
3)探测操作系统、软件版本 (Operating System Detection、Version Detection)
kali中自带namp
使用方式:
#简单扫描
nmap -sP 192.168.142.137
#指定端口或范围扫描:
nmap -p0-65535 192.168.142.137
#探测操作系统:
nmap -O 192.168.142.137
#只进行主机发现,不进行端口扫描
nmap -sn 192.168.40.195/24
IP后面的 /24是什么意思?
掩码的位数。
子网掩码8位,11111111.00000000.00000000.00000000
代表:255.0.0.0(A类IP地址)
子网掩码16位,11111111.11111111.00000000.00000000
代表:255.255.0.0(B类IP地址)
子网掩码24位,11111111.11111111.11111111.00000000
代表:255.255.255.0(C类IP地址)
旁站:和目标网站在同一台服务器但端口不同的其他网站。
C段 :和目标服务器IP处在同一个C段的其它服务器。192.168.25.xx
在线扫描
http://coolaf.com/tool/port
CMS指纹识别
什么是指纹识别
通过关键特征,识别出目标的CMS系统、服务器、开发语言、操作系统、CDN、WAF的类别版本等等。
- 1、CMS信息:比如Discuz、织梦、帝国CMS、PHPCMS、ECshop等;
- 2、前端技术:比如HTML5、jquery、bootstrap、Vue、ace等;
- 3、开发语言:比如PHP、Java、Ruby、Python、C#等;
- 4、Web服务器:比如Apache、 Nginx、IIS、lighttpd等;
- 5、应用服务器:比如Tomcat、Jboss、Weblogic、Websphere等;
- 6、操作系统信息:比如Linux、win2k8、win7、Kali、Centos等;
- 7、CDN信息:是否使用CDN,如cloudflare、帝联、蓝讯、网宿、七牛云、阿里云等;
- 8、WAF信息:是否使用WAF,如D盾、云锁、宝塔、安全狗、360等
指纹识别的思路
通过特定的文件代码找到特定的特征
-
版权信息:在底部,在标题,在源码找
-
特定文件MD5值
-
查看网页源代码
-
通过特定文件分析
网站目录下都有一个robots.txt文件,用来设置搜索引擎可不可以爬取到该网站的规则
指纹识别的工具
kali中自带的工具whatweb
whatweb -v www.discuz.net
浏览器插件:
whatruns
wappalyzer
在线网站:
http://whatweb.bugscaner.com/
http://finger.tidesec.com/
工具
御剑指纹扫描器(需要.NET Framework)
Test404轻量CMS指纹识别 v2.1
另外kali中可直接安装
cmseek -u www.coolshell.cn //很强大
CDN 指纹识别
CDN指纹识别思路
1、超级ping
2、历史DNS
3、通过子域名查询IP
4、国外主机解析
5、其他
CDN指纹识别工具
- ping
- nslookup
- 超级ping
- ldb(load balance detector)
国内:
http://cdn.chinaz.com/
国外:
https://www.cdnplanet.com/tools/cdnfinder/
脚本:
https://github.com/boy-hack/w8fuckcdn/
https://github.com/3xp10it/xcdn
WAF指纹识别
什么是WAF
Web Application Firewall Web 应用防火墙
过滤HTTP/HTTPS的请求
WAF作用
- SQL Injection (SQLi):阻止SQL注入
- Cross Site Scripting (XSS):阻止跨站脚本攻击
- Local File Inclusion (LFI):阻止利用本地文件包含漏洞进行攻击
- Remote File Inclusione(RFI):阻止利用远程文件包含漏洞进行攻击
- Remote Code Execution (RCE):阻止利用远程命令执行漏洞进行攻击
- PHP Code Injectiod:阻止PHP代码注入
- HTTP Protocol Violations:阻止违反HTTP协议的恶意访问
- HTTPoxy:阻止利用远程代理感染漏洞进行攻击
- Sshllshock:阻止利用Shellshock漏洞进行攻击
- Session Fixation:阻止利用Session会话ID不变的漏洞进行攻击
- Scanner Detection:阻止黑客扫描网站
- Metadata/Error Leakages:阻止源代码/错误信息泄露
- Project Honey Pot Blacklist:蜜罐项目黑名单
- GeoIP Country Blocking:根据判断IP地址归属地来进行IP阻断
常见WAF厂商
各种云:阿里云、腾讯云、华为云、百度云……
安全狗、宝塔、360、知道创宇、长亭、安恒……
宝塔:
安全狗:
腾讯云:
阿里云:
WAF指纹识别思路
- 额外的cookie;
- 任何响应或请求的附加标头;
- 响应内容(如果被阻止请求);
- 响应代码(如果被阻止请求);
- IP地址(云WAF);
- JS客户端模块(客户端WAF)
指纹库:
https://github.com/CSecGroup/wafid/blob/master/finger.xml
如何触发拦截
使用特定攻击特征字符串
xsstring = '<script>alert("XSS");</script>'
sqlistring = "UNION SELECT ALL FROM information_schema AND ' or SLEEP(5) or '"
lfistring = '../../../../etc/passwd'
rcestring = '/bin/cat /etc/passwd; ping 127.0.0.1; curl google.com'
xxestring = '<!ENTITY xxe SYSTEM "file:///etc/shadow">]><pwn>&hack;</pwn>'
WAF指纹识别工具
kali自带
wafw00f https://www.12306.cn
namp
nmap www.12306.cn --script=http-waf-detect.nse
sqlmap
sqlmap -u "xxx.com?id=1" --identify-waf
其他
https://github.com/0xInfection/Awesome-WAF
搜索引擎收集信息
google高级搜索Google Hacking
运算符
完整匹配:“”
剔除不需要的内容: -
任意字符:批发 OR 特价
高级语法
功能 | 语法 |
---|---|
只搜索某个网站的内容 | site:zhihu.com |
网页的内容包括 | allintext: Powered by Discuz intext: Powered by Discuz |
标题出现 | allintitle: 后台登录 intitle: 后台登录 |
URL地址包括 | allinurl: admin.php inurl: index.php?id=1 |
文件类型指定 | filetype:pdf |
可以结合使用
google语法库:
https://www.exploit-db.com/google-hacking-database
https://github.com/BullsEye0/google_dork_list
网络空间搜索引擎
网络空间包含网络设备如主机,摄像头,打印机等,空间搜索引擎可以搜索到这些设备
最早的网络空间搜索引擎Shodan
shodan.io
付费功能可以在淘宝买会员得到
kali中可以直接使用
入侵示例
ld246.com/article/1544157102767
工具:
https://github.com/jakejarvis/awesome-shodan-queries (语法)
https://github.com/random-robbie/My-Shodan-Scripts (python脚本)
命令:
命令 | 英文 | 解释 |
---|---|---|
alert | Manage the network alerts for your account | 管理账户的网络提示 |
convert | Convert the given input data file into a… | 转换输入文件 |
count | Returns the number of results for a search | 返回查询结果数量 |
download | Download search results and save them in a… | 下载查询结果到文件 |
honeyscore | Check whether the IP is a honeypot or not | 检查 IP 是否为蜜罐 |
host | View all available information for an IP… | 显示一个 IP 所有可用的详细信息 |
info | Shows general information about your account | 显示账户的一般信息 |
init | Initialize the Shodan command-line | 初始化命令行 |
myip | Print your external IP address | 输出用户当前公网IP |
parse | Extract information out of compressed JSON… | 解析提取压缩的JSON信息,即使用download下载的数据 |
scan | Scan an IP/ netblock using Shodan | 使用 Shodan 扫描一个IP或者网段 |
search | Search the Shodan database | 查询Shodan 数据库 |
stats | Provide summary information about a search… | 提供搜索结果的概要信息 |
stream | Stream data in real-time | 实时显示 |
用法示例:
shodan host 172.67.167.88
shodan count apache
shodan count vuln:cve-2019-0708
shodan search --fields ip_str,port,org,hostnames microsoft iis 6.0
shodan stats port:445 SMB
shodan download --limit -1 test net:172.67.167.88/24
其他工具
-
Censys
censys.io
不收费,收录了证书
-
ZoomEye-钟馗之眼
网络空间资源测绘,搜索引擎是Xmap
-
Fofa
fofa.so
https://www.knowledgenile.com/blogs/top-osint-tools-2021/
https://securitytrails.com/blog/osint-tools
基于网络空间所有引擎的工具
https://github.com/knownsec/Kunyu
https://github.com/coco413/DiscoverTarget
https://github.com/saucer-man/saucerframe
目录扫描
什么是目录扫描
网站存在一些敏感文件比如配置文件,数据文件,敏感目录等,是不允许访问的,但是如果配置不当等原因,就会造成敏感文件泄露,一般会泄露的信息有数据库的用户名和密码,服务器的用户名密码,网站源码,数据库文件等。
为什么会造成泄露,多数原因是因为配置不当的问题,还有本地文件包含可以读取任意文件等
常见的敏感目录和文件
-
robots.txt:禁止搜索引擎搜索到的目录,可以试试没准可以访问,里面还有cms指纹信息
-
sitemap.xml:指导搜索引擎搜索到的目录
-
网站的备份文件
-
后台登录的目录:/admin
-
安装包(源码):1、非开源的商用的做代码审计找漏洞
2、1.zip
-
文件上传的目录:/upload
-
mysql的管理界面:/phpadmin
-
程序的安装路径:/install 可以重新安装网站
-
php探针:phpinfo 雅黑php探针
-
网站的文本编辑器:富文本编辑器,可能存在文件上传等漏洞,可以搜索哪些编辑器存在漏洞
-
Linux:/etc/passwd 包含了账户密码等信息
/etc/shadow 包含了密码等信息,使用了SHA512加密
/etc/sudoers 哪些用户可以执行sudo命令
-
MacOS:.DS_Store 目录结构及内容——ds_store_exp
-
.swp文件:Linux系统临时备份的文件
-
目录穿越
-
tomcat WEB-INF:1、WEB-INF/web.xml : Web应用程序配置文件, 描述了servlet和其他的应用组件配置及命名规则.
2、WEB-INF/database.properties : 数据库配置文件
3、WEB-INF/classes/ : 一般用来存放Java类文件(.class)
4、WEB-INF/lib/ : 用来存放打包好的库(.jar)
5、WEB-INF/src/ : 用来放源代码(.asp和.php等)
Java开发中常见,有个字典:
github.com/BlackFan/WEB-INF-dict/blob/master/web-inf.txt
目录扫描思路
直接在域名后拼接
扫描方法:
- 递归
- 字典
- 暴力破解
- 爬虫
- fuzz模糊测试
kali中自带:
- dirb
- dirbuster
其他:
- 御剑
- burp suite
- dirbrute
- dirsearch
- dirmap
- wfuzz
Git泄露
版本控制系统VCS
在创建一个项目的时候经常需要修改代码,进行版本的更替,那么修改一个代码如果想换回之前的代码就需要再次修改,这时候我们就想能不能创建一个仓库,把修改过的代码按照版本存放在里面,然后修改的时候寻找对应的版本信息就可以修改,也就是早期的本地VCS,但是一个项目往往是多人协作的,也就是说没有只在本地电脑上弄一个仓库是不行的,那个就需要建立一个远程的仓库可以一起存放在上面,这样就有了远程的版本控制系统,也就是集中化的VCS——CVCS,代表有CVS\SVN等,于是就想到远程的服务器损毁了那么整个项目就没了,这时候就要去中心化,采用分布式CVS——DVCS,也就是现在多数的版本控制系统,特点是每一个客户端都保存了其历史的提交记录,然后集中提交给远程仓库,代表有github、gitlab、码云。其中git是使用最广泛的一种协议,git是Linux的创始人开发的。
为什么会导致泄露
git的存放机制是,先在工作区创建文件,编辑后放入暂存区,保存后放入git分支master(在本地仓库),接着提交到远程仓库
git init //将仓库交给git管理
git add 1.txt //添加到暂存区
git commit -m "这里是注释" //交给git分支并添加注释
git push //交给远程仓库
如果把私有仓库/隐私文件提交到了github,或者部署项目的时候,不小心把 .git 文件一起打包进去,放到web网站的目录下,就会造成git泄露,通过仓库可以获得的有用的信息有哪些:
- 编译的.class、.java等的源文件等
- .git/logs/HEAD:存储了git的历史log信息,可以找到历史的commit项
- .git/index:缓存git add的文件,暂存区
- .git/refs/stash:使用git stash命令时把代码存入缓存区
- .git/refs/heads/master:记录了master的commit的hash,拿到hash可以把最后一个版本的所有内容给还原出来。
- .git/objects/pack/.pack:压缩文件
GitHub搜索技巧
- kali in:file:搜索文件中包含kali的代码
- kali in:path :搜索路径中包含kali的代码
- kali in:path,file:搜索路径、文件中包含kali的代码
- shodan language:python:搜索关键字shodan,语言为python的代码
- filename:config.php language:php:搜索文件名为config.php,且语言为php
- kali topics:>=5 :标签数量大于等于5的
- kali size:<1000 :文件小于1KB的
- kali stars:10…50:star大于10小于50的
- kali pushed:>2021-08-15:搜索在2021年8月15日之后提交的
- kali pushed:2021-07-01…2021-08-01 :搜索在此区间
- kali created:>=2021-06-01 :创建时间
- kali pushed:<2021-08-01 -language:java :搜索在2020年8月1日前push代码且排除java语言
Git泄露的利用方式
找到.git文件
- 目录扫描
- robots.txt
- 搜索引擎搜索:“intitle:Index of /.git”
把.git下载到本地
工具:
最常用的:https://github.com/BugScanTeam/GitHack——python GitHack.py xxx.com/.git/
https://github.com/lijiejie/GitHack
https://github.com/wangyihang/githacker
https://github.com/WangWen-Albert/JGitHack:图形化界面
用git的命令获取内容
- git log:获取提交记录
- git reset --hard [log hash]:恢复到某个版本
- git diff:对比版本差异
- 自动化工具:https://github.com/gakki429/Git_Extract