网络安全-B-站教程2
黑客入侵流程和信息收集
目标
一些网站信息, whois
信息.
SSL 证书的收集.
开放端口探测.
网站架构. 浏览器插件查找.
敏感文件, 目录探测.
社交网站/平台.
方法
踩点 -> 扫描 -> 查点 -> 访问 -> 提权 -> 窃取信息 -> 掩盖踪迹 -> 创建后门 -> 拒绝服务
技术
命令如, whoami
, ping
, SNMP
密码嗅探. 密码爆破.
日志删除. 清除访问日志.
流氓工具, 来开后门.
工具
Kali Linux 下的自带工具集.
命令如: dig
, dnsmap
, nslookup
, ping
, fping
, nmap
, AutoScan
, amap
, meta
, python
, 字典, DDos 工具.
信息收集
先用扫描器扫描. 如:
- IBM, AppScan
- HP, WebInspect
- 启明星辰, 天镜
- 安恒, 明鉴
- 绿盟, WVSS/RSAS
- 其他, Nmap 等
DNS 传送漏洞 (域名探测过程).
域名收集 根据主域名, 可以获得二极, 三级域名. 可以通过 Kali 内置的 dnsenum
. 使用如:
-f
, 指定一个文件, 如dns.txt
(字典爆破)--dnsserver
, 指定域名解析服务器, 如114.114.114.114
.
通过域名信息, 可以推断出一些开放的端口信息. 以及一些 DNS 注册信息.
正向解析, 域名找 IP.
反向解析, IP 找域名. 可通过 dig
, 或 nslookup
等命令.
whois
命令可以用来获取注册信息, 如:
1 |
|
网站备案信息收集 , 如通过 www.beianbeian.com
网站.
SSL 证书收集, 如通过 https://myssl.com/ssl.html
APP 信息提取 , 如通过抓包, 反编译, 暴力破解 工具如 demon.
DNS 更新记录收集, 如访问 www.dnsdb.io
第三方网站的收集操作, 天眼查, 威胁情报网站, 漏洞银行, 钟馗之眼, 360 补天, 微步在线.
敏感信息收集, Web 源代码泄漏
Web 源代码泄漏, 如:
- git 源码泄漏
- svn 源码泄漏
- DS_Store 文件泄漏
- WBE-INF/web.xml 泄漏
- 网络备份文件泄漏
- github 泄漏
前后端分离项目, 接口信息泄漏, 且接口未作限制.
利用社会工程学.
百度网盘, 信息收集. pan.baidu.com
小米的导航页面: https://sec.xiaomi.com/friends
敏感信息收集工具汇总
网盘搜索: www.pansou.com
社工泄漏: www.uneihan.com
源码搜索: searchcode.com
, gitee.com
, gitcafe.com
, code.csdn.net
, 钟馗之眼
, 天眼查
获取到的邮箱账号可以用来推测邮箱的命名规则. 可以用来后期登陆子系统. 也可以用来爆破密码. 弱口令, 可以通过手工也可以通过工具收集.
内网攻击, 网站劫持.
邮箱收集工具: theHarvester.
敏感信息收集, 历史漏洞收集+工具信息收集
历史信息收集, 如:
- 360 补天.
- 教育行业漏洞报告平台 –
src.edu-info.edu.cn
工具信息收集, 如:
- 7Kbscan
指纹识别, WAF, CDN 识别
这里的指纹不是手的指纹识别.
可加入端口扫描, 敏感文件扫描的操作.
工具, 如:
- 御剑 Web 指纹识别系统, 可得知网站用的框架信息以及版本信息, 从而查询其是否存在漏洞, 进行攻击
- 在线指纹识别工具,
whatweb.bugscaner.com
,www.yunsee.cn/finger.html
WAF (Web Application Firewall) 指网络防火墙的识别, 可在 Github 上找, 如 EnableSecurity/wafw00f
CDN (Content Delivery Network) 识别可在 Github 上查找, 如 xcdn
区块链漏洞平台: www.bugx.org
CNVD 国家信息安全漏洞平台: www.cnvd.org.cn
漏洞银行: www.bugbank.cn
360 补天平台 www.butian.net
.
国外的一些平台:
www.hackerone.com
www.0day.today
routerpwn.com
cve.mitre.org
威胁情报:
- 安全数据交流平台, 如华为安全情报
- 被黑站点统计, 如
www.hacked.com.cn
社工库, 如:
- 微信伪造
- 任意邮箱发送
- 临时邮箱
- 邮箱池群
- 社工库
GoogleHack.
资产梳理
梳理的目的是为了判断这些域名是否都存活. 存活就继续进行 IP 地址确认.
根据 IP 地址的分布, 确定企业的公网网段.
Google 优势劣势
优点:
- 只要有一台能访问 Google 的设备, 部署相对简单.
- 资源丰富
劣势:
- 搜索关键词多, 记忆复杂
- 不能离线
Nmap 和实战案例
Nmap 是一个网络连接端口扫描软件. 用来扫描电脑上开发的网络连接端口. 确定哪些服务运行在哪些连接的端口, 并且推断计算机运行的操作系统.
首先需要主机发现. 再扫描. nmap 支持多种发现主机时发送的包.
似乎没有单独的 -s
参数, 只有 -sL
等, 这里的 s
为 “scan”, L
为 “List”. 即列表扫描.
如:
1 |
|
SQL 注入基础
查看 SQL 排名: https://db-engines.com/en/ranking
查看 MySQL 中的用户:
1 |
|
(实测需要 root 权限)
这条语句中的 mysql.user
表明 mysql
这个数据库里面有一个表叫 user
.
几个重要的库:
infomation_schema
库中的重要表有:
COLUMNS
SCHEMATA
TABLES
注释, 使用 --
注意有一个空格. 或 #
创建用户, CREATE USER test@test IDENTIFIED BY "123" with_native_password;
select now();
可以查看时间.
select database();
可以查看当前选择的是哪个库.
select VERSION();
查看版本.
select USER();
查看当前用户.
select @@datadir
查看数据路径.
select @@basedir
查看 mysql 安装路径.
select @@version_compile_os
查看 mysql 安装的系统.
创建库: CREATE DATABASE test CHARSET utf8mb4;
创建表: CREATE TABLE t1 (data1 INT);
删除表: DROP TABLE t1;
修改表: ALTER TABLE t1 ADD NAME VARCHAR(32);
插入数据: INSERT INTO t1 VALUES (1, "first"), (2, "second"), (3, "third");
可利用 UNION
来确定数据库一个表中有多少个字段.
Web 程序层架构 :
- 界面层, 用户电脑, 前端服务器
- 业务逻辑层, 后端服务器
- 数据访问层, SQL 服务器
如果访问页面时, 出现 You have an error in your SQL syntax
这类报错, 该页面可以推断出有 SQL 注入漏洞.
靶场环境 bwapp
.
用 POST
方法请求时, url 中不会出现查询.
cookies
可以用来判断登录状态.
工具: Postman
可以通过找到 database -> tables -> columns
将一个 column 中的所有内容拼接为一个字符串:
1 |
|
密码加密为 cmd5
, 上 cmd5.com
可破解.
判断 SQL 注入点
经典的单引号判断法: 在查找界面输入 ,
, 若报错 (引号个数不匹配导致报错) 则可以判断有 sql 注入漏洞. (缺点: 必须要有回显才能判断)
通常注入类型分为两种类型, 一种字符串类型, 一种数字类型, 判断如:
select * from table_name where something = '1' and 1 = 1
select * from table_name where something = 1 and 1 = 1
SQL 注入盲注 Injection Blind
SQL 注入类型:
- UNION query injection
- Boolean-based blind SQL injection, 如
or 1 = 1
, 这是一个衡为真的条件 - Error-based SQL injection
- Time-based blind SQL injection, 如
and sleep(10)
,sleep
是每查询一条sleep
10 秒 - Stacked queries SQL injection, 注入多条语句
常见函数:
substr
,mid
, 如select substr('test', 1, 1)
返回t
, 即从第一个字符开始取, 取一个.length
, 如select length('test')
返回 4ascci
,ord
, 如select ascii('test')
, 返回第一个字符的 ASCII 码count
, 如select count(*) from test
, 有多少条数据就返回几left
, 如select left('test', 2)
, 返回e
, 从最左边取几个
判断数据库名称长度, 如:
1 |
|