知识基础

一、基础知识

1.域名

internet上某台计算机或机组的名称

顶级域名

com

cn

二级域名、多级域名

国际顶级域名下的二级域名:.microsoft.com

国家顶级域名下的二级域名:.com.cn

2.DNS

主机域名转化为ip地址,属于应用层协议,使用UDP传输

域名系统(Domain Name System):域名和IP地址相互映射的一个分布式数据库,使用UDP端口53,对每一级域名长度限制是63个字符,域名总长度不超过253个字符

当我们向DNS服务器发起解析域名的请求时,DNS服务器首先会查询自己的缓存中有没有该域名,如果缓存中存在该域名,则可以直接返回IP地址。如果缓存中没有,服务器则会以递归的方式层层访问。

例如:我们要访问www.baidu. com,首先我们会先向全球13个根服务器发起请求,询问com域名的地址,然后再向负责com域名的名称服务器发送请求,找到baidu.com,这样层层递归,最终找到我们需要的IP地址。

  • 主机向本地域名服务器查询一般递归查询
  • 本地域名服务器向根域名服务器查询一般迭代查询

1)当用户输入域名时,浏览器先检查自己的缓存中是否 这个域名映射的ip地址,有解析结束。
2)若没命中,则检查操作系统缓存(如Windows的hosts)中有没有解析过的结果,有解析结束。
3)若无命中,则请求本地域名服务器解析( LDNS)。
4)若LDNS没有命中就直接跳到根域名服务器请求解析。根域名服务器返回给LDNS一个 主域名服务器
地址。
5) 此时LDNS再发送请求给上一步返回的gTLD( 通用顶级域), 接受请求的gTLD查找并返回这个域名
对应的Name Server的地址
6) Name Server根据映射关系表找到目标ip,返回给LDNS
7) LDNS缓存这个域名和对应的ip, 把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存
中,域名解析过程至此结束

本地HOSTS与DNS关系

Hosts在本地将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当我们访问域名时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。
Hosts地址:C:\Windows\System32\drivers\etc\hosts

作者:黑战士安全 https://www.bilibili.com/read/cv19754086?spm_id_from=333.999.0.0&jump_opus=1 出处:bilibili

CDN

CDN是什么

Content Delivery Network:构建在网络数据上的分布式内容分发网络,提高系统响应速度,也可以一定程度地拦截攻击。

举例来说,某网站的服务器在A地,E地的用户想要获取服务器的数据,需要跨越很长的距离。这时候的传输速度和路由转发因素,导致访问速度缓慢,所以,如果在E地建立一个CDN服务器,其上缓存了A地服务器的一些数据,那这样的话用户只需访问E地的CDN服务器就能获取相关信息。

CDN工作过程

  1. dns请求当地local DNS

  2. 当地local DNS递归的查询服务器的gslb(全局负载均衡;CDN系统总是希望用距离用户最近的设备为其提供服务,这也需要在不同地域部署多个节点。GSLB系统就是解决这个问题的。

    版权声明:本文为CSDN博主「dahuang1016」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/dahuang1016/article/details/105928932)

  3. 服务器根据local DNS 分配最佳节点,返回ip

  4. 用户获得最佳接入ip,访问最佳节点。

  5. 如果该节点没有用户想要获取的内容,则通过内部路由访问上一节点,直到找到文件或到达源站为止。

  6. cdn节点缓存该数据,下次请求该文件时可以直接返回。

————————————————
版权声明:本文为CSDN博主「码上腾飞」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Frankltf/article/details/108820315

CDN与DNS关系

cdn的就近访问,那就需要知道用户所在位置,好给他分配最优的CDN节点。**==所以需要用到DNS定位==。一般的调度方式是,如果调度服务器看到用户使用了E地的LDNS(本地DNS)服务器,就会认为该用户来自E地**,然后给该用户分配了E地的CDN服务器,让他去访问。

当然了,其缺点在于,A地的用户使用了E地的LDNS的话,被分配的会是E地的CDN。

所以引入了http调度

其原理为:当用户访问我们的服务器时,服务器先分析用户的ip地址,然后服务器给用户返回一个302重定向,将离用户最近的服务器存在location中,用户再去请求这个cdn服务器就能得到最佳的cdn节点。

不足之处在于,其有一次额外的htttp访问,首次访问的延时较高,访问些小文件有点得不偿失。所以一般是dns先定位,http的方式来调整偏差。

常见DNS攻击

  • 缓存投毒:它是利用虚假Internet地址替换掉域名系统表中的地址,进而制造破坏。
  • DNS劫持:是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能访问或访问的是假网址。(针对面较广)
  • 域名劫持:域名劫持就是在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则直接返回假的IP地址或者什么也不做使得请求失去响应,其效果就是对特定的网址不能访问或访问的是假网址。(针对面窄一点)
  • DNS DDOS攻击:通过控制大批僵尸网络利用真实DNS协议栈发起大量域名查询请求,利用工具软件伪造源IP发送海量DNS查询,发送海量DNS查询报文导致网络带宽耗尽而无法传送正常DNS查询请求。

作者:黑战士安全 https://www.bilibili.com/read/cv19754086?spm_id_from=333.999.0.0&jump_opus=1 出处:bilibili

3.后门

后门是什么

通常指那些绕过安全性控制而获取对程序或系统访问权的程序方法。
在软件的开发阶段,程序员常常会在软件内创建后门程序以便可以修改程序设计中的缺陷。

后门的意义

可以更方便的链接到主机;在获取到主机权限的时候,后门可以充当命令控制台的角色

如果后门进入后遇到文件无权限,换目录

4.WEB

WEB的组成

  • 网站源码:分脚本类型,分应用方向
  • 操作系统:windows、linux
  • 中间件(搭建平台):apache iis tomcat nginx 等
  • 数据库:access mysql mssql oracle sybase db2 postsql 等

WEB相关漏洞

  • WEB 源码类对应漏洞:SQL 注入,上传,XSS,代码执行,变量覆盖,逻辑漏洞,反序列化等
  • WEB 中间件对应漏洞:未授权访问,变量覆盖…
  • WEB 数据库对应漏洞:弱口令,权限提升…
  • WEB 系统层对应漏洞:提权,远程代码执行
  • 其他第三方对应漏洞
  • APP 或 PC 应用结合类

作者:黑战士安全 https://www.bilibili.com/read/cv19754086?spm_id_from=333.999.0.0&jump_opus=1 出处:bilibili

信息敏感点

  • 敏感目录结构:数据库配置文件,后台目录,模版目录,数据库目录等

  • web脚本类型:ASP,PHP,ASPX,JSP,JAVAWEB 等脚本类型源码

  • 应用分类:社交,论坛,门户,第三方,博客等不同的代码机制对应漏洞

  • 开源,未开源问题,框架非框架问题,关于 CMS 识别问题及后续等

网站搭建相关知识

扫描时:域名访问一般只会指向某个目录(子目录)及其内部文件,而IP访问指向根目录,发现的内容更多。

f12网络数据包会有网站的信息(如中间站、系统等)

常见文件后缀解析

主要是类似于一句话木马的后缀限制,如果不行,就换个后缀,这个原理来自中间件的解析?

5.系统

识别操作系统

windows对大小写不敏感,ping值 ttl128左右;而linux敏感,ping值 ttl64左右

nmap -O ip

数据库层面

识别方式

  • nmap -O ip
  • nmap ip -p 端口,通过端口开发反推数据库

数据库常见漏洞类型与攻击

  • 弱口令
  • sql注入

常见数据库结构

  • ASP+Access
  • php+mysql
  • axpx+mssql
  • jsp+mssql,oracle
  • python+mongodb

服务器端口

  • 关系型数据库 –MySQL:3306 –SqlServer:1433 –Oracle:1521
  • NOSQL数据库 –MongoDB:27017 –Redis:6379 -memcached:11211

6.同源策略

为了不让浏览器的页面行为发生混乱,浏览器提出了“Origin”(源)这一概念,来自不同Origin的对象无法互相干扰。

对于JavaScript来说,以下情况被认为是同源与不同源的。

影响“源”的因素有:host(域名或IP地址,如果是IP地址则看做一个根域名)、子域名端口协议

两个网页具有相同的协议(比如http或https)、主机名和端口号。换句话说,只有当两个网页的协议、域名和端口完全相同,它们才被认为是同源的。

