[TOC]

0x00 激励自己

@ringzero : 安全技术学习,承认自己的弱点不是丑事。
@ringzero : 学会如何学习,培养学习习惯,锻造学习力。
@ringzero : 为了能到远方,脚下的每一步都不能少。

@不考弱智知识点,不设置不必要的障碍, 给做题人方向上的引导

0x01 杂谈

知识面,决定看到的攻击面有多广。
知识链,决定发动的杀伤链有多深。

在进行学习基础知识的时候,只有对原理了然于心,才能更好的为以后所学打下坚实的基础;

学习方法
我是谁? 我来着哪里? 我要去往何处?
类似我们在学一门知识的时候,如何快速的掌握并且使用它?
它叫什么? 它的发展历程和特点? 它有什么作用以及如何使用?


学习工具
Wiz笔记:为知笔记 Docker 服务器端用了 Moby 容器系统,构架在 Node.js、MySQL、Java、Redis、Nginx 之上,容器大小为 2.521 GB。

#第一次运行镜像,因为需要下载docker镜像,并且初始化数据,速度要慢一些请耐心等待。(根据网络状况,可能需要10分钟或者更长时间。)
mkdir /root/wizdata
docker run --name wiz -it -d -v ~/wizdata:/wiz/storage -v /etc/localtime:/etc/localtime -p 80:80 -e SEARCH=true wiznote/wizserver

#修改启动参数,并重新启动服务,例如修改映射端口,或者设置是否启动搜索服务:
docker stop wiz
docker rm wiz
docker run --name wiz -it -d -v ~/wizdata:/wiz/storage -p 80:80 -e SEARCH=true wiznote/wizserver

#更新服务命令行:
docker stop wiz
docker rm wiz
docker pull wiznote/wizserver:latest
docker run --name wiz -it -d -v ~/wizdata:/wiz/storage -p 80:80 -e SEARCH=true wiznote/

#针对于时区不对的情况
docker run --name wiz -it -d -v ~/wizdata:/wiz/storage -p 8088:80 -v /etc/localtime:/etc/localtime -e SEARCH=true wiznote/wizserver

#系统重新启动后,重新启动服务
docker start wiz

在下载完成后,第一次启动镜像大概需要2-3分钟时间。然后打开浏览器,在地址栏里面输入:http://localhost,如果服务正常,则会出现下面的界面


学习之路
基础课程

  • 计算机组成原理 / 计算机系统结构
  • 操作系统原理
  • 通信技术原理

WeiyiGeek.

硬件(Hardware)

操作系统(OS)

Windows:
- Server
- xp / 7 / 8 / 10(主要是使用)

Linux:
- Redhat / CentOS
- Ubuntu / Debian / Kail / Deepin


Unix:
- Mac Pro(买不起)

网络通信(Network)

  • TCP/IP详解

编程开发(Devlepment)

Servlet/JSP/反射机制
Spring4/Struts2/Hibernate5/MyBatis3

应用服务(Application)
数据(Database)

SQL(关系型)
• MySQL
• MSSQL
• Oracle
• PostgreSQL

NoSQL
• MongoDB

内存缓存
• Redis
• Memcache

重新理解WEB安全技术

注入漏洞
• SQL注入

  • 本质原因:程序没有有效地区分代码和数据
  • 防御手段:预编译(PHP的PDO库)/参数化查询, 存储过程, 白名单方式验证输入, 转义用户输入
    • 命令注入
    • 表达式/代码注入
    • SSRF网络注入
SQL 存储过程 ORM Hibernate
Mybatis XML LDAP SSI
代码注入 命令注入
HQL XXE

WeiyiGeek.

文件
• XXE
• 文件包含
• 任意文件读取
• 任意文件上传

信息泄露
• 配置文件
• 测试文件
• 备份文件
• 接口暴露
• 心脏滴血

拒绝服务
暴力破解

Session Fixation

二进制漏洞
• 缓冲区溢出
• 堆/栈溢出
• 内存泄露

逻辑漏洞
• 穷举遍历
• 水平越权
• 流程乱序
• 数据篡改
• 未授权访问

前端漏洞
• 跨站脚本 XSS(Cross Site Scripting)

- XSS 攻击是一种 Web 应用程序的漏洞,来自用户的不可信数据在没有验证情况下被应用程序进行了处理,没有正确转义(escape)或编码(encode)反射回浏览器,导致浏览器引擎执行了非预期代码。
- XSS分类:
  - 存储型XSS / 持久型
  - 反射型XSS / 非持久型
  - DOM based XSS 
XST:Cross Site Tracing(XST)
同源策略(SOP)
跨域资源共享(CORS)
内容安全策略(CSP)
X-XSS-Protection
X-Frame-Options

WeiyiGeek.

• CSRF 跨站请求伪造:

  • 原理: CSRF是一种Web应用攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保护之下的操作。n本质原因:请求操作中所有参数都可被攻击者猜测到
    WeiyiGeek.
  • 防御:
    • Token的生成一定要足够随机,需要使用安全的随机数生成器生成Token
    • Token和Session绑定,用户A的Token只能用于A用户的Session
    • Token应该有生命周期,需要有超时机制
    • 不同的Form使用不同的Token值
    • 所有敏感的操作,都使用POST方式
    • 检查Referer值,拒绝来自其他域的请求
    • 重要操作做二次认证,如短信认证,二次密码认证,验证码等

跨站请求伪造(CSRF) VS 跨站脚本攻击(XSS)
n XSS直接作用在客户端浏览器;CSRF直接作用在服务端;
n XSS可执行用户任何操作(获取到用户cookie后);CSRF只能执行特定操作;
n CSRF需在用户登陆情况下完成攻击;XSS可以在客户端做任何Js脚本可以做的事情,即使用户不在登陆状态;

Jsonp
json劫持
跨域资源共享

• ClickJacking

自动化开发栈

Python
PHP
GoLang https://github.com/golang-china/gopl-zh / https://tour.golang.org/welcome/1
C/C++
MySQL
MongoDB
Redis
ElasticSearch
精通SQL查询
开发框架
分布式开发
正则表达式

横向知识栈

汇编ASM

调试技术 http://boolan.com/course/64 / http://boolan.com/course/11
移动开发

数据收集查询

ELK Stack
ElasticSearch
Logstash
Kibana

不安全的直接对象引用

目录穿越
本地文件包含
远程文件包含
越权

n使用危险的HTTP服务,如PUT, DELETE, TRACE

哈希长度拓展攻击
HSTS
CA
SSL/TSL
中间人攻击
PKI

功能级访问控制缺失

  • 禁用JavaScript查看订单

安全开发:
消除直接对象引用

重定向和转发的区别

调用方式:
重定向-response.sendRedirect(“new.jsp”);
转发-request.getRequestDispatcher(“new.jsp”).forward(request, response);
本质区别:
重定向-客户端行为
通过重定向,客户端发起第二次请求
n响应码300-307,通常为302
危害:钓鱼攻击
转发-服务端行为
服务端内部转发,再将结果返回给客户端
危害:绕过控制访问检测,未授权访问页面 (SSRF)