对于当前页面来说,页面内存放JavaScript文件的域并不重要,重要的是加载JavaScript页面所在的域是什么。

换言之,a.com通过以下代码:

<script src=http://b.com/b.js ></script>

img

加载了 b.com 上的b.js,但是b.js 是运行在a.com页面中的,因此对于当前打开的页面(a.com页面)来说,b.js的Origin 就应该是 a.com 而非 b.com

跨域访问方案的安全基础就是信任“JavaScript无法控制该HTTP头”

前端跨域技术

采取同源策略,浏览器可以有效地限制潜在的跨站点脚本攻击(XSS)和跨站请求伪造(CSRF)等安全威胁。

这样就引出了一个前端跨域技术。

1.JSONP(JSON with Padding)

JSONP是一种利用<script>标签的跨域技术。通过动态创建一个<script>标签,src属性指向包含回调函数的远程URL,远程服务器将数据包装在回调函数中返回。由于<script>标签不受同源策略的限制,因此可以在不同域之间进行跨域请求。

2.跨域资源共享(CORS)

CORS是一种基于HTTP头部的机制,允许服务器声明哪些源被授权访问其资源。通过在服务器端设置响应头部中的Access-Control-Allow-Origin字段,可以允许特定源的请求跨域访问。前端代码在发送请求时,浏览器会自动在请求头中添加Origin字段,服务器收到请求后会检查Origin字段,并决定是否允许跨域访问。

3.代理服务器

代理服务器是一种将客户端请求转发给目标服务器的中间服务器。

前端应用可以将跨域请求发送到同源的代理服务器上,然后由代理服务器再向目标服务器发送请求,获取响应后再返回给前端应用。通过这种方式,前端应用绕过了浏览器的同源策略限制。

4.WebSocket

WebSocket是一种在单个TCP连接上进行全双工通信的协议,可以在不受同源策略限制的情况下进行跨域通信。WebSocket建立的连接不受同源策略的限制,因此可以在不同源之间实现实时通信。

Cookie与DOM中的同源策略

在同源策略的限制,非同源站点不能够互相读取cookie,比如两个子站之间

但是,针对Cookie的同源策略可以指定请求包中的Set-Cookie:domain=,允许不同站点间互相访问Cookie

通过设置 domain 打破了浏览器对于 Cookie 的同源限制,可以通过子站点入手,通过子站获取子站的 Cookie

cookie 的同源策略不区分协议与端口

DOM同理

同源策略拓展

7.windows命令

cd

dir

net 查看网络Window服务,net start

netstat 显示网络连接的信息,包括显示活动的TCP连接、路由器和网络接口信息,是一个监控TCP/IP网络非常有用的工具,可以让用户得知系统中目前都有哪些网络连接正常。 netstat /?获得帮助

8.Cookie、Session、token

cookie与session都是客户端与服务器之间保持状态的解决方案

Cookie:存在于客户端,保存用户信息;

作用:

会话管理、个性化、追踪(用户行为)

位置:

内存(浏览器维护,浏览器关闭就消失);硬盘(有过期时间)

格式

Set-Cookie: "<name>=<value>[;domain=<domain_name>][;path=<some_path>][;expires=<date>][;<Max-Age>=<age>][;HttpOnly][;secure]"

session

工作原理是客户端登录完成之后,服务器会创建对应的 session,session 创建完之后,会把session 的 id 发送给客户端,客户端再存储到浏览器中。

这样客户端每次访问服务器时,都会带着
sessionid,服务器拿到 sessionid 之后,在内存找到与之对应的 session 这样就可以正常工作了。

Session:保存于服务端,服务器针对多用户,一个用户对应一个session

作用:跟踪会话

位置

cookie中的sessionid

或url重写

token

token:无状态支持跨域,有效防御csrf,解决session依赖于单个web服务器问题

是一个全局唯一的字符串,用来唯一识别一个客户端

原理

客户端在账户密码登录之后

服务端接收请求,验证账户密码,成功后,响应一个token

客户端接收到token,每次向服务器请求资源时,就会携带token过去

服务端验证token,有效则返回请求数据

JSON Web Token (JWT)

通常可以称为 Json 令牌,是RFC 7519 中定义的用于安全的将信息作为 Json 对象进行传输的一种规范,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息

一个JWT实际上就是一个字符串,它由三部分组成:头部、载荷与签名;一般针对jwt的攻击是针对载荷。

载荷部分:

一般添加用户的相关信息或其他业务需要的必要信息
不建议添加敏感信息,因为该部分在客户端可解密
进行base64编码,得到载荷

1
2
3
4
5
6
7
8
{ "iss": "JWT Builder", 
"iat": 1416797419,
"exp": 1448333419,
"aud": "www.example.com",
"sub": "aaa@example.com",
"Email": "aaa@example.com",
"Role": [ "admin", "user" ]
}

作用

认证、信息交换


9.注册表

定义

是microsoft windwos中的一个重要数据库,存放着各种参数,控制windows启动啊,硬件驱动程序装在啊,winddos应用程序的运行啊。

你比如具体到远程桌面控制的设置,不允许和允许两个选项,都可以通过在注册表找到相应值,更改值为0还是1,对应于允许还是不允许

包括你玩某个游戏,其界面的宽、高设置,在注册表都可以找到

数据结构

由项(或键)、子项和值构成,一个项就是分支中的一个文件夹;一个值是一个项的当前定义,由名称、数据类型、分配的值构成

10.windows安全组策略

定义

一组策略的集合,策略即规则的设定,所有组内的用户呢,都要遵循这些规则;

组策略也是去修改注册表的配置,但是嘞,比直接修改注册表,方便灵活些

ps:win10使用要专业版啊

打开

win+r 输入gpedit.msc

示例

比如,用户配置->管理模板->系统,有一个不允许指定的应用程序,需要输入被禁用的应用程序名

启动它,然后启动任务管理器,右键它,->转到详细信息,这时候显示的名称是真正的,在注册表的名称,复制过去即可

再运行该exe,会有限制弹窗

再有,阻止访问注册表编辑工具啊,也是可以的

以上两个操作,在注册表可以找到的

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\*DisallowRun*

11.windows服务

概念

客户端享受服务,服务端提供服务

一般是开机自启,长时间在后台运行。

添加

可以将某些exe添加到服务上去

cmd 上输入

1
2
3
4
5
6
sc create jaden_typora binpath=路径(..\typora.exe)
//sc windows创建服务
//jaden_typora 自定义服务名称

删除的话
sc delete jaden_typora 再重启电脑即可

然后在服务列表中找到,属性,设置为自动即可

当然了,typora试过了,不支持成为服务程序

12.计划任务

电脑有时候在某个时间点,会弹出些广告,这种行为,就是靠计划任务定时实现的

打开

计算机->右键管理

13.linux三剑客

与正则匹配搭配

grep

擅长按行过滤、查找

已知,linux中对于用户登录行为,无论成功还是失败,都会被自动记录到 var/log/secure

比如一台win10,打开cmd,尝试对linux进行ssh

1
2
ssh root@linux_ip
来个错误的密码

linux的对应日志中会记录登录情况,来自哪个ip等等

这个时候呢,linux可以做出筛选1:

1
2
3
cat /var/log/secure | grep "Failed password"
或者
grep "Failed password" /var/log/secure

显示时间啊,错误密码啊,来源ip及端口啊

如果要突出ip,做出筛选2:

正则表达式在线生成就可以了,地址

1
grep "Failed password" /var/log/secure | grep -P "(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)"

会把结果的IP处标红

如果只要ip地址作为结果,筛选3

1
-P 替换为 -Po

只显示ip地址了

统计ip地址尝试登录了多少次,先排序,再去重,筛选4

1
在筛选3的基础上, ...|sort -n|uniq -c

如果某个ip尝试次数过大,对方一定是在爆破

grep 参数

-n 是行号
-c 对结果统计
-i 不区分大小写

-v 反向搜索,取反 //比如,筛选出不含某值的行

-w 精准匹配

-o 只显示匹配结果

-A1同时打印搜索结果行的后一行

-P 使用perl正则

sed

取行和修改替换

选项和参数

-n 列出经过sed处理过的行

-r 正则

-i 直接修改读取原文件

动作

a 指定行后面插入一行

d 删除

i 指定行前面插入一行

p 打印所有

s 替换

举例

来个 seq 5 > 1.txt 有1-5五行,输出到1.txt文件

如果vi更改下,内容如下:

1c

2

3a

4b

5a

现在想查找行里有 a

sed -n '/a/p' 1.txt

p就是打印所有内容

-n就是筛选出处理过的

3a

5a

当然了,过滤一般用grep,sed不太方便

sed -i '/udp/d' 2.txt

会把原文件中包含udp的行删掉

sed -i '3a hello' 1.txt

3a 即在第三行下追加插入

1c

2

3a

hello

4b

5a

sed -i 's#3a#yuleiyun#' 1.txt

这个有个局限就是,比如 有行是3a3a,效果只会是yuleiyun3a,每行就替换一次

1c

2

yuleiyun

hello

4b

5a

全局的话,就加个g

sed -i 's#3a#yuleiyun#g' 1.txt

如果把大写的也替换,加个I ,不区分大小写

sed -i 's#3a#yuleiyun#gI' 1.txt

awk

过滤列

2 this is

3’4 er qw

2 a zf

awk '{print $1}' 3.txt 第一列

2

3’4

2

直接取最后一列

awk '{print $NF}' 3.txt

第一列和最后一列

awk '{print $1,$NF}' 3.txt

计算是可以的

比如 4.txt

a 4 5

b 6 7

awk '{print $1"总价格为:",$2*$3"元"}' 4.txt

双引号的内容可写可不写

a总价格为: 20元

b总价格为: 42元

根据行号筛选内容

awk 'NR==1' 4.txt

可以>= < > <=

a 4 5

取行的同时,取列:

awk 'NR<=1{print $1}'

a

拼凑指定文本

awk -F ':' '{print $1"+"$2}' 4.txt

a+4

b+6

14.权限掩码

r-4

w-2

x-1

umask决定了该用户创建文件的初始权限

如果是root用户,umask值为022 (普通用户:002)

drwxr-xr-x

表示该目录权限0777-0022=0755

这个掩码值可以去 /etc/profile更改

15.inode和block

在硬盘中,inode存储的是索引(比如文件目录)

block类似windows的簇,无论文件大小是多少,文件所占总是为一个簇的倍数,且未占够的地方,其他文件也不能共享。一个文件通常放在一个簇或多个簇中,至少要单独占据簇

16.linux的提权

特殊权限

suid标记,指的是某个可执行文件有超级管理员的权限,但普通用户也可以用,比如 passwd

一般没s的可执行文件,只有超级用户可以使用,下面这个s就表示suid

1
-rwsr-xr-x. 1 root root 27856 Apr  1  2020 /usr/bin/passwd

su

即switch user

su test 或者su root

sudo

作用是来授权的,给普通用户高级权限(只有root做的话,太麻烦)

在普通用户的时候,sudo -l 可以查看普通用户可以使用的一些命令(如果配置了的话)

现在root用户下给普通用户配置一些权限吧

直接输入 visudo,第100行下后添加 普通用户xg的权限

1
2
100 root    ALL=(ALL)       ALL
101 xg ALL=(ALL) /bin/systemctl,/usr/bin/vim

切换到xg用户,sudo -l,看最后一行

1
2
3
4
5
6
7
8
9
10
11
Matching Defaults entries for xg on xinguang:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset,
env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2
QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION
LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER
LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User xg may run the following commands on xinguang:
(ALL) /bin/systemctl, /usr/bin/vim

提权部分我记在“提权方式”那一md去了

17.加密编码

加密编码的意义:代码审计可能用到;也可以对自己的文件进行加密编码

密码类型 解释
MD5 32或16位字符串,由数字和字母(a-f)组成
SHA1 同MD5,不过是40位
NTLM windows哈希密码,域渗透要用的
AES/DES/RC4 AES/DES对称密钥,RC4非对称加密,引入密钥,密文特征类似base64

一般是md5加盐,这种算法是

md5(md5(password).盐);将password进行md5后,与盐拼接,再将结果进行md5

这种方式在php5.5之前的版本,算是不错的加密机制了

编码 解释
base64 数字0-9和字母a-f组成的字符串,大小写敏感,结尾可能有=
URL 数字0-9和字母a-f组成的字符串,大小写敏感,通常格式为 &2d
HEX 0-9加A-F组成
ASCII 将128个字符用数字表示

js前端加密

颜文字加密

jother加密:只用 ! + ( ) [ ] { } 这8个字符对任意字符串编码

JSFUCK加密: 与jother相比,少了 { }

后端代码加密

php: 乱码,但头部有信息

.NET:DLL封装代码文件 (ILSpy)

JAVA: JARS&CLASS文件 (IDEA)

二、网安

1.OSI七层模型

  1. 物理层(Physical Layer):将接收到的数据转化为比特流,主要关注传输媒介、电压、电缆规范、接口等问题。

    比特

  2. 数据链路层(Data Link Layer):该层负责将物理层提供的比特流划分为数据以便于在本地网络中传输在本地网段上使用硬件地址唯一标识主机,并检测和纠正传输中的错误。它还处理点对点之间的直接通信,提供链路管理、访问控制和流量控制等功能。

    MAC地址 局域网 分段目标 局部地址

  3. 网络层(Network Layer):为传送过来的数据加装IP地址,使得数据段转化为数据包或数据报,用于寻址和路由。指引数据包前进方向。该层负责在网络中传输数据包,通过确定最佳路径将数据从发送方传输到接收方。它还处理分组的路由选择、分组转发和拥塞控制等任务。

    数据报

    协议:IP ICMP

  4. 传输层(Transport Layer):提供会话层和网络层之间的传输服务。将会话层数据分段、重组,转化为数据段,提高效率,并在发送方和接收方之间建立一条可靠的连接,确保数据无误传送到网络层。并使用端口号区分应用层的不同应用进程。 该层提供端到端的数据传输服务,确保可靠的数据传输。它负责分段和重组数据,并提供错误检测和纠正、流量控制、拥塞控制以及端口号标识等功能。

    报文段/用户数据报

    协议:TCP UDP

  5. 会话层(Session Layer):组织和协调两个会话进程之间的通信,并对数据交换进行管理。 该层建立、管理和终止应用程序之间的会话连接。它提供了会话控制、同步和对话管理功能,允许应用程序之间进行通信和数据交换。

    会话 全双工/半双工

  6. 表示层(Presentation Layer):对来自应用层的数据进行处理,有格式处理,压缩解压缩,加密解密,编码,目的是使数据快速传递,安全传递。 该层处理数据的表示方式,确保不同系统中数据的兼容性。它负责数据的加密、压缩、解压缩、格式转换以及数据格式的统一表示。

    例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。   

  7. 应用层(Application Layer):用户与各应用程序和网络的接口,直接向用户提供服务,完成用户希望在网络上完成的各种工作。 该层是最高级别的层次,提供直接面向用户的网络服务。

    它包括各种应用程序协议,例如HTTP(超文本传输协议)、SMTP(简单邮件传输协议)、FTP(文件传输协议)、SMTP(25,TCP)、DNS(53,UDP),Telnet,SSH等。

TCP/IP准确来说,第一层应该是网络接口层

2.get与post区别

HTTP协议中的两种请求方法

  1. 数据位置上,GET请求将数据附加在URL的查询参数中,以?后的键值对形式进行传递;POST在请求体上传递,需要抓包。

  2. 数据长度限制:GET请求对数据长度有限制,因为URL有长度限制,不同浏览器和服务器对长度限制的处理方式不同;而POST请求没有严格的数据长度限制。

  3. 数据安全性:GET请求中的数据参数会显示在URL中,因此可能被保存在浏览器的历史记录、服务器日志等地方,存在一定的安全风险;POST请求中的数据不会直接显示在URL中,相对更安全。

  4. 缓存:GET请求可以被浏览器缓存,以提高性能和效率;POST请求默认不会被浏览器缓存,以确保数据的实时性。

  5. 使用场景:GET请求适合获取资源、查询数据,对于幂等的操作。POST请求适合发送数据、提交表单,对于非幂等的操作。

  6. 幂等性:GET请求是幂等的,即多次重复请求不会对资源产生影响,只是获取相同的结果;而POST请求通常是非幂等的,多次请求可能会对资源产生不同的影响,例如创建多个资源。

    幂等:指对同一操作的多次重复执行产生的结果与单次执行的结果相同。简而言之,无论执行多少次,最终的效果都是一样的。

3.Cookies和session的区别

  • Cookie 机制采用的是在客户端保持状态的方案,用来记录用户的一些信息,也是实现 Session 的一种方式
  • Session 机制采用的是在服务器端保持状态的方案,用来跟踪用户的状态,可以保存在集群、数据库、文件中

Cookies是在客户端(通常是Web浏览器)上存储数据的小型文本文件。

Session是在服务器端存储数据的一种机制。

区别:

  1. 存储位置:Cookies存储在客户端(用户的计算机)上,而Session数据存储在服务器端。
  2. 数据容量:Cookies通常有大小限制(每个域名和浏览器对Cookies的数量和大小都有限制),而Session可以存储更多的数据。
  3. 安全性:由于Cookies存储在客户端,因此它们容易受到篡改和伪造的风险。为了增加安全性,可以对Cookies进行加密或添加安全标志。相比之下,Session数据存储在服务器上,不容易被窃取或篡改,但仍然需要注意保护SessionID的安全性。
  4. 生命周期:Cookies可以设置过期时间,可以是会话性的(在浏览器关闭后失效)或持久性的(在特定时间后失效)。Session通常在用户关闭浏览器或一段时间不活动后失效。

4.arp协议的工作原理

将IP地址映射到物理MAC地址的协议,它在局域网中工作。其主要功能是解决在发送数据包时,通过目标IP地址获取对应的MAC地址的问题。

  1. 主机A发送数据包到目标主机B,但是主机A只知道目标主机B的IP地址。
  2. 主机A首先检查本地的ARP缓存表,看是否已经有目标主机B的IP地址对应的MAC地址。如果有,主机A就可以直接使用这个MAC地址。
  3. 如果ARP缓存表中没有目标主机B的IP地址对应的MAC地址,主机A就需要发送一个ARP请求广播。ARP请求广播是一个以太网帧,包含了源主机A的MAC地址、源主机A的IP地址、目标IP地址(即主机B的IP地址)以及一个特殊的目标MAC地址(广播地址:FF:FF:FF:FF:FF:FF)。
  4. 当主机B接收到ARP请求广播后,检查广播中的目标IP地址是否和自己的IP地址匹配。如果匹配,主机B就会发送一个ARP响应给主机A。ARP响应是一个以太网帧,包含了源主机B的MAC地址、源主机B的IP地址以及目标主机A的IP地址和MAC地址。
  5. 主机A接收到ARP响应后,将目标主机B的IP地址和MAC地址的映射关系存储在本地的ARP缓存表中,以便将来的通信中可以直接使用。
  6. 主机A收到目标主机B的MAC地址后,可以构建以太网帧,并将数据包发送到目标主机B的MAC地址。

问题17:session 的工作原理?

答案:

问题18:一次完整的HTTP请求过程

答案:

域名解析 –> 发起TCP的3次握手 –> 建立TCP连接后发起http请求 –> 服务器响应http请求,浏览器得到
html代码 –> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) –> 浏览器对页面
进行渲染呈现给用户

问题19:HTTPS和HTTP的区别

答案:

1.HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输身份认证的网络协议,要比http协议安全。

  1. https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

3.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

问题20:OSI 的七层模型都有哪些?

答案:

物理层:

利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。

数据链路层:

接收来自物理层的位流形式的数据,并封装成帧,传送到上一层

网络层:

将网络地址翻译成对应的物理地址,并通过路由选择算法为分组通过通信子网选择最适当的路径。

传输层:

在源端与目的端之间提供可靠的透明数据传输

会话层:

负责在网络中的两节点之间建立、维持和终止通信

表示层:

处理用户信息的表示问题,数据的编码,压缩和解压缩,数据的加密和解密

应用层:

为用户的应用进程提供网络通信服务

问题21:http长连接和短连接的区别

答案:

问题22:TCP如何保证可靠传输?

答案:

问题23:常见的状态码有哪些?

答案:

问题24:什么是SSL? https是如何保证数据传输的安全(SSL是怎么工作保证安全的)

答案:

问题25:如何保证公钥不被篡改?

答案:

问题26:php爆绝对路径方法?

答案:

问题27:你常用的渗透工具有哪些,最常用的是哪个?

答案:

问题28:xss盲打到内网服务器的利用

答案:

问题29:鱼叉式攻击和水坑攻击

答案:

问题30:什么是虚拟机逃逸?

答案:

问题31:中间人攻击?

答案:

问题32:TCP三次握手过程?

答案:

问题33:七层模型?

答案:

问题34:对于云安全的理解

答案:

问题35:了解过websocket吗?

答案:

问题36:DDOS是什么?有哪些?CC攻击是什么?区别是什么?

答案:

问题37:land攻击是什么?

答案: dos攻击中的一种;其 原理是构造数据包,使得源ip与目的ip都是目标ip,让目标机消耗资源。

问题38:你会如何进行信息收集?

答案:一般是收集域名、子域名、旁站、端口及服务、版本漏洞、敏感目录等等。

svn:3690 svn泄露/未授权访问

weblogic:7001 弱口令

6379:redis 一般无认证/直接访问

8080:tomcat 弱口令/默认口令

8089:jboss 未授权访问/弱口令

问题39:什么是CRLF注入攻击?

答案:

问题40:防止XSS,前端后端两个角度?

答案:

问题41:如何防护一个端口的安全?

答案:

问题42:webshell检测思路?

答案:

静态检测:匹配特征码,特征值,危险函数
动态检测:WAF、IDS等设备
日志检测:通过IP访问规律,页面访问规律筛选
文件完整性监控

问题43:GPC是什么?开启了怎么绕过

答案:

GPC:
php.ini配置文件中的magic_quotes_gpc,实现为get、post、cookie传入的单引号、双引号、反斜线、
NULL字符添加反斜线
绕过:
PHP5的GPC对$_SERVER的忽略,可在http请求头注入
二次注入
宽字节注入

问题44:web常用的加密算法有什么

答案:

问题45:XSS除了获取cookies还能做什么?

答案:

问题46:运营商(或其他)网络劫持

运营商劫持:广告投放
DNS劫持:通过各种手段篡改DNS,劫持网络

rip协议是什么? rip的工作原理

虚拟机逃逸

利用虚拟机软件或者虚拟机中运行的软件的漏洞进行攻击,以达到攻击或控制虚拟机宿主操作系统的目

云安全的理解

融合了并行处理、网格计算、未知病毒行为判断等新兴技术和概念,通过网状的大量客户端对网络中软件行为的异常监测,获取互联网中木马、恶意程序的最新信息,传送到Server端进行自动分析和处理,
再把病毒和木马的解决方案分发到每一个客户端

CRLF注入攻击

通过“回车”和“换行”字符注入HTTP流,实现网站篡改、跨站脚本、劫持等。

APT原理

APT(高级持续性威胁)的原理是通过利用先进的技术和技巧,对目标系统和网络进行长期、隐蔽的攻击,从而获取机密信息、控制系统或进行破坏。

APT攻击通常包括以下几个步骤:

  1. 针对目标进行信息搜集:攻击者通过各种手段(如扫描、社会工程学等)获取目标机器和网络的信息,包括系统漏洞、安全配置、网络拓扑结构、用户信息等。
  2. 利用漏洞进行入侵:攻击者利用先进的攻击技术(如零日漏洞、木马程序、社会工程学攻击等)对目标系统进行入侵。
  3. 建立控制通道:攻击者通过植入恶意程序或利用合法的系统服务建立控制通道,以便后续的攻击。
  4. 滞留攻击:攻击者在网络中长期滞留,不断地搜集信息、寻找新的漏洞和攻击机会。
  5. 数据窃取或破坏:一旦攻击者获得所需的信息或控制权,就可能对目标系统和网络进行数据窃取或破坏。

APT的攻击过程通常需要长达数月至数年的时间,攻击者极为隐蔽,很难被发现和防范。因此,APT被认为是一种非常危险的网络攻击形式。

二、计网

TCP头部格式,重要部分:

序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。

确认应答号:指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决不丢包的问题。

控制位:

  • ACK:该位为 1 时,「确认应答」的字段变为有效,TCP 规定除了最初建立连接时的 SYN 包之外该位必须设置为 1
  • RST:该位为 1 时,表示 TCP 连接中出现异常必须强制断开连接。
  • SYC:该位为 1 时,表示希望建立连,并在其「序列号」的字段进行序列号初始值的设定。
  • FIN:该位为 1 时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换 FIN 位置为 1 的 TCP 段。

TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。

  • 面向连接:一定是「一对一」才能连接,不能像 UDP 协议 可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;
  • 可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;
  • 字节流:消息是「没有边界」的,所以无论我们消息有多大都可以进行传输。并且消息是「有序的」,当「前一个」消息没有收到的时候,即使它先收到了后面的字节已经收到,那么也不能扔给应用层去处理,同时对「重复」的报文会自动丢弃。

TCP连接是什么?

建立一个 TCP 连接是需要客户端与服务器端达成以下三个信息的共识。

  • Socket:由 IP 地址和端口号组成
  • 序列号:用来解决乱序问题等
  • 窗口大小:用来做流量控制

唯一确定一个 TCP 连接

靠四元组。即

  • 源地址
  • 源端口
  • 目的地址
  • 目的端口

TCP的出现是因为:

IP 层是「不可靠」的,它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性。

而 TCP 是一个工作在传输层可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。

有一个 IP 的服务器监听了一个端口,它的 TCP 的最大连接数=客户端的IP数*客户端的端口数

对 IPv4,客户端的 IP 数最多为 232 次方,客户端的端口数最多为 216次方

当然由于文件描述符限制内存限制,最大连接数不会达到理想状态

UDP与TCP区别

1. 连接

  • TCP 是面向连接的传输层协议,传输数据前先要建立连接。
  • UDP 是不需要连接,即刻传输数据。

2. 服务对象

  • TCP 是一对一的两点服务,即一条连接只有两个端点。
  • UDP 支持一对一、一对多、多对多的交互通信

3. 可靠性

  • TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达。
  • UDP 是尽最大努力交付,不保证可靠交付数据。

4. 拥塞控制、流量控制

  • TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
  • UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。

5. 首部开销

  • TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。
  • UDP 首部只有 8 个字节,并且是固定不变的,开销较小。

由于 TCP 是面向连接,能保证数据的可靠性交付,因此经常用于:

  • FTP 文件传输
  • HTTP / HTTPS

由于 UDP 面向无连接,它可以随时发送数据,再加上UDP本身的处理既简单又高效,因此经常用于:

  • 包总量较少的通信,如 DNSSNMP
  • 视频、音频等多媒体通信
  • 广播通信

TCP为什么是三次握手

  • 三次握手才可以阻止历史重复连接的初始化(主要原因)
  • 三次握手才可以同步双方的初始序列号
  • 三次握手才可以避免资源浪费

客户端连续发送多次 SYN 建立连接的报文,在网络拥堵等情况下:

  • 一个「旧 SVN 报文」比「最新的 SYN 」 报文早到达了服务端;
  • 那么此时服务端就会回一个 SYN + ACK 报文给客户端;
  • 客户端收到后可以根据自身的上下文,判断这是一个历史连接(序列号过期或超时),那么客户端就会发送 RST 报文给服务端,表示中止这一次连接。

如果是两次握手连接,就不能判断当前连接是否是历史连接,三次握手则可以在客户端(发送方)准备发送第三次报文时,客户端因有足够的上下文来判断当前连接是否是历史连接:

  • 如果是历史连接(序列号过期或超时),则第三次握手发送的报文是 RST 报文,以此中止历史连接;
  • 如果不是历史连接,则第三次发送的报文是 ACK 报文,通信双方就会成功建立连接;

总之

  • 「两次握手」:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号;
  • 「四次握手」:三次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数。

IP 层会分片,为什么 TCP 层还需要 MSS ?

IP层本身没有超时重传机制,TCP才有。如果整个(TCP头部+TCP数据)交给IP层分片,当其中一个IP片丢失,整个IP报文都得重传。

为了达到最佳的传输效能 ,TCP 协议就通过MSS切片、重传,效率很高。

SYN 攻击

TCP 连接建立是需要三次握手,假设攻击者短时间伪造不同 IP 地址的 SYN 报文,服务端每接收到一个 SYN 报文,就进入SYN_RCVD 状态,但服务端发送出去的 ACK + SYN 报文,无法得到未知 IP 主机的 ACK 应答,久而久之就会占满服务端的 SYN 接收队列(未连接队列),使得服务器不能为正常用户服务。

避免方法

1.控制SYN_RCVD 状态连接的最大个数,超出时丢弃。

2.SYN队列占满,则启动cookie,net.ipv4.tcp_syncookies = 1

图解TCP

补充1

javascript

js,目的是前端验证;是一门解释性语言、动态语言;类似于c和java的语法结构、严格区分大小写、基于原型的面向对象。

使用方式:

  • 标签引用
1
<script>  alert("Hello,World!"); </script>
  • 文件引用

    1
    2
    3
    4
    main.html中:
    <script src="main.js"></script>
    而main.js:
    alert("Hello,World!");

输出:

1.f12的控制台

consloe.log(“日志”)/info/warn

补充2

-找回密码的地方,存在的漏洞?

1.用户凭证暴力破解
1.1 密码找回的凭证太弱,如只需要填入一个四位或者六位的纯数字,就可以重置密码,导致可以暴力破解。

2.返回凭证
2.1 url返回验证码及token(找回密码凭证发到邮箱中,url中包含用户信息以及凭证,但是这个凭证可以重置任何用户)

2.2 密码找回凭证在页面中(通过密保问题找回密码、找回密码的答案在网页的源代码中)

2.3 返回短信验证码

(抓包更改)

3.邮箱弱token
3.1 时间戳的md5(Unix时间戳)
3.2 用户名
3.3 服务器时间

4.用户凭证有效性
4.1 短信验证码
4.2 邮箱token
4.3 重置密码token

5.重新绑定
5.1 手机绑定(任意用户绑上自己可控的安全手机,就可以重置任意人的手机号码了)
5.2 邮箱绑定

6.服务器验证
6.1 最终提交步骤
6.2 服务器验证可控内容(在最后重置密码处跟随一个用户ID,改成其他用户ID,即可把其他用户改成你刚刚设置的密码)
6.3 服务器验证逻辑为空

7.用户身份验证
7.1 账号与手机号码的绑定
7.2 账号与邮箱账号的绑定

8.找回步骤
8.1 跳过验证步骤、找回方式,直接到设置新密码页面

9.本地验证
9.1 在本地验证服务器的返回信息,确定是否执行重置密码,但是其返回的信息是可控的内容,或者可以得到的内容(密码找回凭证在客户端获取,在密码找回时注意抓包查看所有url返回响应等,看是否有最终的凭证出现,这样就可以绕过手机或者安全邮箱了)
9.2 发送短信等验证信息的动作在本地进行,可以通过修改返回包进行控制

10.注入
10.1 在找回密码出存在注入漏洞

11.Token生成
11.1 Token生成可控

12.注册覆盖
12.1 注册重复的用户名(比如注册A,返回用户已存在,把已存在的状态修改为可注册,填写信息提交注册,就可以覆盖A账号)

13.session覆盖

————————————————
版权声明:本文为CSDN博主「ihszg」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45663905/article/details/108429837

手机号找回密码,但是验证次数频繁会限制,

尝试在手机号后面添加不为数字的字符,查看是否过滤

订单信息的逻辑漏洞

越权

改参数:

低级分换取高积分商品:选取低级分礼物兑换,提交抓包,改编号为高积分

支付页面的金额、数量(负数)

http传输过程中存在的安全隐患

明文传输;

篡改

会员系统漏洞

个人中心的xss、修改信息

js在漏洞挖掘中的作用

js自带敏感信息泄露

有加密时,使用参数解密

空白页面测试

改UA、Referer、请求方式等等,fuzz目录

内敛注释

sql注入中的绕过方式,利用注释符号,把要使用的查询语句放在/*。。。*/中,这样在一般的数据库是不会执行的,但是在mysql中内联注释中的语句会被执行。

SQL查询在执行之前,通常会经过一个解析器来分析语法和结构。解析器会根据SQL语法规则对输入进行解析,并识别出关键字、表名、列名等元素。

内联注释在SQL注入中有效的原因是因为它能够绕过语法解析器对注释内容的处理。SQL查询在执行之前,通常会经过一个解析器来分析语法和结构。解析器会根据SQL语法规则对输入进行解析,并识别出关键字、表名、列名等元素。

然而,解析器对注释的处理方式是将注释内容完全忽略,不会将其视为SQL代码的一部分。这为攻击者提供了一种机会,利用注释符号将恶意代码嵌入SQL语句中,并确保其在语法解析阶段不会引发错误。

例子,万能密码,就是利用了内联注释。

验证码爆破

  • 验证码暴力破解
    • 工具
      • Burpsuite
      • Hydra
  • 验证码时间、次数测试
    • 重复提交携带验证码的数据包,查看返回包,判断次数
  • 验证码客户端回显测试
    • 抓包测试,是否有回显,验证码是否会被返回
  • 验证码绕过测试
    • 抓包,删除验证码字段,查看是否可以成功发送
    • 抓包,正常流程下,记录验证码后的数据包,替换目标包中内容,直接发送,查看是否可以直接绕过验证码

csrf\xss\xxe

xss:跨站脚本攻击,将输入构造成恶意代码,执行时,会实现窃取用户信息等攻击

修复:实体字符转义、htttponly 禁止js读取cookie、输入时校验、浏览器与we应用端采用相同字符编码

csrf:跨站请求伪造攻击

修复:token、二次密码referer校验

xxe:xml外部实体攻击

修复:xml解析库在调用时严格禁止对外部实体解析

java反序列化

java中的objectoutputstram类的writeobject()方法实现序列化,将对象转化成字节流,便于保存和传输

shiro反序列化

apache shrio提供的remember功能,用户登录成功会生成加密并编码的cookie。服务器对此的处理方式是,获取cookie->base64解码->aes解密->反序列化校验

漏洞利用:aes密钥已知,将恶意代码进行序列化->加密->base64编码,形成新cookie。让服务器解析

ips和ids区别

​ ips:入侵防御系统,一个安全设施,监视网络及设备网络资料传输行为,即时中断、调整异常传输行为。位于防火墙和网络设备之间。具有检测已知和未知攻击并具有成功防止攻击的能力

ids:入侵检测系统,部署在网络内部,对内部攻击无能为力,无法反击网络攻击。(基于数据包嗅探技术)

建立隧道

一个口子,从外网到内部,即端口转发。

将内网靶机的xxxx:3389端口转发到边界机的yyyy:8888端口;远程连接边界机

shell/webshell

shell:

1.主机的管理员权限(powershell/root)

  1. 交互接口,如windows的cmd与linux的终端

webshell:以asp、aspx、php、jsp或者cgi等网页文件形式存在的一种命令执行环节,也可以称为一种网页后门

三种业务逻辑漏洞,以及修复方式

密码找回:密码可以暴力破解、通用型凭证比较简单、跳过验证步骤、找回凭证可以拦截等方式得到

身份认证:cookie仿冒、会话固定攻击(得到session)

验证漏洞:验证码暴力破解、重复利用、改包绕过等。

xss钓鱼

xss通过脚本文件获取用户的cookie,加入 cookie,用 referer 来提交,无需输入帐号密码直接登录进去

syn攻击

客户端在短时间内伪造大量不存在的 IP 地址,向服务器不断地发送 syn 包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造 的 SYN 包将长时间占用未连接队列,正常的 SYN 请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。

三、爬虫

目的是访问网页,提取感兴趣的内容并保存

流程:

1.先访问默认url,发出http请求

2.接收响应内容,解析html结构,提取目标字段

3.查找网页中的链接,放入待访问队列

4.提取出访问队列的一个url,并发出http请求

5.重复2,3步骤

反爬虫

robots.txt 指定了可以爬虫的url。

ua检测:可能使用默认或自定义的User-Agent标识

ip的频率限制

验证码验证

四、风险评估

三要素:

资产:资产价值

威胁:威胁主体、影响对象、出现频率、动机等

脆弱性:资产弱点的严重程度

准备阶段:资产识别、威胁识别、脆弱性识别

已有安全措施的确认

风险识别:

​ 风险计算->

五、应急响应

PDCERF模型

  • Prepare(准备):准备用来检测的工具和人
  • Detection(检测):紧急事件监测:包括防火墙、系统、web服务器、IDS/WAF/SIEM中的日志,不正常或者是执行了越权操作的用户,甚至还有管理员的报告
  • Containment(抑制):首先先控制受害范围,不要让攻击的影响继续蔓延到其他的IT资产和业务环境,切记不要直接一股脑的投入全部精力到封堵后门。紧接着要做的是去寻找根源原因,彻底解决,封堵攻击源,把业务恢复到更张水平
  • Eradication(根除)
  • Recover(恢复)
  • Follow-Up(跟踪):根据各种监控去确定没有其他的攻击行为和攻击向量,紧接着就是开会反省此次事件,写报告,持续改进工作流程和工作缓解

六、DDOS

最基本的攻击方式:利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。

主要方式

ddos:

SYN Flood
UDP Flood
ICMP Flood
Connection Flood
HTTP Get
UDP DNS Query Flood

CC攻击:
模拟多个正常用户不停地访问如论坛这些需要大量数据操作的页面,造成服务器资源的浪费,CPU长时
间处于100%,网络拥塞

两者区别:

CC攻击网页,DDOS攻击服务器,更难防御
CC门槛较低,DDOS需要大量服务器
CC持续时间长,DDOS产生的影响大

被攻击的服务器有以下症状:1、被攻击主机上有大量等待的TCP连接;2、网络中充斥着大量的无用的数据包,源地址为假;3、制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通讯;4、利用受害主机提供的服务或传输协议上的缺陷,反复高速的发出特定的服务请求,使受害主机无法及时处理所有正常请求;5、严重时会造成系统死机

防御预案:

  • 网络设备设施
    • 拼带宽,加大带宽,但是成本太高
    • 使用硬件防火墙
    • 选用高性能设备
  • 抗D思想和方案
    • 负载均衡:分流
    • 花钱买流量清洗服务
    • CDN:web层,比如cc攻击:分流
    • 限制连接和请求
    • 分布式集群防御
    • 高防:防大部分攻击,udp、大型的cc攻击
  • 预防为主
    • 系统漏洞
    • 系统资源优化:
    • 过滤不必要的服务和端口
    • 限制特定流量:检查访问来源做适当限制

七、webshell

webshell客户端 用于webshell后门和攻击者之间的通信程序,我们可以通过webshell客户端的流量来判断服务器上是否存在Webshell后门。

流量特征

中国菜刀:流量特征比较明显,2011,2014版本中,流量中有的php代码,asp代码是明文形式,jsp代码有固定格式,容易被检测出来。2016版本隐蔽性增强,对php,asp代码增加了混淆,还对ASP代码进行了unicode编码

蚁剑:可以对流量进行加密、混淆。但是有些关键代码没有被加密,如:PHP中的ini_set;ASP中的OnError,response等

蚁剑PHP类WebShell链接流量:

对php中的某些代码没有加密,例如ini_set,set_time_limit。比较容易被识别

蚁剑ASP类WebShell:

OnError ResumeNext,response等没有被加密,是明文的形式,比较容易识别

execute在蚁剑中被打断混淆了,变成了拼接形式Ex”&cHr(101)&”cute

蚁剑绕过特征流量:

蚁剑混淆加密后还有一个比较明显的特征,即为参数名大多以“_0x…=”这种形式
————————————————
版权声明:本文为CSDN博主「Buffedon」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46684578/article/details/118725385

冰蝎、蚁剑、哥斯拉的流量特征

https://www.cnblogs.com/-andrea/p/17473499.html

八、MySQL

写shell

  • select '<?php phpinfo()> into outfile 'D:/shelltest.php'
  • dumpfile
  • file_put_contents

写shell的条件?

  • 用户权限

  • 目录读写权限

  • 防止命令执行:disable_functions,禁止了disable_functions=phpinfo,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,但是可以用dl扩展执行命令或者ImageMagick漏洞

  • open_basedir: 将用户可操作的文件限制在某目录下

九、mongodb、redis未授权

十、安全加固

安全加固服务流程是怎么样的?

1、确定范围:确定资产范围,收集需要加固的信息系统涉及的主机、网络设备、数据库和中间件的信息,完成信息收集;

2、制定方案:制定安全加固方案,对加固范围内的资产进行安全评估,确认安全现状,制定加固措施形成加固方案;

3、确认与实施:与客户充分讨论安全加固方案、确认符合企业的需求的方案,实施安全加固方案;

4、服务交付:输出安全加固报告,保护企业信息安全,保证修复后业务正常运转。

安全加固主要有以下几个优势:

1、定制化;根据客户资产情况和需求,量身定制安全加固方案;

2、保证效果:安全加固方案及实施过程在实施前与客户充分讨论,保证实施效果;

3、专业服务:提供远程服务,如客户需要可提供驻场服务,保证企业信息安全。

安全加固可以做主机加固、数据库加固、中间件加固等服务。

1
2
3
4
5
6
7
8
9
10
windows加固
帐号加固:查看是否有其他用户、账号封禁删除
本地安全策略:密码锁定、账户锁定、授权管理、审核策略(敏感操作记录、用户权限分配)
补丁管理
日志审核:查看事件查看器、查看id都表示什么事件
Linux
账号安全:禁止root用户直接远程ssh、Telnet登录,禁止无用的系统用户登录
系统日志审计:syslog 登录事件记录、syslog.conf 的配置审核、启动审计进程
关闭ipv6
检查是否伪装IP

为什么需要安全加固

应用系统运行所需的软硬件,往往存在以下安全问题:

安装、配置不符合安全需求
参数配置错误
使用、维护不符合安全需求
系统完整性被破坏
被注入木马程序
帐户/口令问题
安全漏洞没有及时修补
应用服务和应用程序滥用
应用程序开发存在安全问题等

安全加固内容

正确的安装
安装最新和全部OS和应用软件的安全补丁
操作系统、系统软件、应用软件的安全配置
系统安全风险防范
提供系统使用和维护建议
系统功能测试
系统安全风险测试
系统完整性备份
必要时重建系统等

系统加固

Windows系统安全加固

netstat 查看开放端口
secpol.msc 查看和修改本地安全设置
services.msc 查看和修改服务
eventvwr.msc 查看日志
net user/localgroup/share/config 查看用户/用户组/共享/当前运行可配置服务
regedit 打开注册表
Windows账号及安全策略

账号安全设置

设置方法:“开始”—“运行”输入secpol.msc(控制面板——管理工具)
立即生效:gpupdate /force

账号策略

密码必须符合复杂性要求:启用
密码长度最小值 8个字符
密码最长使用期限: 30天
强制密码历史: 3个记住的密码

账号锁定

帐户锁定阀值: 3次无效登陆
帐户锁定时间: 30分钟
复位帐户锁定计数器:30分钟之后

Administartor账号、组重命名

禁用Guest账户权限

我的电脑“右击”管理“打开—计算机管理—本地用户和组—用户—Guest—右键—属性—常规—选择“账户已禁用”

net user guest /active:no

日志及审核策略

安全选项策略设置

用户权限策略设置

  • 通过终端服务拒绝登陆”中加入Guests、User组
  • “通过终端服务允许登陆”中只加入Administrators组
  • “从网络访问此计算机”中删除PowerUsers和BackupOperators
  • “拒绝本地登录”中添加web和guest用户
NTFS安全

文件系统又被称作文件管理系统,负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。

Windows权限的继承性、累加性、优先性、交叉性四项基本原则

继承性:下级的目录在没有经过重新设置之前,是拥有上一级目录权限设置的。

累加性:是说如一个组GROUP1中有两个用户USER1、USER2,他们同时对某文件或目录的访问权限分别为“读取”和“写入”,那么组GROUP1对该文件或目录的访问权限就为USER1和USER2的访问权限之和。
优先性:权限的这一特性又包含两种子特性,其一是文件的访问权限优先目录的权限,也就是说文件权限可以越过目录的权限,不顾上一级文件夹的设置。另一特性就是“拒绝”权限优先其它权限,也就是说“拒绝”权限可以越过其它所有其它权限,一旦选择了“拒绝”权限,则其它权限也就不能取任何作用,相当于没有设置。
交叉性:指当同一文件夹在为某一用户设置了共享权限的同时又为用户设置了该文件夹的访问权限,且所设权限不一致时,它的取舍原则是取两个权限的交集,也即最严格、最小的那种权限。如目录A为用户USER1设置的共享权限为“只读”同时目录A为用户USER1设置的访问权限为“完全控制”,那用户USER1的最终访问权限为“只读”。

权限设置

系统分区C盘 administrator、system完全控制
C:\Documents and Settings\ administrator、system完全控制
C:\windows\system32\ administrator读写
C:\progran files 为Common File目录之外的所有目录赋予Administrators 和SYSTEM 完全控制
C:\windows 系统管理员完全控制、system拒绝(继承)
C:\windows\system32 其关键程序只允许administrator完全控制
C:\Inetpub\ administrator、system完全控制,必要时可以删除该目录
网站目录所在磁盘 administrator、system完全控制

注册表安全设置

通过注册表,用户可以轻易地添加、删除、修改windows系统内的软件配置信息或硬件驱动程序

HKEY_LOCAL_MACHINE 包含关于本地计算机系统的信息,包括硬件和操作系统数据。
HKEY_LOCAL_ROOT 包含各种OLE技术使用的信息技术和文件类别关联数据
HKEY_LOCAL_USER 包含环境变量、桌面设置、网络连接、打印机和程序首选项。
HKEY_LOCAL_USERS 包含关于动态加载的用户配置文件和默认的配置文件的信息,有些信息和HKEY_CURRENT_USER交叉出现
HKEY_CURRENT_CONFIG 包含在启动时由本地计算机系统使用的硬件配置文件的相关信息。

禁止自动登录

启用源路由欺骗保护

禁止空链接

删除系统默认共享

修改默认3389远程端口

关闭135.139.445隐患端口

Linux系统安全加固

系统用户

账号分类:
超级管理员 uid=0,
系统默认用户 系统程序使用,从不登录
新建普通用户 uid大于500

/etc/password

名称 密码字串 uid gid 用户全名 宿主目录 登录shell路径

/etc/shadow

名称 加密后的密码字串 上次修改时间…

liunx用户管理

#添加用户
useradd <用户名>
#删除用户
userdel [-r][-f] <用户名>

#锁定/解锁用户
passwd -l <用户名>
passwd -u <用户名>

#用户属性
usermod -L <用户名>锁定用户
usermod -U <用户名>解锁用户

#查看当前用户
id

解析文件权限

ls -l

文件系统安全

chmod 777 test

设置合理的初始文件权限

linux提权漏洞

由于Linux 内核的内存子系统在处理 Copy-on-Write 时出现竞争条件(漏洞),导致私有的只读内存映射被破坏、获取读写权限后低权限用户可以进一步提权。

防御:升级内核

锁定系统中多余的自建帐号

对于一些保留的系统伪帐户如:bin, sys,

adm,uucp,lp, nuucp,hpdb, www, daemon等可根据需要锁定登陆。

加固方法:
  使用命令passwd -l <用户名>锁定不必要的账号。

使用命令passwd -u <用户名>解锁需要恢复的账号。

检查shadow中空口令帐号

awk -F ":" '($2=="!"){print $1}' /etc/shadow

加固:

#锁定不必要的账户
passwd -l <用户名>

#解锁需要恢复的账户
passwd -u <用户名>

#为用户设置密码
passwd <用户名>

设置系统密码策略

执行命令
cat /etc/login.defs|grep PASS #查看密码策略设置
加固方法:
vi /etc/login.defs修改配置文件
PASS_MAX_DAYS 90 #用户的密码最长使用天数
PASS_MIN_DAYS 0 #两次修改密码的最小时间间隔
PASS_MIN_LEN 7 #密码的最小长度
PASS_WARN_AGE 9 #密码过期前多少天开始提示

禁用root之外的超级用户

限制能够su为root的用户

重要文件加上不可改变属性

ssh安全

禁止root用户进行远程登录

该端口或关权限

屏蔽SSH登录banner信息

设置账户锁定登录失败锁定次数锁定时间

cat /etc/pam.d/system-auth|grep auth

#设置为密码连续错误6次,锁定时间300秒
vi /etc/pam.d/system-auth
auth required pam_tally.so oneer=filad deny=6 unlock_time=300

解锁用户:faillog -u <用户名> -r

修改账户TMOUT值,设置自动注销时间

#查看有无TMOUT的设置
cat /etc/profile|grep TMOUT

加固:vim /etc/profile

添加TMOUT=600

无操作600秒后自动退出

设置系统日志策略配置文件

ps -aef | grep syslog #确定syslog服务是否启用
cat /etc/rsyslog.conf #查看syslogd的配置,并确认日志文件日否存在

#系统日志 (默认)
/var/log/messages
#cron日志 (默认)
/var/log/cron
#安全日志 (默认)
/var/log/secure

阻止系统响应任何从外部/内部来的ping请求

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

如此其它客户端无法ping通

中间件加固

IIS加固

如网站正常运行只需要ASP环境,那我们就没必要安装.net组件。
对于IIS版本,至少要在6.0以上

删除默认网站

把IIS默认安装的站点删除或禁用掉

禁用不必要的Web服务扩展

如webdev、asp.net

删除不使用的应用程序扩展

只保留必要的应用程序扩展,其他的一律删除,尤其是像cer、asa这样

IIS访问权限配置

如果IIS中有多个网站,建议为每个网站配置不同的匿名访问账户。
方法:
a. 新建一个账号,加入Guests组
b. “网站属性”—>“目录安全性”—>“身份验证和访问控制”,把“启用匿名访问”处,用刚新建的账户代替默认账户。

正确设置网站目录的权限和IIS权限

网站分区为NTFS分区。网站目录出system和administrator组有完全控制权限外,其他用户只需要有读取权限。

IIS6管理器中设置:

  • 只选择“读取、记录访问、索引资源”
  • 禁止“写入”和“脚本资源访问”,避免IIS Put上传攻击。
  • 禁止“目录浏览”,避免目录遍历攻击。

应用程序设置中的执行权限设置为“纯脚本”

原则

  • 目录有写入权限,一定不要分配执行权限
  • 目录有执行权限,一定不要分配写入权限
  • 网站上传目录和数据库目录一般需要分配“写入”权限,但一定不要分配执行权限
  • 其他目录一般只分配“读取”和“记录访问”权限即可。

设置IP访问限制

正确设置IIS日志

在IIS管理器中,右击网站“属性”,点击网站选项卡,确定已经选择“启用日志记录”,活动日志格式为“W3C扩充日志文件格式”。自定义日志路径,且只允许Administrators组用户和SYSTEM用户访问。

自定义IIS返回的错误信息

禁止向客户端发送详细的ASP错误信息

在IIS管理器中—>“属性”—>“主目录”—>“配置”—>“调试”,选择“向客户端发送下列文本错误消息”项,自定义出错时返回的错误信息

Apache安全加固

隐藏Apache banner信息

vim /etc/httpd/conf/httpd.conf
#在出现错误页的时候不显示服务器操作系统的名称
ServerTokens OS  修改为:ServerTokens Prod
#不回显apache版本信息
ServerSignature On 修改为:ServerSignature Off

禁止目录浏览

Options Indexes FollowSymLinks

修改为:

vim /etc/httpd/conf/httpd.conf
Options FollowSymLinks

限制IP访问

限制禁止访问的文件夹,例如后台目录

防止Apache的解析漏洞

这种解析特性经常被用来绕过Web应用的文件上传检测。

通过禁止httpd解析文件,禁止httpd解析index.php.jpg文件

<FilesMatch .php$>
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch “.phps$”>
SetHandler application/x-httpd-php-source
</FilesMatch>

错误页面重定向

在.htaccess 文件中加入如下内容即可:

ErrorDocument 400 /custom400.html
ErrorDocument 401 /custom401.html
ErrorDocument 403 /custom403.html
ErrorDocument 404 /custom404.html
ErrorDocument 405 /custom405.html
ErrorDocument 500 /custom500.html Customxxx.html 为要设置的错误页面。

日志设置

编辑 httpd.conf 配置文件,设置日志记录文件、记录内容、记录 格式。其中,错误日志:

LogLevel notice #日志的级别
ErrorLog logs/error_log #日志的保存位置(错误日志)

访问日志:

LogFormat %h %l %u %t \”%r\” %>s %b “%{Accept}i\”%{Referer}i\” \”%{User-Agent}i\””
combined
CustomLog logs/access_log combined (访问日志)

拒绝服务防范

合理设置 session 时间,防止拒绝服务攻击

vim httpd.conf 配置文件

Timeout 10 #客户端与服务器端建立连接前的时间间隔
KeepAlive On
KeepAliveTimeout 15 #限制每个 session 的保持时间是 15 秒

禁用CGI

如果服务器上不需要运行 CGI 程序,建议禁用 CGI
修改配置vim /etc/httpd/conf/httpd.conf,把 cgi-bin 目录的配置和模块都注释掉

#LoadModule cgi_module modules/mod_cgi.so
#ScriptAlias /cgi-bin/ “/var/www/cgi-bin/“
#<Directory “/var/www/cgi-bin”>
AllowOverride None

#Options None

#Order allow,deny

#Allow from all

#</Directory>

防止SQL注入及远程包含

php.ini中有一个设置:

1
2
magic_quotes_gpc = Off	改为     magic_quotes_gpc = On
1

在远程文件包含漏洞中,攻击者可以通过访问外部地址来加载远程代码,所以一定要设置:

1
allow_url_fopen = off

nginx服务器安全加固

禁用autoindex

确保nginx.conf配置文件上禁用autoindex,即autoindex off或者没有配置autoindex

关闭服务器标记

如果开启的话(默认情况下)所有的错误页面都会显示服务器的版本和信息。nginx.conf配置如下:

1
2
3
4
5
6
7
8
http{
include naxsi_core.rules;
include mime.types;
default_type application/octet-stream;
sendfile on;
server_tokens off;
... ...

同时修改/usr/local/nginx/conf/fastcgi_params
将里面的
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
修改为:
fastcgi_param SERVER_SOFTWARE nginx;

自定义缓存

设置自定义缓存以限制缓冲区溢出攻击。nginx.conf配置如下:

1
2
3
4
5
6
7
8
9
http{
... ...
server{
... ...
client_body_buffer_size 16K;
client_header_buffer_size 1k;
client_max_body_size 1m;
large_client_header_buffers 4 8k;

timeout设置

设置timeout设低来防御DOS攻击,nginx.conf配置如下:

1
2
3
4
5
6
7
http {
... ...
client_body_timeout 10;
client_header_timeout 30;
keepalive_timeout 30 30;
send_timeout 10;

配置日志
限制访问

nginx.conf配置,只接收get和post

1
2
3
4
5
6
7
server{
... ...
if($request_method !~ ^(GET|HEAD|POST)$) {
return404;
}
... ...

限制访问IP

模块 ngx_http_access_module 允许限制某些IP地址的客户端访问。

1
2
3
4
5
6
7
location/ {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}

数据库加固

Mysql数据库安全加固

删除默认数据库和数据库用户
1
2
3
4
5
6
7
8
mysql> show databases;
mysql> drop database test; #删除数据库test
mysql> use mysql;
mysql> delete from db; #删除存放数据库的表信息,因为还没有数据库信息。
mysql> delete from user where not (user='root'); #删除初始非root的用户
mysql> delete from user where user='root' and password=''; #删除空密码的root尽量重复操作
mysql> flush privileges; #强制刷新内存授权表。

不使用默认密码和弱口令

检查账户默认密码和弱口令,口令长度至少8位,并包括数字、小写字母、大写字母和特殊符号四类中至少两种。且5次以内不得设置相同的口令,密码应至少90天更换一次。

1
2
3
Mysql> Update user set password=password(‘test!p3’) where user=‘root’;
Mysql> Flush privileges;

改变默认mysql管理员帐号

mysql> update mysql.user set user=’admin’ where user=’root’;

禁止远程连接数据库

默认3306打开

vi /etc/my.cf #将#skip-networking注释去掉

限制用户连接的数量
1
2
3
vi /etc/my.cnf
[mysqld]
max_user_connections=2

十一、Mysql索引

用于实现数据的快速检索。

顺序访问

顺序访问是在表中实行全表扫描,从头到尾逐行遍历,直到在无序的行数据中找到符合条件的目标数据。

索引访问

索引访问是通过遍历索引来直接访问表中记录行的方式。

使用这种方式的前提是对表建立一个索引,在列上创建了索引之后,查找数据时可以直接根据该列上的索引找到对应记录行的位置,从而快捷地查找到数据。索引存储了指定列数据值的指针,根据指定的排序顺序对这些指针排序。

查询数据时不用读完记录的所有信息,而只是查询索引列

12、GPC是什么?GPC之后怎么绕过?

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2023-2025 是羽泪云诶
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信